В 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 в момент выполнения его обработчика