Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi 3.doc
Скачиваний:
13
Добавлен:
10.12.2018
Размер:
116.74 Кб
Скачать

Динамически меняем меню

Как известно, пункты меню могут динамически меняться. Классический пример - это список последних файлов. Посмотрим, как это можно делать.

Для начала добавим новый пункт для контекстного меню и обработчик для него. После того, как мы сделаем это, нами будет рассмотрено добавление нового пункта меню в обычное меню.

В качестве основы возьмите проект, созданный на прошлом уроке. Добавьте на форму кнопку. В событие Click для добавленной кнопки внесите следующий код:

procedure TForm1.Button1Click(Sender: TObject);

//Заводим переменную для нового меню

var NewItem: TMenuItem;

begin

//Создаем пункт меню

NewItem:=TMenuItem.Create(self);

//Приписываем к пункту меню обработчик

NewItem.Action:=Action1;

//Задаем заголовок

NewItem.Caption:='Пункт 3';

//Добавляем новый пункт меню

PopupMenu1.Items.Add(NewItem);

end;

Код ясен из комментариев. Осталось добавить только элемент ActionList. Он нужен для строки

...

NewItem.Action:=Action1;

...

Добавьте элемент ActionList, добавьте в него действие Action1 . В обработчик для Action1 добавьте следующий код:

procedure TForm1.Action1Execute(Sender: TObject);

begin

ShowMessage('Обработчик для меню');

end;

Все, запускайте программу. При нажатии на кнопке в контекстное меню для формулы добавится новый пункт "Пункт 3", при щелчке на котором появится messagebox с соответствующей надписью.

Теперь посмотрим, как добавлять новые пункты меню в главное меню приложения. Здесь возможны два варианта - мы можем добавить его в качестве меню самого верхнего уровня и в качестве нового подменю в уже существующее меню. Рассмотрим сначала первый случай. Возьмите в качестве основы программу, рассмотренную в первом пункте. Добавьте на форму кнопку, а в обработчик щелчка этой кнопки следующий код:

procedure TForm1.Button2Click(Sender: TObject);

var NewMainItem: TMenuItem;

begin

NewMainItem:=TMenuItem.Create(self);

NewMainItem.Action:=Action1;

NewMainItem.Caption:='Sub menu 2';

//Добавляем меню верхнего уровня

MainMenu1.Items.Add(NewMainItem);

end;

При запуске программы и нажитии на вторую кнопку у нашей программы появится новое меню верхнего уровня:

Если же нам надо добавить подменю в пункт нашего главного меню, то мы должны написать что-то вроде:

...

NewMainItem.Caption:='Sub menu 2';

//Добавлем подменю

MainMenu1.Items[0].Add(NewMainItem);

...

Здесь индекс 0 показывает номер меню, в который мы добавляем наш новый пункт (нумерация идет с нуля).

Тогда при запуске программы и нажитии на вторую кнопку у меню Menu появится новое подменю:

Горячие клавиши

Комбинации клавиш позволяют пользователю быстро выбирать те или иные действия (типичный пример - это комбинации Ctrl+X, Ctrl+C, и Ctrl+V для вырезания, копирования и вставки).

Комбинации клавиш могут задаваться как на этапе разработки, так и на этапе выполнения программы. Для задания горячих клавиш на этапе разработки надо использовать свойство ShortCut (это свойство есть не у всех компонентов, из распространненных оно есть у подменю):

Для задания комбинации клавиш на этапе работы программы используется специальный компонент HotKey, которй расположен на вкладке Win32 Палитры компонентов:

Вот пример использования компонента HotKey и свойства ShortCut на этапе разработки:

...

Menu1.ShortCut:=HotKey1.HotKey;

...

В этом примере пункту меню Menu1 присваивается новая комбинация клавиш, задаваемая пользователем в компоненте HotKey1.

Из свойств компонента HotKey отметим два: Modifiers и InvalidKeys. Первое из них отвечает за то, какие клавиши-модификаторы (Alt, Ctrl, Shift или любые их комбинации) могут использоваться для задания комбинации клавиш, второе - какие клавиши-модификаторы использовать нельзя. Оба этих свойства задаются в Инспекторе объектов Modifiers и InvalidKeys:

Другой способ задания комбинаций клавиш для какого-нибудь элемента - это его свойство Caption. Если перед некоторой буквой поставить знак амперсанда (&), то эта буква окажется подчеркнутой и для нее будет действовать комбинация клавиш Alt+эта буква:

Таким способом можно задавать комбинации клавиш и на этапе разработки, и на этапе работы программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]