在同一列中具有不同控件的FireMonkey网格

idfiyjo8  于 2022-10-16  发布在  其他
关注(0)|答案(3)|浏览(112)

如果希望在FireMonkey的网格的同一列中使用不同的单元格控件,该怎么办?单元格控件似乎属于该列,但在某些情况下(如属性编辑器),某些行需要复选框,而其他行需要组合框或编辑控件。
先谢谢你。

uxhixvfz

uxhixvfz1#

以下步骤应该会让您启动并运行:

  • 创建样式,添加您想要显示的控件(即TCheckbox、TCombobox和TEdit)。将这些添加到TLayout中,并将每个控件StyleName设置为值得记住的内容。
  • 在您的单元格中,ApplyStyle使用FindStyleResource来提取上面使用其StyleName添加的控件。
  • 当网格调用单元格的SetData方法时,您需要为每个控件设置Visible属性,以便只显示适当的控件。如果您不能从传入的数据中确定这一点,请向单元格添加一个事件处理程序以获取数据。
  • 您需要整理键盘处理,这会变得相当混乱。如果没有记错的话,您需要将关键点从网格/单元格传递到控件(或者它捕获控件中的移动关键点并将它们传递给网格?如果我忘记了确切的细节,请原谅)。

对不起,我不能给出一个更详细的答案,但完全报道这一点需要一系列的博客文章。

wko9yo5t

wko9yo5t2#

使用样式-在设置单元格数据时设置单元格样式-然后使用onapplystyle事件对新设置了样式的单元格执行所需的任何智能操作。
通过这种方式,您可以向样式中添加所需的控件,然后使用onapplystyle访问这些控件(以设置事件等)。
提示-FindStyleResource是您的朋友:-)

u1ehiz5o

u1ehiz5o3#

我还需要一个属性编辑器,并寻找一种在一个列中托管不同单元格类型的方法。如上所述,为每一行使用不同的样式可能是一种解决方案,但由于FireMoney网格没有为特定行保留任何单元格控件,所以每次单元格控件将显示在该行上时,将对其应用真正的样式。对于静态属性编辑器来说,这不是一个大问题,但是对于有可能行并且每行有不同单元格类型的真实网格来说,需要不同的策略。所以我想出了一个不同的解决方案,我考虑了TColumn和单元格控件之间的单元格类型代理,这样每个单元格代理将保留负责的单元格控件。首先,我有一个新的TColumn(TvarantColumn),它负责顶级战略。

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,在那里你可以找到关于这个主题的更多信息。

相关问题