Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Особенности перерисовки пункта меню






Элемент меню способен реагировать на четыре события, основным из которых считается щелчок OnClick() – свидетельство выбора этого пункта меню пользователем. Все остальные обработчики предоставляют дополнительные возможности по прорисовке этого элемента меню. Простейший из них:

property OnDrawItem: TMenuDrawItemEvent;

type TMenuDrawItemEvent = procedure (Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean) of object;

 

где ACanvas – холст пункта меню, ARect – координаты границ холста, доступные для перерисовки, а параметр Selected сигнализирует, выбран данный пункт меню или нет. Рассмотрим пример использования OnDrawItem():

procedure TForm1.MenuItem1DrawItem(Sender: TObject; ACanvas: TCanvas;

ARect: TRect; Selected: Boolean);

Begin

WithACanvas do

Begin

FillRect(aRect);

if Selected=True then Font.Style: =Font.Style+[fsUnderline]

else Font.Style: =Font.Style-[fsUnderline];

TextOut(aRect.Left, aRect.Top, (Sender as TMenuItem).Caption);

end;

end;

 

В событии OnDrawItem() пункта меню проверяется, выделен он пользователем или нет. Если пункт меню выделен, его заголовок подчеркивается, иначе выводится обычным шрифтом. Второй способ прорисовки пункта меню обладает более богатыми возможностями:

property OnAdvancedDrawItem: TAdvancedMenuDrawItemEvent;

type TAdvancedMenuDrawItemEvent = procedure (Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState) of object;

 

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

type TOwnerDrawState = set of (odSelected, odGrayed, odDisabled, odChecked,

odFocused, odDefault, odHotLight, odInactive, odNoAccel, odNoFocusRect,

odReserved1, odReserved2, odComboBoxEdit);

Вызов обработчиков событий OnDrawItem() и OnAdvancedDrawItem() произойдет только при условии, что свойство OwnerDraw владельца пункта меню ( TMainMenu или TPopupMenu ) установлено в true.

И наконец, третий обработчик события, связанный с прорисовкой пункта

меню, решает задачу по динамическому изменению размеров пункта меню.

property OnMeasureItem: TMenuMeasureItemEvent;

type TMenuMeasureItemEvent = procedure (Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer) of object;

В этом случае ключевыми параметрами будут ширина (Width) и высота

(Height) пункта меню. Этот обработчик может пригодиться, если, например,

требуется ограничить максимальный размер элемента меню.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.