2013-07-17 3 views
1

Я создал пользовательский элемент ListBox Firemonkey, разработанный в стилевой книге. Когда я пытаюсь вставить элементы ListBox, все работает нормально (вставлять текст и т. Д.), Кроме как изменить изображение в элементе ListBox.Firemonkey 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" мой макет в Stylebook, я сделал для ListBox пункта. «textName» и «textFormat» - это некоторые TText, которые я разместил в элементе ListBox. «picture» - это TImage в моем элементе ListBox.

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

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

ответ

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 примеру, это актуально, легко понимают и в основном делают именно то, что вы ищете.

+2

Привет, Питер, спасибо за ваш ответ! Я подробно рассмотрел папку Demo, но когда я попытался реализовать ее в своей программе, она работает с изображением. Но теперь я немного поиграл с «именем стиля». И я узнаю, когда я использую имя стиля: «icon», а затем работает следующий код: LBItem.ItemData.Bitmap.LoadFromFile (папка + '\' + TJSONPair (item) .JsonValue.Value); Когда я изменил имя стиля с моего изображения на что-то еще, он работает доцент. С уважением, Holger – HolgerH

+0

@HolgerH что именно означает «стиль имя»? Это свойство StyleName из ListBox? Или это 'LBItem.FindStyleResource ('icon')' решение? – Machado

Смежные вопросы