|
||||||||||||||||||||
|
100 компонентов общего назначения Delphi 56.3. Горячие клавиши - компонент HotKeyКомпонент HotKey, расположенный в библиотеке на
странице Компонент HotKey внешне выглядит как обычное окно
редактирования Edit. Но если в него входит пользователь, то оно
переводит нажимаемые им клавиши в тип TShortCut, хранящий комбинацию
горячих клавиш. Например, если пользователь нажимает клавиши Ctrl-ф,
то в окне HotKey появится текст « Основное свойство компонента — HotKey, равное по умолчанию комбинации клавиш Alt-А. Это свойство можно прочесть и присвоить свойству ShortCut какого-то раздела меню. Например, оператор MOpen.ShortCut := HotKey1.HotKey;присваивает разделу меню с именем MOpen комбинацию клавиш, заданную в компоненте HotKey1. Свойство Modifiers указывает модификатор — вспомогательную клавишу, нажимаемую перед символьной. Это свойство является множеством, которое может включать значения hkShift, hkCtrl, hkAlt, hkExt, что соответствует клавишам Shift, Ctrl, Alt, Extra. По умолчанию Modifiers =[hkAlt]. Если вы хотите, например, задать вместо этого значения в качестве модификатора клавишу Ctrl, вы должны выполнить оператор: HotKey1.Modifiers: = [hkCtrl]; Свойство InvalidKeys задает недопустимые клавиши или их комбинации. Это свойство является множеством, которое может включать значения hcNone, hcShift, hcCtrl, hcAlt, hcShiftCtrl, hcShiftAlt, hcCtrlAlt, hcShiftCtrlAlt, что соответствует отсутствию модификатора и клавишам Shift, Ctrl, Alt, Shift-Ctrl, Shift-Alt, Ctrl-Alt, Shift-Ctrl-Alt. Если вы хотите задать программно значение свойства HotKey, то можете это сделать, например, операторами HotKey1.HotKey := ord('F'); HotKey1.Modifiers := [hkAlt]; Эти операторы зададут комбинацию горячих клавиш Alt-F. В заключение приведем пример использования компонента HotKey и настройки горячих клавиш меню в процессе выполнения приложения. Пусть у вас есть главная форма приложения, содержащая компонент MainMenu и пусть вы хотите ввести команду настройки, позволяющую пользователю изменить установленные для разделов меню горячие клавиши. Для упрощения задачи будем считать, что меню, сконструированное в MainMenu:
Эти предположения сделаны просто для того, чтобы упростить код и не использовать функции, не описанные в данной книге. Начните новое приложение, разместите на форме компонент
MainMenu и сконструируйте с его помощью любое меню, удовлетворяющее
перечисленным требованиям. Задайте каким-то из разделов меню быстрые
клавиши. Один из разделов меню должен называться Добавьте в приложение еще одну форму (команда Form2.ShowModal; Этот оператор покажет пользователю окно вспомогательной
формы как модальное — т.е. пользователь не сможет вернуться в главную
форму, пока не закроет вспомогательную. Чтобы компилятор понял этот
оператор, надо в модуль главной формы Unit1 вставить оператор
uses, ссылающийся на модуль вспомогательной формы Unit2.
Можете сделать это вручную или, перейдя в окне Редактора Кода в модуль
Unit1, выполните команду Теперь давайте спроектируем вспомогательную форму. Она
может иметь вид, представленный на рис. 6.6. На ней расположено два
списка ListBox (см. раздел 3.3.5): ListBox1,
в котором отображаются заголовки меню, и ListBox2, в котором
отображаются разделы меню, соответствующие выбранному заголовку. В нижней
части формы расположен компонент HotKey и кнопка Button,
которая фиксирует в меню сделанный пользователем выбор и закрывает форму.
В компоненте HotKey надо стереть с помощью Инспектора Объектов
свойство HotKey, которое содержит некоторое значение по умолчанию.
Теперь надо написать обработчики событий, которые загружали бы списки ListBox1 и ListBox2 названиями разделов и при выборе пользователем быстрых клавиш фиксировали бы этот выбор в соответствующем разделе меню формы Form1. Код может выглядеть следующим образом: procedure TForm2.FormShow(Sender: TObject); var i: integer; begin {Загрузка ListBox1 заголовками меню при событии OnShow формы Form2} ListBox1.Clear; for i:=0 to Form1.MainMenu1.Items.Count-1 do ListBox1.Items.Add(Form1.MainMenu1.Items[i].Caption); ListBox1.ItemIndex:=0; {Обращение к процедуре загрузки ListBox2} ListBox1Click(Sender); end; procedure TForm2.ListBox1Click(Sender: TObject); var i: integer; begin {Загрузка ListBox2 заголовками разделов меню MainMenu1.Items[ListBox1.ItemIndex], выделенного пользователем в ListBox1 при событии OnShow формы Form2} ListBox2.Clear; for i:=0 to Form1.MainMenu1.Items[ListBox1.ItemIndex].Count-1 do ListBox2.Items.Add(Form1.MainMenu1.Items[ ListBox1.ItemIndex].Items[i].Caption); ListBox2.ItemIndex:=0; end; procedure TForm2.ListBox2Click(Sender: TObject); begin {Занесение горячих клавиш выделенного в ListBox2 раздела в компонент HotKey1} HotKey1.HotKey:=Form1.MainMenu1.Items[ ListBox1.ItemIndex].Items[ListBox2.ItemIndex].ShortCut; end; procedure TForm2.Button1Click(Sender: TObject); begin {Изменение горячих клавиш выбранного раздела меню и закрытие вспомогательной формы} Form1.MainMenu1.Items[ ListBox1.ItemIndex].Items[ ListBox2.ItemIndex].Shortcut := HotKey1.HotKey; Close; end; При событии OnShow формы Form2 происходит загрузка списка ListBox1 заголовками меню. Цикл загрузки перебирает индексы от 0 до Form1.MamMenu1.Items.Count-1. Это значение на 1 меньше значения MainMenu1.Items.Count, которое равно числу элементов в свойстве MainMenu1.Items. При щелчке пользователя на списке ListBox1 происходит загрузка списка ListBox2. При этом к соответствующим разделам меню получается доступ с помощью выражения Form1.MainMenu1.Items[ListBox1.ItemIndex].Items[i]. В этом выражении Form1.MainMenu1.Items[ListBox1.ItemIndex] — элемент головного раздела меню, выбранного пользователем в ListBox1. Каждый такой раздел можно рассматривать как элемент массива меню и в то же время он сам является массивом разделов второго уровня. Поэтому его свойство Items[i] указывает на подраздел с индексом i. При щелчке пользователя на списке ListBox2 происходит
загрузка компонента HotKey1 символами горячих клавиш выбранного
пользователем раздела. Если раздел не имеет горячих клавиш, то в окне
HotKey1 отображается текст « Опробуйте это приложение в работе и вам станет яснее механизм работы с разделами меню и с быстрыми клавишами. |
|
Web дизайн: Бурлаков Михаил
Web программирование: Бурлаков Михаил