【问题标题】:What control should I use to create this UI in Delphi Firemonkey我应该使用什么控件在 Delphi Firemonkey 中创建此 UI
【发布时间】:2014-06-19 06:18:23
【问题描述】:

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

我愿意创建这个 UI:

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

我试过TListView,但问题和TListBox一样

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

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

什么是最好的解决方案?

我们将不胜感激任何解决方案或指南。

解决方案

感谢@Mike Sutton 的回答,这就是结果

【问题讨论】:

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


【解决方案1】:

这里的样式与标准的 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 ... ...

【讨论】:

  • 谢谢,详细解答,是否需要将 Item 的 StyleName 设置为我在样式书中创建的内容?
  • 造型和设置正确的位置真是让人头疼
  • StyleName 是 FMX 找到正确样式元素的方式。如果您按照我上面的示例设置样式名称,它将被 FMX 自动拾取为 TScoreListBoxItem。否则你需要设置 StyleLookup 来引用它。
【解决方案2】:

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

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

(如果这不起作用,请告诉我,我会删除它。)

【讨论】:

  • 确实,这会起作用,尽管带有样式的解决方案会更整洁。
猜你喜欢
  • 2012-09-02
  • 2017-03-17
  • 2010-09-18
  • 1970-01-01
  • 2016-07-17
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多