2017-05-14 26 views
0

我創造了這樣的風格改變:德爾福如何在運行時firemonkey用戶樣式文本子屬性

enter image description here

然後,我創建了一個名爲TLieu

一個TLayout herited組件我的目標是instanciate它在運行時和更改:圖像屬性,Title.Text屬性,Informations.Text屬性,地圖,信息,鏈接按鈕

我的代碼是這樣的,但它不工作(Delphi XE 10.1):

Procedure TF_Main.Button1Click(Sender: TObject); 
var 
    Lieu : TLieu; 
begin 
    Lieu := TLieu.Create(VSB_Place); 
    Lieu.Name := 'Test'; 
    Lieu.StyleName := 'Lieu'; 
    Lieu.StylesData['Title.Text'] := 'My Title'; 
    // TLayout(Lieu).StylesData['Title.Text'] := 'My Title'; // this doesn't work either 
end; 

如何在運行時更改自定義用戶樣式組件的子屬性?

THX

+0

請準確德爾福版本。 'Delphi XE 10.1'不存在!也許你的意思是「德爾福10.1柏林」。但是那個'delphi-xe'標籤是錯誤的。另外,顯示'TLieu'的類聲明。 –

+0

我試圖創建標籤Delphi-xe10,但我沒有足夠的積分來創建新的標籤...所以我用最常見的我創建的 – ffert2907

+0

你不需要創建一個新的標籤,尤其是不是一個錯誤一。德爾福10.1柏林已經有了一個標籤,因爲我剛剛編輯了你的q。 –

回答

1
  1. TLieu必須從TStyledControl
  2. 使用Lieu.StyleLookup而不是Lieu.StyleName
  3. 繼承改變之前StyleData調用ApplyStyleLookup
+0

如何將「OnClick」事件關聯到我的樣式化按鈕:這不起作用:Lieu.StylesData ['Link.Onclick']:= Button1Click; – ffert2907

+0

Lieu.StylesData ['Link.Onclick']:= TValue.From (Button1Click); –

0

下面是一個例子,我該怎麼辦它與列表框項目

vItem.StylesData['descript'] := 'Description'; 
vItem.StylesData['details'] := 'Details text'; 
vItem.ImageIndex := 3; 

在我的情況下,「描述」和「細節」是TText。您可以更改StyleName屬性中的名稱(以樣式表示)。

要在我的示例中簡單地通過爲列表框項目(vItem.ImageIndex)指定圖像索引來更改圖像,樣式中的TGlyph圖像應該具有名稱'glyphstyle'。

//如何訪問到組件的風格:

vItem.NeedStyleLookup; 
vItem.ApplyStyleLookup; // without this, FindStyleResource will return nil 

vSwitch := vItem.FindStyleResource('switch') as TSwitch; 
Assert(vSwitch <> nil); 
vSwitch.IsChecked := vCampaign.Enable; 
vSwitch.OnClick := DoOnClickSwitch;