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;
Другие вопросы по тегам