Firemonkey ListBox项目与图像

时间:2013-07-17 07:06:25

标签: delphi listbox firemonkey listboxitem

我制作了Firemonkey自定义ListBox项目,使用样式簿设计。 当我尝试插入ListBox项目时,除了更改ListBox项目中的图片外,一切正常(插入文本等)。

我按照本教程:http://www.experts-exchange.com

这是我的代码:

procedure TForm2.Button1Click(Sender: TObject);
var
    i         : Integer;
    LBItem    : TListBoxItem;
    ItemImage : Timage;
begin
    ListBox1.BeginUpdate;
    ListBox1.Items.Clear;
    try
        for i := 0 to 9 do begin

            LBItem := TListBoxItem.Create(nil);
            LBItem.Parent := ListBox1;
            LBItem.StyleLookup := 'rowLayout';
            LBItem.StylesData['textName'] := 'Some text...';
            LBItem.StylesData['textFormat'] := 'Some more text...';

            ItemImage := LBItem.FindStyleResource('picture') as TImage;
            if Assigned(ItemImage) then
                LBItem.ItemData.Bitmap.LoadFromFile('D:\MyTestPicture.jpg');
        end;
    finally
        ListBox1.EndUpdate;
    end;
end;

“rowLayout”是我在样式簿中的布局,我是为ListBox项目制作的。 “textName”和“textFormat”是一些TText,我放在ListBox项目中。 “picture”是我的ListBox项目中的TImage。

我的代码出了什么问题? 我正在使用Delphi XE4。

感谢您的帮助和最诚挚的问候, 霍尔格

1 个答案:

答案 0 :(得分:3)

您的图片不会更改,因为在您的代码中您只加载了一张图片。 你在循环中不断加载图像也犯了一大错误,你应该只在创建表单时加载一次图像,然后简单地引用正确的位图。

if Odd(I) then
    Item.ItemData.Bitmap := Image1.Bitmap         
  else
    Item.ItemData.Bitmap := Image2.Bitmap; 

具有讽刺意味的是,大多数人忘记查看Samples文件夹,通常位于C:\Users\Public\Documents\RAD Studio\XX.0\Samples\FireMonkey

你应该做的是仔细查看CustomListBox样本。

关注其他教程并没有什么不妥,但考虑到Firemonkey对每个版本的更新速度以及你链接的教程相当老,我建议你回到已包含的Delphi示例,它是最新的,易于理解并且基本上完全符合您的要求。