2012-06-11 45 views
2

在IDE中設計窗體時,可以自由放置和定位非可視組件(例如TMainMenus,TDatamodules)。該位置是持久的,所以在重新加載表單時,這些組件出現在正確的位置。如何訪問非可視化Delphi組件的設計位置?

但是,TComponent沒有頂部或左側的屬性!

那麼,如何將我的代碼訪問非可視化組件的「設計的立場」?

+0

@David,當然IDE只是「運行時代碼」,當然?我並不期待它很容易,但它是可能的。 – Roddy

+2

對於左側現在的位置嘗試'LongRec(YourComponent.DesignInfo).Lo'和頂部使用'LongRec(YourComponent.DesignInfo).Hi' – RRUZ

+4

什麼是你能夠訪問運行時代碼的左邊和頂部無屬性的好處可視化組件? –

回答

6

這可以在運行時訪問,但它是那種一個黑客攻擊。 (主要是因爲它是作爲一種破解實現的)。

Left和Top屬性設置爲字大小值,並且它們中的兩個被打包在一起,稱爲TComponent.FDesignInfo。您可以使用DesignInfo屬性獲取其值。看看TComponent.DefineProperties來看看它是如何使用的。

+0

這就是我需要的破解。謝謝。 – Roddy

+0

謝謝!但我怎樣才能設置這個值?我需要設置一些非可視組件的位置。 – user1580348

0

而且也:

  • 如何DesignInfo設置爲像(-100,-100)上的點?

目的:將圖標放在視覺區域外,在設計時隱藏它。

注意:例如創建直接從TComponent派生的簡單視覺組件時,我記得一個非常簡單的標籤(taht是全部對齊頂部,allways left = 0,top是自動計算的, bla bla bla)只將標題屬性存儲到.dfm文件中;並且任何本地化程序都只會看到該標題屬性。

的解決方案是要覆蓋ReadState使用如下代碼:

procedure TMyComponent.ReadState(Reader:TReader); 
var 
    NewDesignInfo:LongRec; 
begin 
    inherited ReadState(Reader); 
    NewDesignInfo.Hi:=Word(-100); // Hide design-time icon (top position = -100) 
    NewDesignInfo.Lo:=Word(-100); // Hide design-time icon (left position = -100) 
    DesignInfo:=Longint(NewDesignInfo); // Set the design-icon position out of visual area 
end; 

希望幫助別人!

相關問題