自定义TListBox样式Firemonkey

时间:2014-08-17 13:59:13

标签: delphi firemonkey delphi-xe6

我已经关注了EMB提供的样本,可以在

找到

“C:\ Users \ Public \ Documents \ Embarcadero \ Studio \ 14.0 \ Samples \ Object Pascal \ FireMonkey Desktop \ CustomListBox”

这就是它的样子:

Firemonkey Custom List

这是将行添加到列表框的代码:

procedure TfrmCustomList.Button2Click(Sender: TObject);
var
  Item: TListBoxItem;
begin
  // create custom item
  Item := TListBoxItem.Create(nil);
  Item.Parent := ListBox1;
  Item.StyleLookup := 'CustomItem';
  Item.Text := 'item ' + IntToStr(Item.Index); // set filename
  if Odd(Item.Index) then
    Item.ItemData.Bitmap := Image1.Bitmap // set thumbnail
  else
    Item.ItemData.Bitmap := Image2.Bitmap; // set thumbnail
  Item.StylesData['resolution'] := '1024x768 px'; // set size
  Item.StylesData['depth'] := '32 bit';
  Item.StylesData['visible'] := true; // set Checkbox value
  Item.StylesData['visible.OnChange'] := TValue.From<TNotifyEvent>(DoVisibleChange); // set OnChange value
  Item.StylesData['info.OnClick'] := TValue.From<TNotifyEvent>(DoInfoClick); // set OnClick value
end;

正如您所看到的那样,这一行应用了自定义样式:

  Item.StyleLookup := 'CustomItem';

表单上有一个样书,表单与之关联。 TListBox没有应用样式。

但是,如果更改此CustomItem样式,则不会发生任何事情。您甚至可以更改itens的名称,没有任何反应(根本不是视觉上的变化),布局会在上面的窗口中显示时保持固定。

我添加了另一个带有自己名称的TTlabel并尝试分配给它:

  Item.StylesData['ghost'] := 'scary thing';

它不会给出任何错误,但不显示任何文本。风格保持不变。

如果在创建项目时删除了Item.StyleLookup赋值,则唯一更改的是TLabel的名称丢失,然后无法分配值。

所以,风格是定义的,但我看到它似乎已经修复了。任何布局更改都不会应用,不知何故似乎只能理解样式子项名称的更改。这根本没用。

我怎样才能真正修改这种风格?我希望将3个TLabel中的每一个并排放置在水平布局中。

1 个答案:

答案 0 :(得分:1)

虽然我理解并分享您的挫败感,但这个问题似乎是您自己的行为。

  

但是,如果更改此CustomItem样式,则不会发生任何事情。

出现这种情况有三个原因:

  • 您有多个Stylebook组件,而您没有编辑活动组件。
  • StyleLookup与StyleBook中的任何样式名称不匹配
  • 您将示例项目复制到新位置,但未能意识到您仍在修改原始文件。

我非常肯定这是第二个原因。

如果您的Delphi IDE设置为自动保存项目桌面,则在关闭项目时会生成.dsk文件。

稍后重新打开项目时,将读取.dsk文件,并恢复桌面布局,断点和手表。此外,项目关闭时打开的所有文件都会再次打开,,无论项目是否使用它们。


以下是水平布局中标签的示例:

enter image description here

您可以从dropbox下载示例,然后检查它以查看出错的位置。