Использование графики в 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 можно увеличить.
Комментарии