Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 10554 / 332 | Оценка: 4.12 / 4.01 | Длительность: 19:18:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 24:

Библиотека классов VCL среды проектирования Delphi

< Лекция 23 || Лекция 24: 1234 || Лекция 25 >

Класс TMenuItem

Класс TMenuItem реализует поведение пунктов меню. Контейнером для объектов типа TMenuItem может быть компонент типа TMainMenu (линейка главного меню) или компонент типа TPopupMenu (контекстное меню).

При создании меню на этапе проектирования редактор меню Menu Designer автоматически создает объекты типа TMenuItem для каждой команды меню.

Класс предоставляет набор свойств, включая следующие:

  • Action - определяет объект действие (Action), ассоциируемый с пунктом меню. По умолчанию для каждого пункта меню стандартным событием считается OnClick и обработчиком события является процедура, имя которой автоматически формируется из имени формы и имени объекта "пункт меню", указанных через точку (например, TForm1.item12Click). Объект "действие" позволяет определить одну процедуру обработки события, которую далее можно будет многократно использовать для различных объектов при обработке событий.
  • AutoHotkeys - определяет, будут ли клавиши-акселераторы для элементов подменю устанавливаться автоматически.
  • Bitmap - определяет изображение, отображаемое слева от заголовка меню.
  • Break - определяет, будет ли пункт меню располагаться в новом столбце меню.
  • Caption - определяет текст пункта меню. Если перед буквой в заголовке пункта меню стоит символ &, то данная буква называется клавишей-акселератором, а выбор пункта меню может быть выполнен одновременным нажатием Alt и клавиши-акселератора.
  • Checked - определяет, будет ли маркер переключателя появляться в пункте меню слева от заголовка.
  • Default - определяет, является ли данный пункт меню пунктом, выполняемым по умолчанию при двойном щелчке мышью на родительском подменю. Пункт меню, выполняемый по умолчанию, отмечается полужирным начертанием.
  • Enabled - определяет, доступен ли пункт меню.
  • GroupIndex - указывает логическую группу, к которой принадлежит пункт меню (группы используются для управления слиянием пунктов меню).

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

Если значение свойства GroupIndex - добавляемого меню совпадает со значением свойства GroupIndex - пункта главного меню, то последний заменяется на добавляемый. Если несколько пунктов меню главного окна имеет одинаковое значение свойства GroupIndex -, то и заменены они могут быть только несколькими пунктами добавляемого меню: первый пункт с одинаковым значением заменяется на первый добавляемый пункт с одинаковым значением, второй - на второй и т.д.

Если значение свойства GroupIndex добавляемого пункта линейки меню лежит между значениями свойства GroupIndex пунктов линейки меню главного окна, то добавляемый пункт вставляется между ними.

  • HelpContext - указывает ID контекста справки, отображаемой для пункта меню.
  • Hint - определяет текст всплывающего окна подсказки.
  • ImageIndex - определяет индекс изображения, отображаемого для пункта меню. Список изображений, указываемых через индекс, содержится в свойстве Images родительского меню: для пунктов меню верхнего уровня список определяется свойством Images объекта типа TMenu или TPopupMenu, а для пунктов подменю список определяется свойством Images родительского объекта меню типа TMenuItem. Если родительское меню не содержит списка изображений в свойстве Images, то для определения отображаемого изображения будет использовано значение свойства Bitmap пункта меню.
  • Items - список пунктов меню в подменю.
  • MenuIndex - указывает индекс пункта меню в родительском меню.
  • Parent - определяет для пункта меню его родительское меню.
  • Visible - определяет, является ли пункт меню видимым.

Класс предоставляет набор методов, включая следующие:

  • Add - добавляют в конец списка Items один или несколько пунктов меню.

    Например:

    var    NewItem: TMenuItem;  
           i : integer;
    begin
      // Создание элемента "разделительная линия": 
      NewItem := TMenuItem.Create(Self);
      NewItem.Caption := '-';  // Заголовок пункта меню
      // Добавление пункта меню к меню Windows: 
      Windows.Add(NewItem);
      // Cоздадим и добавим пункт меню для каждой формы 
      for  i := 0 to Screen.FormCount-1 do
      begin
        NewItem := TMenuItem.Create(Self);
        NewItem.Caption := Screen.Forms[i].Name;
        Windows.Add(NewItem);
      end;
    end;
  • Clear - удаляет все пункты меню, указанные в списке свойства Items.
  • Click - инициирует событие OnClick. Этот метод может быть переопределен разработчиком для того, чтобы запрограммировать собственный ответ на выбор пользователем пункта меню.
  • Create - создает новый пункт меню.
  • Delete - удаляет из списка свойства Items пункт меню с указанным индексом.
  • IndexOf - возвращает позицию указанного пункта меню в списке Items.
  • Insert - вставляет указанный пункт меню в заданную позицию списка Items.

Разработчик может создать один общий объект "действие" и для пункта меню, и для кнопки панели инструментов. Для определения действия на этапе проектирования следует:

  1. добавить в форму объект типа TactionList;
  2. вызвать редактор объекта "действие", выполнив на нем двойной щелчок мышью;
  3. добавить в открывшемся редакторе объекты "действие (типа TAction)";
  4. по двойному щелчку на имени любого объекта "действие" отображается редактор кода с автоматически добавленным обработчиком события для данного действия. Например:
    procedure TForm1.Action1Execute(Sender: TObject);
    begin
    end;
    Внутри блока begin end следует ввести код обработчика события;
  5. в завершение нужно определить для объекта "пункт меню" значение свойства Action, выбрав его из списка действий объекта типа TActionList.

Класс TPopupMenu

Класс TPopupMenu инкапсулирует поведение контекстных меню, также называемых всплывающими или popup-меню.

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

Базовым классом для TPopupMenu является класс TMenu.

Следующий пример иллюстрирует отображение контекстного меню в указанной точке экрана по щелчку мыши:

procedure Form1.FormCreate(Sender: TObject);
 begin  
      PopupMenu1.AutoPopup := False; 
 end;
procedure Form1.FormMouseDown(Sender: TObject; 
                   Button: TMouseButton; 
                   Shift: TShiftState; 
                   X, Y: Integer);
begin  
     PopupMenu1.Popup(X, Y); 
end;
< Лекция 23 || Лекция 24: 1234 || Лекция 25 >
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере объявления указателя на метод использовали в формальном описании оба названия:

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Денис Комаров
Денис Комаров
Россия, Москва