2

スタイルブックで設計された 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」は、ListBox アイテムに配置した TText です。「画像」は、ListBox アイテムの TImage です。

私のコードで何が問題になっていますか? Delphi XE4 を使用しています。

ご協力ありがとうございます。よろしくお願いします。Holger

4

1 に答える 1

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 の例に戻ることをお勧めします。最新で理解しやすく、基本的にはまさにあなたが探しているもの。

于 2013-07-17T07:30:10.637 に答える