Вот пример кода. Вам необходимо установить свойство ListBox Style в lbOwnerDrawFixed. Затем в обработчике события DrawItem мы попытаемся нарисовать изображение (смотри описание события OwnerDraw в справке по Delphi).
unit Listemas; interface uses 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; begin with ListBox1.Items do begin Dibujo := TIcon.create; Dibujo.LoadFromFile('.\ICO\justic.ico'); AddObject('Poder Legislativo y Partidos Politicos',Dibujo); Dibujo := TIcon.create; Dibujo.LoadFromFile('.\ICO\justic.ico'); AddObject('Poder Ejecutivo Nacional',Dibujo); end; end; procedure TLTemas.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var Icon: TIcon; Offset: Integer; { ширина отступа текста } begin with (Control as TListBox).Canvas do { рисуем на холсте элемента управления, не на форме } begin FillRect(Rect); { очищаем прямоугольник } Offset := 2; { обеспечиваем отступ по умолчанию } Icon := TIcon((Control as TListBox).Items.Objects[Index]); { получаем иконку для данного элемента } if Icon <> nil then begin Draw(Rect.Left+1,Rect.Top+2,TIcon((Control as ListBox).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 do begin FillRect(Rect); Draw(Rect.Left, Rect.Top, BitMap); TextOut(Rect.Left + 2 + BitMap.Width, Rect.Top, DstList.items.strings[index]); {DstList - имя списка} end; end; |
[001548]