Вот пример кода. Вам необходимо установить свойство 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;
Статья ListBox с графикой раздела Компоненты и Классы Списки может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.