Компонент delphi HotKey является вспомогательным, обеспечивающий возможность задания самим пользователем горячих клавиш, определяющих быстрый доступ к разделам меню. К тому же этот компонент позволяет задать такие сочетания горячих клавиш, которые не предусмотрены в выпадающем списке свойств разделов меню ShortCut.
Компонент HotKey внешне выглядит как обычное окно редактора edit. Но если в него входит пользователь, то оно переводит нажимаемые пользователем клавиши в тип TShortCut, хранящий комбинацию горячих клавиш. Например если пользователь нажимает клавиши Ctrl + S, то в окне HotKey появится текст «Ctrl + S». По умолчанию комбинация клавиш равна «Alt + а».
Свойство HotKey содержит в себе эту комбинацию, для примера присвоим разделу меню с именем «Open» эти горячие клавиши Open.ShortCut:=hotkey1.HotKey;
Modifiers указывает модификатор – вспомогательную клавишу, нажимаемую перед символом.
InvalidKeys задает недопустимые клавиши или их комбинации(Shift, Ctrl, Alt, Shift+Ctrl, Shift+Alt, Ctrl+Alt, Shift+Ctrl+Alt).
Приведем пример использования этого компонента.
Пусть у вас есть главная форма приложения, содержащая компонент MainMenu и пусть вы хотите в весть команду настройки горячих клавиш, позволяющие пользователю изменять установленные для разделов горячие клавиши.
Начните свое приложение, разместив на нем компонент MainMenu и задайте меню.
Добавьте в приложение одну форму(File – New Form) эта форма будет вспомогательной. В обработчике команды настройка главной формы вставьте оператор
procedure TForm2.N7Click(Sender: TObject);
begin
form15.ShowModal;
end;
Этот оператор позволит открыть окно с настройками как модальное т.е. пользователь не сможет вернутся на главную форму пока не закроет окно с настройками. Теперь спроектируем форму с настройками, для этого нам понадобится 2 компонента ListBox, HotKey и Button. Разместим их так как показана на рисунке ниже.
Теперь напишем, обработчик событий, который будет загружать списки ListBox1 и ListBox2 с названиями разделов и при выборе пользователем быстрых клавиш фиксировал бы этот выбор в соответствующем разделе меню.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | procedure TForm15.Button1Click(Sender: TObject); begin Form14.MainMenu1.Items.Items[ListBox1.ItemIndex].Items[ListBox2.ItemIndex].ShortCut:= HotKey1.HotKey; Close(); form14.MainMenu1.Items.Items[listbox2.ItemIndex].ShortCut:=hotkey1.HotKey; end; procedure TForm15.FormShow(Sender: TObject); var i: integer; begin ListBox1.Clear(); for i := 0 to Form14.MainMenu1.Items.Count-1 do ListBox1.Items.Add( Form14.MainMenu1.Items.Items[i].Caption); ListBox1.ItemIndex := 0; ListBox1Click(Sender); end; procedure TForm15.ListBox1Click(Sender: TObject); vaR i:integer; begin ListBox2.Clear(); for i := 0 to Form14.MainMenu1.Items.items[ListBox1.ItemIndex].Count-1 do ListBox2.Items.Add(Form14.MainMenu1.Items.Items[ ListBox1.ItemIndex].Items[i].Caption); ListBox2.ItemIndex := 0; ListBox2Click(Sender); end; procedure TForm15.ListBox2Click(Sender: TObject); begin HotKey1.HotKey := Form14.MainMenu1.Items.Items[ ListBox1.ItemIndex].Items[ ListBox2.ItemIndex].ShortCut; end; end. |