Мне хотелось бы рассказать Вам о некоторых хитростях использования графики.
Используя материал этих статей Вы можете сделать интерфейс Ваших приложений
более красочным и понятным. Хотелось бы рассчитывать и на Вас, т.е. если у Вас
есть какие-то интересные материалы (а может компоненты или программы) на эту
тему, очень бы хотелось их от Вас получить… Также жду от Вас пожеланий — чтобы
Вы хотели узнать по этой теме!

Для этого необходимо установить в инспекторе объектов поле Style в
lbOwnerDrawFixed, при фиксированной высоте строки, или в lbOwnerDrawVariable,
при переменной, и установить собственный обработчик события для OnDrawItem. В
этом обработчике и надо рисовать растровое изображение.

Пример:

Рисуются изображения размером 32*16 (размер стандартного глифа для Delphi).
Очень полезно при поиске нужного изображения для кнопок!

Установить в инспекторе объектов для ListBox поле ItemHeight = 19, а поле Color
= clBtnFace.

{ Загрузить список файлов в ListBox1 при нажатии на
кнопку Load (например)}

procedure TForm1.bLoadClick(Sender: TObject);

VAR S : String;

begin

ListBox1.Clear; {чистим список}

S := ‘*.bmp’#0; {задаем шаблон}

ListBox1.Perform(LB_DIR, DDL_ReadWrite, Longint(@S[1])); {заполняем список}

end;

…………

{Отобразить изображения и имена файлов в ListBox}

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;

Rect: TRect; State: DrawState);

VAR

Bitmap : TBitmap;

Offset : Integer;

BMPRect: TRect;

begin

WITH (Control AS TListBox).Canvas DO BEGIN

FillRect(Rect);

Bitmap := TBitmap.Create;

Bitmap.LoadFromFile(ListBox1.Items[Index]);

Offset := 0;

IF Bitmap NIL THEN BEGIN

BMPRect := Bounds(Rect.Left+2, Rect.Top+2,

(Rect.Bottom-Rect.Top-2)*2, Rect.Bottom-Rect.Top-2);

{StretchDraw(BMPRect, Bitmap); Можно просто нарисовать, но лучше сначала убрать
фон}

BrushCopy(BMPRect,Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height),

Bitmap.Canvas.Pixels[0, Bitmap.Height-1]);

Offset := (Rect.Bottom-Rect.Top+1)*2;

END;

TextOut(Rect.Left+Offset, Rect.Top, ListBox1.Items[Index]);

Bitmap.Free;

END;

end;

Данный пример работает медленно, но оптимизация, для ускорения, вызвала бы
трудность в понимании общего принципа его работы. Как говорится просто и красиво
:))