我应该使用什么控件在Delphi Firemonkey中创建此UI

时间:2014-05-02 14:14:15

标签: delphi grid delphi-xe firemonkey delphi-xe5

我正在开发Delphi xe5的移动应用程序(android和ios)。

我愿意创建这个UI:

enter image description here

我尝试TListBox,但左右图像无法设置。

我尝试TListView但问题与TListBox

相同

我用TGrid尝试了custom column,解决了文本和图片的问题,但我无法创建每行的标题(它没有像colspan这样的东西)

我需要的是创建一个自定义控件并重复它。

什么是最佳解决方案?

任何解决方案或指南都将受到赞赏。

解决方案

感谢@Mike Sutton的回答,结果就是这样 enter image description here

2 个答案:

答案 0 :(得分:2)

这是一个我没有时间测试的想法:

创建TListBoxItem的后代,并在其中添加两个图像作为普通TImages。我很确定TListBoxItem可以为对象提供父级。您必须将图像放在所需的列表框项目上。然后,每当您将项目添加到列表框项目时,只需传入您自己的后代。

(如果这不起作用,有人让我知道,我会删除它。)

答案 1 :(得分:2)

这里的样式与标准TListBoxItem样式有很大的不同,从头开始可能是有意义的,在这种情况下,访问默认样式的问题变得无关紧要。

  • 将TStyleBook添加到表单中。
  • 将表单的StyleBook属性设置为指向它。
  • 双击图标以打开编辑器。
  • 将TLayout拖到结构面板上并将其放在唯一的项目上。
  • 设置TLayout的StyleName属性(例如ScoreListBoxItemStyle)。
  • 拖放其他组件以构建您想要的布局(请记住TLayouts的“隐藏”定位)。
  • 设置要从代码中引用的任何组件的StyleName属性。

  • 将TLIstBoxItem子类化为TScoreListBoxItem(如果使用上面建议的StyleName)。

  • 为文字,图片等添加属性。
  • 在每种方法的setter方法中,缓存数据并调用如下方法:

procedure SetFlag1; var O: TFMXObject; begin O := FindStyleResource('flag1'); //StyleName of the item if O is TImage then TImage(O).Bitmap.Assign(FFlag1); end;

  • 覆盖ApplyStyle方法并调用设置样式中数据的方法的所有

  • 现在用代码创建你的项目:

Item := TScoreListBoxItem.Create(Self); ListBox1.AddObject(Item); Item.Flag1.LoadFromReource ... ...