Элемент списка Firemonkey с изображением

я сделал пользовательский элемент ListBox для Firemonkey, разработанный с помощью книги стилей. Когда я пытаюсь вставить элементы ListBox, все работает нормально (вставка текста и т. д.), за исключением изменения изображения в элементе ListBox.

Я следовал этому руководству по адресу: http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Components/A_10054-Implementing-a-ListView-in-Firemonkey.html.

Вот мой код:

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. "картинка" - это TImage в моем элементе ListBox.

Что не так с моим кодом? Я работаю с Delphi XE4.

Спасибо за вашу помощь и с наилучшими пожеланиями, Хольгер


person HolgerH    schedule 17.07.2013    source источник


Ответы (1)


Ваше изображение не меняется, потому что в вашем коде вы загружаете только одно изображение. Вы также сделали большую ошибку, постоянно загружая изображение в цикле, вы должны загружать изображение только один раз при создании формы, а затем просто ссылаться на правильное растровое изображение.

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.

Что вам нужно сделать, так это внимательно посмотреть на CustomListBoxsample.

Нет ничего плохого в том, чтобы следовать другим руководствам, но, учитывая, как быстро Firemonkey меняет каждую версию, а руководство, на которое вы ссылаетесь, довольно старое, я бы посоветовал вам вернуться к уже включенному примеру Delphi, он актуален, прост для понимания и в основном делает именно то, что вы ищете.

person Peter    schedule 17.07.2013
comment
Привет, Петр, спасибо за ответ! Я внимательно изучил папку Demo, но когда я попытался реализовать ее в своей программе, она не работала с изображением. Но теперь я немного поиграл с именем стиля. И я обнаружил, что когда я использую имя стиля: значок, следующий код работает идеально: LBItem.ItemData.Bitmap.LoadFromFile(folder + '\' + TJSONPair(item).JsonValue.Value); Когда я изменил имя стиля с моего изображения на что-то другое, это не сработало. С уважением, Хольгер - person HolgerH; 17.07.2013
comment
@HolgerH, что именно представляет собой имя стиля? Это свойство StyleName из ListBox? Или это LBItem.FindStyleResource('icon') решение? - person Machado; 25.11.2015