Вот пример кода. Вам необходимо установить свойство 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('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; { ширина отступа текста }
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
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 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;
|
|