TimageList не содержит члена с именем GetBitmap
Я хочу загрузить фотографии из ImageList
к TImage
(мобильное приложение, FMX). TImage является частью моего настраиваемого списка (LBItem.StylesData['myimage']
). Стандартный подход будет ImageList.GetBitmap()
, Однако метод GetBitmap выдает мне ошибку: 'TimageList does not contain a member named GetBitmap
". Любое объяснение или альтернативы? Заранее спасибо!
procedure TForm3.Button1Click(Sender: TObject);
var
i : Integer;
LBItem : TListBoxItem;
Bitmap : TBitMap;
begin
ListBox1.BeginUpdate;
ListBox1.Items.Clear;
Bitmap := TBitMap.Create;
try
for i := 0 to 3 do begin
LBItem := TListBoxItem.Create(nil);
LBItem.Parent := ListBox1;
LBItem.StyleLookup := 'mystyle';
LBItem.StylesData['mylabel'] := 'Some text...';
//Bitmap.LoadFromFile('D:\Koala.jpg');
ImageList1.GetBitmap(i, Bitmap);
LBItem.StylesData['myimage']:= Bitmap;
end;
finally
ListBox1.EndUpdate;
end;
end;
3 ответа
Предполагая, что у вас есть TImage с именем Image1
, TImageList с именем ImageList1
и как минимум одна запись в списке с изображением для масштаба 1.0 называется Image1Hover
, затем вы можете использовать следующий пример, чтобы загрузить "зависшую картинку" в OnEnter
событие Image1
:
procedure TForm1.Image1MouseEnter(Sender: TObject);
var
Item: TCustomBitmapItem;
Size: TSize;
begin
ImageList1.BitmapItemByName('Image1Hover', Item, Size);
Image1.Bitmap := Item.MultiResBitmap.Bitmaps[1.0];
end;
Этот ответ переведен с fire-monkey.ru
использование ImageList1.Bitmap(Size, Index);
, size
в физических пикселях, т.е. мы рассматриваем масштаб независимо (этот метод ничего не знает о масштабе холста). Эта функция выбирает наиболее подходящий размер доступного изображения.
Итак, ваш код должен выглядеть примерно так:
LBItem.StylesData['myimage'] := ImageList1.Bitmap(
TSizeF.Create(myImageWidth * Canvas.Scale, myImageHeight * Canvas.Scale),
i);
// Not sure of the correctness of this assignment to 'myimage'
Примечание 1 Все растровые изображения, полученные в 'ImageList1.Bitmap`, хранятся в кэше списка изображений. Так что не отпускай их.
Примечание 2 ListBox имеет внутренний механизм взаимодействия с ImageList. Попробуй использовать icon: TImage
элемент стиля и LBItem.ImageIndex
свойство, без загрузки растровых изображений.
В FMX вам не нужно никакого дополнительного кодирования для этого, просто используйте TGlyph
вместо TImage
если вы хотите отобразить изображения непосредственно ImageList
,
пример:
Glyph1.ImageIndex := i;