скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Компонент 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}






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ


|  Рекомендую такой вариант быстрой передачи данных с компанией Caravan  |

Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook