2013-06-12 41 views
2

我想製作一個非常複雜的界面,其中一個列表框位於另一個列表框中。首先,ListBox1中的所有元素得到Firemonkey從樣式設計風格「定製項目」:在Firemonkey樣式設計器的另一個列表框中的列表框

Item := TListBoxItem.Create(nil); 
    Item.Parent := ListBox1; 
    Item.StyleLookup := 'CustomItem'; 

然後,有在風格上「定製項目」列表框的另一個(「ListBox2」)。

如何訪問此ListBox2的「StyleLookup」屬性?

Item.StylesData['ListBox2'].StyleLookup := 'CustomItem2'; //this does not work. 

你知道Firemonkey支持嗎?

謝謝。

回答

2

您誤解了TListBox組件如何工作以及如何涉及StyleLookup屬性。 TListBox可以託管的唯一控件是TListBoxItem或該控件的後代。

您引用的CustomItem只是Style Object的名稱,它是Delphi Firemonkey CustomListBox示例中包含的自定義
FMX樣式的名稱。

通過將Style對象的名稱提供給StyleLookup
屬性,可以將風格對象分配給特定的列表框項目。 然後,該項目將按照該樣式對象的指示進行視覺表現。

您真正在尋找的是FMX.TTreeView組件。您可以使其行爲與TListBox完全相同,並且可以託管子項目。 我建議你仔細看看提供的Firemonkey示例。

+0

感謝您的好解釋!我檢查了與Delphi一起提供的FMX.TTreeView和TListBox的標準示例,並且我同意我的解釋看起來像我需要TreeView :)但是我確實需要一個TListBox項,其中包含很多其他組件(按鈕,組合框和另一個列表框)。是的,這是一個複雜的界面。我希望我能找到一種方法來訪問它們,指定樣式查找並填充數據。你認爲這是可能的嗎? –

+0

@Andrey,是的,這是可能的。使用StyleBook,您可以在TTreeView中直觀地塑造每個項目和子項目,使其看起來像代表實際的FMX對象。這是通過[Firemonkey樣式設計器]完成的(http://docwiki.embarcadero.com/RADStudio/XE4/en/FireMonkey_Style_Designer)。你創建一個新的TLayout,在那裏添加一個TButton作爲佈局的子元素,實現HitTest,然後簡單地將TLayout的名稱鏈接到你想要類似於TButton的TTreeView項目的StyleLookup屬性。 – Peter

1

我不熟悉StylesData的用法,但可以使用OnApplyStyleLookup事件處理程序中的FindStyleResource完成此操作。

procedure TForm1.ApplyStyleLookupEvent(Sender: TObject); 
var O: TFMXObject; 
begin 
    O := (Sender as TFMXObject).FindStyleResource('ListBox2'); 
    if O is TStyledControl then 
    TStyledControl(O).StyleLookup := 'CustomItem2'; 
end; 

如果您有自定義TListBoxItem對象,也可以將它放在ApplyStyle過程中。

+0

謝謝你的回答!我試過你的代碼,並得到一個編譯錯誤,因爲TFMXObject類型的變量「O」沒有「StyleLookup」屬性。 我試圖改變爲: var SubItem:TListBoxItem; begin SubItem:=(Sender as TListBoxItem).FindStyleResource('ListBox2'); if Assigned(SubItem)then SubItem。StyleLookup:='CustomItem2'; 結束; 然後我得到不兼容的類型:'TListBoxItem'和'TFmxObject' –

+1

@Andrey,你不能在列表框中實現列表框。我已經解釋過,一個TlistBox只能託管一個TListBoxItem控件。你必須超越新穎性,認識到ListBox本質上是一個字符串列表,這些字符串作爲項目填充到框中。您可以使用StyleBook來影響這些項目的顯示方式,但不能將其他FMX對象實現爲子項目。這個答案顯示的所有內容都是如何採用與您的問題無關的不同列表框的樣式對象。 – Peter

+0

@彼得,是的,現在我明白你的意思了!這表明它只是一個TListBoxItem的外觀,您可以在Firemonkey樣式設計器中進行更改。例如,您可以創建TLayout,您可以在此佈局中使用其他FMX對象(按鈕,編輯字段等)。但正如您所說,如果將佈局應用於ListBoxItem,您仍然無法將它們作爲我的TListBoxItem的子項訪問。我說得對嗎,可以展示給他們,但不能使用它們? –

相關問題