如果你想在 FireMonkey 的同一列中使用不同的单元格控件,你可以做什么。单元格控件似乎属于列,但在某些情况下(例如属性编辑器),某些行需要一个复选框,而其他行需要一个组合框或编辑控件。
提前致谢。
如果你想在 FireMonkey 的同一列中使用不同的单元格控件,你可以做什么。单元格控件似乎属于列,但在某些情况下(例如属性编辑器),某些行需要一个复选框,而其他行需要一个组合框或编辑控件。
提前致谢。
我猜你会在这篇文章中找到解决方案。
您必须创建一个创建自定义单元类。
Arnaud 在他的回答中已经链接到我的文章。本文涵盖了网格、列和单元格的基础知识。以下步骤应该让您启动并运行:
抱歉,我无法给出更详细的答案,但完全涵盖这一点需要一系列博客文章。
使用样式 - 在设置单元格数据时设置单元格样式 - 然后使用 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;
我在我的网站上发布了我的方法并发表了一篇详细的文章,您可以在其中找到有关该主题的更多信息。