Советы по Delphi

         

ListBox с графикой


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



Содержание раздела