Delphi 5. Среда разработки


         

Advanced custom drawing: дополнительные события компонентов TToolBar и TListView


В Delphi 5 у компонентов  TTreeView, TListView и TToolBar расширен список событий. Теперь, наряду с событиями OnCustomDraw, OnCustomDrawItem и др. имеются также события OnAdvancedCustomDraw,  OnAdvancedCustomDrawItem и т.д.

Обработчики этих событий, в отличие от имевшихся прежде, имеют дополнительный параметр, указывающий, на какой стадии перерисовки изображения наступает данное событие.

Создадим простейший пример, иллюстрирующий данные возможности. Поместим на форму компоненты TListView, TToolBar с несколькими кнопками и два компонента TImageList. Добавим в оба компонента TImageList по несколько изображений, а в TListView -  несколько элементов,  и установим их свойства LargeImages и SmallImages равными номерам изображений из одного из компонентов TListView (рис.1). То же самое проделаем и с компонентами TToolButton. Установим также свойство OwnerDraw компонента TListView равным True (рис. 18).

Рисунок 18.  Проект для тестирования событий Advanced Custom Drawing

Создадим обработчики событий, связанных с нажатием на кнопки:

procedure TForm1.ToolButton1Click(Sender: TObject);

begin

 ListView2.ViewStyle:=vsIcon;

end;



procedure TForm1.ToolButton2Click(Sender: TObject);

begin

ListView2.ViewStyle:=vsSmallIcon;

end;

procedure TForm1.ToolButton3Click(Sender: TObject);

begin

  ListView2.ViewStyle:=vsList;

end;

Теперь можно создать обработчики событий OnAdvancedCustomDraw, OnAdvancedCustomDrawItem компонента TListView, например:

procedure TForm1.ListView2AdvancedCustomDraw(Sender: TCustomListView;

  const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean);

begin

  case Stage of

    cdPrePaint:  ShowMessage('ListView is pre-painted');

    cdPostPaint: ShowMessage('ListView is post-painted');

  end;

end;

procedure TForm1.ListView2AdvancedCustomDrawItem(Sender: TCustomListView;

  Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;

  var DefaultDraw: Boolean);

begin

  if (stage=cdPrePaint) then

     ShowMessage(Item.Caption+' is pre-painted');

end;

Аналогичным образом можно создать и обработчики событий OnAdvancedCustomDraw и OnAdvancedCustomDrawButton компонента TToolBar. В результате можно наблюдать за различными стадиями рисования изображения на этих интерфейсных элементах (рис. 19).

 

Рисунок 19.  Одно из событий Advanced Custom Drawing в момент выполнения его обработчика



Содержание раздела