2012-05-29 35 views
3

如果您想在FireMonkey的網格的同一列中使用不同的單元格控件,可以做什麼? 單元格控件似乎屬於列,但有些情況(如屬性編輯器),其中某些行需要複選框,而其他行需要組合框或編輯控件。具有不同控件的FireMonkey網格在同一列中

在此先感謝。

回答

2

阿爾諾已經鏈接到我在他的回答文章。文章涵蓋了網格,列和單元格的基礎知識。下面的步驟應該讓你啓動並運行:

  • 創建一個樣式,爲其添加要顯示的控件(即TCheckbox,TCombobox和TEdit)。將這些添加到TLayout中,並將每個控件StyleName設置爲令人難忘的東西。
  • 在您的單元格中,ApplyStyle使用FindStyleResource來提取上面使用StyleNames添加的控件。
  • 當網格調用您的單元格的SetData方法時,您需要爲每個控件設置Visible屬性,以便僅顯示相應的屬性。如果您無法通過傳入的數據確定此事件,請向該單元添加事件處理程序以獲取數據。
  • 你需要清理鍵盤處理,這很麻煩。如果內存提供,您需要將網格/單元格中的按鍵傳遞給控件(或者它是否從控件中捕獲移動按鍵並將它們傳遞給網格?對不起,如果我忘記了確切的細節)。

對不起,我不能給出更詳細的答案,但完全覆蓋這將需要一系列的博客文章。

5

我想你會在this article找到解決方案。

Sample custom grid cell

你必須創建一個創建一個自定義單元格類。

+1

+1作爲名稱檢查。我很淺。 –

1

使用樣式 - 在設置單元格數據時設置單元格樣式 - 然後我們使用onapplystyle事件來完成新樣式單元格所需的任何操作。

通過這種方式,您可以將所需的控件添加到樣式中,然後使用onapplystyle訪問控件(設置事件等)。

提示 - FindStyleResource是你的朋友在這裏:-)

1

我還需要一個屬性編輯器,並尋找在一列中託管不同單元格類型的方法。對每一行使用不同的樣式可能是上述建議的解決方案,但由於Firemonkey網格不會爲特定行保留任何單元格控件,因此每次在行中顯示單元格控件時,都會將真實樣式應用於該行。對於靜態屬性編輯器來說這不是一個大問題,但是對於一個真正的網格來說,每行中可能有行和不同的單元格類型,因此需要採用不同的策略。所以我想出了一個不同的解決方案,我考慮了TColumn和單元格控件之間的單元類型代理,以便每個單元代理將保留負責的單元格控件。首先,我有一個新的TColumn(TvariantColumn),它負責頂級策略。

vColumn := TVariantColumn.Create(Self); 
vColumn.Header := 'Variant Column'; 
vColumn.OnGetCellProxyIndex := GetCellProxyIndex; 
Grid1.AddObject(vColumn); 

然後創建任何代理像

vColumn.NewCellProxy(TTextProxy); 
vColumn.NewCellProxy(TColorComboProxy); 
vColumn.NewCellProxy(TComboColorProxy); 

您還可以處理代理特定作業創建後,像

with TProgressProxy(vColumn.NewCellProxy(TProgressProxy)) do //4 
begin 
    Min := 0; 
    Max := 100; 
end; 

with TPopUpProxy(vColumn.NewCellProxy(TPopupProxy)) do //5 
begin 
    Items.Add('Istanbul'); 
    Items.Add('Paris'); 
    Items.Add('NewYork'); 
end; 

我已經在博客中我的方法在我的網站,並出版了一詳細article在哪裏你可以找到更多關於這個問題。

相關問題