如果您想在FireMonkey的网格的同一列中使用不同的单元格控件,可以执行哪些操作。 单元格控件似乎属于列,但有些情况(如属性编辑器),其中某些行需要复选框,而其他行需要组合框或编辑控件。
提前致谢。
答案 0 :(得分:5)
答案 1 :(得分:2)
Arnaud在答案中已经与我的文章联系在一起了。本文介绍了网格,列和单元格的基础知识。以下步骤可以帮助您启动并运行:
对不起,我不能给出更详细的答案,但完全覆盖这一点需要一系列博客文章。
答案 2 :(得分:1)
使用样式 - 设置单元格数据时设置单元格样式 - 然后使用onapplystyle事件,使用新设置的单元格执行任何聪明的操作。
通过这种方式,您可以添加样式所需的控件,然后使用onapplystyle访问控件(以设置事件等)。
提示 - FindStyleResource是你的朋友: - )
答案 3 :(得分: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,您可以在其中找到有关该主题的更多信息。