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

Вопрос:

Я ищу компонент ListBox, который может отображать квадратик с галочкой (check box) для выбранных элементов списка - компонент CheckList, если вам будет угодно (просто последний компонент содержит меньший набор характеристик, чем мне необходимо).

  1. Загрузите 'Adding Graphics in your listboxes and comboboxes' (дополнительная графика для компонентов ListBox и Combobox) из Borland Technical Information - документ TI2793.
  2. Добавьте в ваш ListBox изображение неотмеченного квадратика.
  3. Используя событие двойного щелчока заменяйте изображение на отмеченный квадратик.
Рисование графики в коде для компонентов ListBox и ComboBox

Способность добавления своей графики в ListBox и ComboBox может значительно изменить внешний вид компонентов, делая графику более дружественной при общении с пользователем.

В: Как мне вставить свою графику в Listbox или ComboBox???

Приведу здесь пример, шаг за шагом иллюстрирующий данную технологию.....

  1. Создайте форму.
  2. Расположите на вашей форме компоненты ComboBox и Listbox.
  3. Измените свойство Style компонента ComboBox на csOwnerDrawVariable и свойство Style компонента ListBox на lbOwnerDrawVariable. Обработчик события OnDrawItem компонентов TListBox или TComboBox позволяет осуществить вывод как объекта (графики), так и строки элемента. В данном примере осуществляется вывод как графического объекта, так и строки.
  4. Создайте 5 переменных типа TBitmap в VAR секции вашей формы.
  5. Создайте процедуру для события формы OnCreate.
  6. Создайте процедуру для события ComboBox OnDraw.
  7. Создайте процедуру для события ComboBox OnMeasureItem.
  8. Освободите ресурсы в обработчике события формы OnClose.

{НАЧАЛО OWNERDRW.PAS}
unit Ownerdrw;

interface

uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type

  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ComboBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure ComboBox1MeasureItem(Control: TWinControl; Index:
      Integer;

      var Height: Integer);
    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure ListBox1MeasureItem(Control: TWinControl; Index:
      Integer;

      var Height: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var

  Form1: TForm1;
  TheBitmap1, TheBitmap2, TheBitmap3, TheBitmap4,
    TheBitmap5: TBitmap;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin

  TheBitmap1 := TBitmap.Create;
  TheBitmap1.LoadFromFile('C:\delphi\images\buttons\globe.bmp');
  TheBitmap2 := TBitmap.Create;
  TheBitmap2.LoadFromFile('C:\delphi\images\buttons\video.bmp');
  TheBitmap3 := TBitmap.Create;
  TheBitmap3.LoadFromFile('C:\delphi\images\buttons\gears.bmp');
  TheBitmap4 := TBitmap.Create;
  TheBitmap4.LoadFromFile('C:\delphi\images\buttons\key.bmp');
  TheBitmap5 := TBitmap.Create;
  TheBitmap5.LoadFromFile('C:\delphi\images\buttons\tools.bmp');
  ComboBox1.Items.AddObject('Изображение1: Глобус', TheBitmap1);
  ComboBox1.Items.AddObject('Изображение2: Видео', TheBitmap2);
  ComboBox1.Items.AddObject('Изображение3: Механизм', TheBitmap3);
  ComboBox1.Items.AddObject('Изображение4: Ключ', TheBitmap4);
  ComboBox1.Items.AddObject('Изображение5: Инструмент', TheBitmap5);
  ListBox1.Items.AddObject('Изображение1: Глобус', TheBitmap1);
  ListBox1.Items.AddObject('Изображение2: Видео', TheBitmap2);
  ListBox1.Items.AddObject('Изображение3: Механизм', TheBitmap3);
  ListBox1.Items.AddObject('Изображение4: Ключ', TheBitmap4);
  ListBox1.Items.AddObject('Изображение5: Инструмент', TheBitmap5);

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin

  TheBitmap1.Free;
  TheBitmap2.Free;
  TheBitmap3.Free;
  TheBitmap4.Free;
  TheBitmap5.Free;
end;

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

  Rect: TRect; State: TOwnerDrawState);
var

  Bitmap: TBitmap;
  Offset: Integer;
begin

  with (Control as TComboBox).Canvas do
  begin
    FillRect(Rect);
    Bitmap := TBitmap(ComboBox1.Items.Objects[Index]);
    if Bitmap <> nil then
    begin
      BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2, Bitmap.Width,
        Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width,
        Bitmap.Height), clRed);
      Offset := Bitmap.width + 8;
    end;
    { отображаем текст }
    TextOut(Rect.Left + Offset, Rect.Top, Combobox1.Items[Index])
  end;
end;

procedure TForm1.ComboBox1MeasureItem(Control: TWinControl; Index:

  Integer; var Height: Integer);
begin

  height := 20;
end;

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

  Rect: TRect; State: TOwnerDrawState);
var

  Bitmap: TBitmap;
  Offset: Integer;
begin

  with (Control as TListBox).Canvas do
  begin

    FillRect(Rect);
    Bitmap := TBitmap(ListBox1.Items.Objects[Index]);
    if Bitmap <> nil then
    begin
      BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2, Bitmap.Width,
        Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width,
        Bitmap.Height), clRed);
      Offset := Bitmap.width + 8;
    end;
    { отображаем текст }
    TextOut(Rect.Left + Offset, Rect.Top, Listbox1.Items[Index])
  end;
end;

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

  var Height: Integer);
begin

  height := 20;
end;

end.
{КОНЕЦ OWNERDRW.PAS}

// *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

{НАЧАЛО OWNERDRW.DFM}
object Form1: TForm1

  Left = 211
    Top = 155
    Width = 435
    Height = 300
    Caption = 'Form1'
    Font.Color = clWindowText
    Font.Height = -13
    Font.Name = 'System'
    Font.Style = []
    PixelsPerInch = 96
    OnClose = FormClose
    OnCreate = FormCreate
    TextHeight = 16
    object ComboBox1: TComboBox
    Left = 26
      Top = 30
      Width = 165
      Height = 22
      Style = csOwnerDrawVariable
      ItemHeight = 16
      TabOrder = 0
      OnDrawItem = ComboBox1DrawItem
      OnMeasureItem = ComboBox1MeasureItem
  end
  object ListBox1: TListBox
    Left = 216
      Top = 28
      Width = 151
      Height = 167
      ItemHeight = 16

    Style = lbOwnerDrawVariable
      TabOrder = 1
      OnDrawItem = ListBox1DrawItem
      OnMeasureItem = ListBox1MeasureItem
  end
end
{КОНЕЦ OWNERDRW.DFM}

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