Вот пример кода. Вам необходимо установить свойство ListBox Style в
lbOwnerDrawFixed. Затем в обработчике события DrawItem мы попытаемся нарисовать
изображение (смотри описание события OwnerDraw в справке по Delphi).
unit Listemas;
interfaceuses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TLTemas = class(TForm)
ListBox1: TListBox;
procedure FormActivate(Sender: TObject);
procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
private{ Private declarations }public{ Public declarations }end;
var
LTemas: TLTemas;
implementation{$R *.DFM}procedure TLTemas.FormActivate(Sender: TObject);
var
Dibujo: TIcon;
beginwith ListBox1.Items dobegin
Dibujo := TIcon.create;
Dibujo.LoadFromFile('D:\Delphi\Projects\Delphi5\DelphiWorld\base\images\ico.ico');
AddObject('Delphi World - программа для всех', Dibujo);
Dibujo := TIcon.create;
Dibujo.LoadFromFile('D:\Delphi\Projects\Delphi5\DelphiWorld\base\images\ico.ico');
AddObject('Delphi World - самый большой сборник', Dibujo);
end;
end;
procedure TLTemas.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
Icon: TIcon;
Offset: Integer; { ширина отступа текста }beginwith (Control as TListBox).Canvas do{ рисуем на холсте элемента управления, не на форме }begin
FillRect(Rect); { очищаем прямоугольник }
Offset := 2; { обеспечиваем отступ по умолчанию }
Icon := TIcon((Control as TListBox).Items.Objects[Index]);
{ получаем иконку для данного элемента }if Icon <> nilthenbegin
Draw(Rect.Left + 1, Rect.Top + 2, TIcon((Control as
TListBox).Items.Objects[Index]));
Offset := Icon.width + 9;
{ добавляем четыре пикселя между иконкой и текстом }end;
TextOut(Rect.Left + Offset, Rect.Top + 7, (Control as TListBox).Items[Index])
{ выводим текст }end;
end;
end.
Воспользуйтесь событием OnDrawItem объекта ListBox (или
ComboBox, или др.). В его обработчике рисовать графику так же легко, как и
писать текст. (Полное управление вы получите после того, как подключите к своей
работе обработку события OnMeasureItem)
procedure ListDrawItem(Control: TWinControl; Index:
Integer; Rect: TRect; State: TOwnerDrawState);
var
BitMap: TBitMap;
begin{Здесь инициализируем Bitmap.... например, загружаем в него изображение}with (Control as TListBox).Canvas dobegin
FillRect(Rect);
Draw(Rect.Left, Rect.Top, BitMap);
TextOut(Rect.Left + 2 + BitMap.Width, Rect.Top,
DstList.items.strings[index]); {DstList - имя списка}end;
end;
Программный код, представленный в этом разделе, - это приложение Delphi, использующее контрол TListBox для отображения списка элементов с изображениями. Метод FormActivate обрабатывает событие активации формы и загружает два иконки из файла, добавляя их в список с помощью метода AddObject.
Метод ListBox1DrawItem отвечает за рисование каждого элемента в списке, включая иконку и текст. Он использует свойство Canvas списка для рисования элементов.
В улучшенной версии кода:
Метод FormActivate теперь очищает список перед загрузкой и добавлением элементов.
Иконки загружаются в отдельной переменной, чтобы избежать утечек памяти при добавлении объектов в список.
Метод ListBox1DrawItem улучшен с помощью использования свойства Canvas списка для рисования элементов. Это позволяет иметь более контроля над процессом рисования.
Обратите внимание, что вам нужно заменить путь к файлу иконки 'D:\Delphi\Projects\Delphi5\DelphiWorld\base\images.ico' на ваш реальный путь к файлу иконки.
ListBox с графикой: пример кода на Delphi для рисования изображения в элементе управления ListBox.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.