Использование графики в ListBox
Разбираться лучше всего на конкретном примере, так что попробуем создать ListBox, который отображал имена графических файлов какой-нибудь директории вместе с картинками.
Чтобы заполнить ListBox, надо написать следующее (чтобы каждый файл не прописывать, можно просто послать сообщение):
procedure TForm1.Button1Click(Sender: TObject); var s : string; begin s:='c:\windows\*.bmp'#0; ListBox1.Perform(LB_DIR, DDL_READWRITE, Longint(@s[1])); end;
Здесь мы указали ListBox’у, какие файлы требуется отображать. Устанавливаем свойство Style нужно установить в lbOwnerDrawFixed и создать обработчик события OnDrawItem:
procedure TForm1.ListBox1DrawItem(Control: TWinControl;
index: integer; rect: TRect; state: TOwnerDrawState);
var
bitmap: TBitmap;
offset: integer;
bmprect : TRect;
begin
with (Control as TListBox).Canvas do
begin
{очищаем прямоугольник}
FillRect(rect);
{считываем картинку}
bitmap:= TBitmap.Create;
bitmap.LoadFromFile('c:\windows\' +
ListBox1.Items[index]);
if bitmap <> nil then begin
{вычисляем квадрат для показа картинки}
bmprect:= Bounds(rect.Left + 2, rect.Top + 2,
rect.Bottom - rect.Top - 2, rect.Bottom - rect.Top - 2);
{рисуем картинку}
StretchDraw(bmprect, bitmap);
offset := rect.Bottom - rect.Top + 6;
end;
{выводим текст}
TextOut(rect.Left + offset, rect.Top,
ListBox1.Items[index]);
{не забыть освободить!}
bitmap.Free;
end;
end;
Чтобы картинки получились побольше, значение свойства ItemHeight можно увеличить.
Комментарии