如果希望在FireMonkey的网格的同一列中使用不同的单元格控件,该怎么办?单元格控件似乎属于该列,但在某些情况下(如属性编辑器),某些行需要复选框,而其他行需要组合框或编辑控件。先谢谢你。
uxhixvfz1#
以下步骤应该会让您启动并运行:
对不起,我不能给出一个更详细的答案,但完全报道这一点需要一系列的博客文章。
wko9yo5t2#
使用样式-在设置单元格数据时设置单元格样式-然后使用onapplystyle事件对新设置了样式的单元格执行所需的任何智能操作。通过这种方式,您可以向样式中添加所需的控件,然后使用onapplystyle访问这些控件(以设置事件等)。提示-FindStyleResource是您的朋友:-)
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,在那里你可以找到关于这个主题的更多信息。
3条答案
按热度按时间uxhixvfz1#
以下步骤应该会让您启动并运行:
对不起,我不能给出一个更详细的答案,但完全报道这一点需要一系列的博客文章。
wko9yo5t2#
使用样式-在设置单元格数据时设置单元格样式-然后使用onapplystyle事件对新设置了样式的单元格执行所需的任何智能操作。
通过这种方式,您可以向样式中添加所需的控件,然后使用onapplystyle访问这些控件(以设置事件等)。
提示-FindStyleResource是您的朋友:-)
u1ehiz5o3#
我还需要一个属性编辑器,并寻找一种在一个列中托管不同单元格类型的方法。如上所述,为每一行使用不同的样式可能是一种解决方案,但由于FireMoney网格没有为特定行保留任何单元格控件,所以每次单元格控件将显示在该行上时,将对其应用真正的样式。对于静态属性编辑器来说,这不是一个大问题,但是对于有可能行并且每行有不同单元格类型的真实网格来说,需要不同的策略。所以我想出了一个不同的解决方案,我考虑了TColumn和单元格控件之间的单元格类型代理,这样每个单元格代理将保留负责的单元格控件。首先,我有一个新的TColumn(TvarantColumn),它负责顶级战略。
然后创建任何代理,如
您还可以在创建代理后处理特定于代理的作业,例如
我已经在我的网站上发表了我的方法的博客,并发表了详细的article,在那里你可以找到关于这个主题的更多信息。