TComboBox с изображением в Firemonkey
Я добавил TImage к стилю TListBoxItem.
Если я добавлю в TListBox, он работает. Если я добавлю в TComboBox, он не работает. Я даже не могу изменить высоту, если элемент в TComboBox.
Вот мой пример кода:
procedure TMainForm.FormCreate(Sender: TObject);
const
BitmapFile : String = 'F:\testimage.png';
var
ItemText : TText;
ItemImage : TImage;
ListBoxItem : TListBoxItem;
button : TButton;
begin
ListBoxItem := TListBoxItem.Create(nil);
ListBoxItem.Parent := CBoxHeadMenuLanguage;
ListBoxItem.StyleLookup := 'ListBoxItemIconStyle';
ListBoxItem.Height := 50; //just for test
ItemText := ListBoxItem.FindStyleResource('text') as TText;
if Assigned(ItemText) then ItemText.Text := 'Hello World!';
ItemImage := ListBoxItem.FindStyleResource('image') as TImage;
if Assigned(ItemImage) then If FileExists(BitmapFile) Then ItemImage.Bitmap.LoadFromFile(BitmapFile);
end;
1 ответ
Вы действительно не должны делать стайлинг в FormCreate, так как стили применяются по мере необходимости и могут быть удалены и применены повторно в любое время.
Вместо этого вам нужно использовать либо событие OnApplyStyleLookup, либо метод ApplyStyle. Я рекомендую создать подкласс TListBox, использовать последний и добавить свойство для хранения растрового изображения.
Объявление класса структуры будет:
type TBitmapLBItem = class(TListBoxItem)
private
FBitmap: TBitmap;
protected
procedure ApplyStyle;override;
public
property Bitmap: TBitmap read FBitmap write SetBitmap;
end;
Используйте FindStyleResource и т. Д. Как в ApplyStyle, так и в SetBitmap (или создайте общий метод для этого).
А в FormCreate создайте элементы вашего нового класса и установите соответствующие свойства Bitmap.
Что касается проблемы с высотой, попробуйте установить свойство ItemHeight поля со списком. Если вам нужны разные высоты в списке, вам, вероятно, не повезло.