Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
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('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;

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay