如果您想在FireMonkey的網格的同一列中使用不同的單元格控件,可以做什麼? 單元格控件似乎屬於列,但有些情況(如屬性編輯器),其中某些行需要複選框,而其他行需要組合框或編輯控件。具有不同控件的FireMonkey網格在同一列中
在此先感謝。
如果您想在FireMonkey的網格的同一列中使用不同的單元格控件,可以做什麼? 單元格控件似乎屬於列,但有些情況(如屬性編輯器),其中某些行需要複選框,而其他行需要組合框或編輯控件。具有不同控件的FireMonkey網格在同一列中
在此先感謝。
阿爾諾已經鏈接到我在他的回答文章。文章涵蓋了網格,列和單元格的基礎知識。下面的步驟應該讓你啓動並運行:
對不起,我不能給出更詳細的答案,但完全覆蓋這將需要一系列的博客文章。
我想你會在this article找到解決方案。
你必須創建一個創建一個自定義單元格類。
使用樣式 - 在設置單元格數據時設置單元格樣式 - 然後我們使用onapplystyle事件來完成新樣式單元格所需的任何操作。
通過這種方式,您可以將所需的控件添加到樣式中,然後使用onapplystyle訪問控件(設置事件等)。
提示 - FindStyleResource是你的朋友在這裏:-)
我還需要一個屬性編輯器,並尋找在一列中託管不同單元格類型的方法。對每一行使用不同的樣式可能是上述建議的解決方案,但由於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在哪裏你可以找到更多關於這個問題。
+1作爲名稱檢查。我很淺。 –