Разное
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Перекодировка в DBASE
Категория: Базы данных
Категория: Базы данных
Упаковать TinyDB
Категория: Базы данных
Категория: Базы данных
Тpансляция ошибок в BDE
Категория: Базы данных
Категория: Базы данных
Изменить пароль для Paradox
Категория: Базы данных
Категория: Базы данных
Как поместить графический элемент в ListBox
Категория: Компоненты
Категория: Компоненты
Как найти наибольший общий делитель
Категория: Математика
Категория: Математика
Как подключить или отключить сетевой диск
Категория: Интернет и Сети
Категория: Интернет и Сети
Распознавание кодировки. Перекодировка.
Категория: Текст и строки
Категория: Текст и строки
Упаковка таблиц в BDE
Категория: Базы данных
Категория: Базы данных
Последний день месяца
Категория: Базы данных
Категория: Базы данных
Delphi - База Знаний: Компонент HotKey
Компонент HotKey, расположенный в библиотеке на странице Win32, является вспомогательным, обеспечивающим возможность задания самим пользователем горячих клавиш, определяющих быстрый доступ к разделам меню. К тому же этот компонент позволяет задать такие сочетания горячих клавиш, которые не предусмотрены в выпадающем списке свойства разделов меню ShortCut.
Компонент HotKey внешне выглядит как обычное окно редактирования Edit. Но если в него входит пользователь, то оно переводит нажимаемые им клавиши в тип TShortCut, хранящий комбинацию горячих клавиш. Например, если пользователь нажимает клавиши Ctrl-ф, то в окне HotKey появится текст В«Ctrl + фВ».
Основное свойство компонента — 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:
не каскадное (т.е. состоит только из двух уровней — заголовков меню и выпадающих списков разделов)
в свойствах Caption разделов меню не использованы амперсанты
в меню отсутствуют разделители
Эти предположения сделаны просто для того, чтобы упростить код и не использовать функции, не описанные в данной книге.
Начните новое приложение, разместите на форме компонент MainMenu и сконструируйте с его помощью любое меню, удовлетворяющее перечисленным требованиям. Задайте каким-то из разделов меню быстрые клавиши. Один из разделов меню должен называться Настройка и при выборе его мы хотим предоставить пользователю вспомогательную форму для настройки быстрых клавиш.
Добавьте в приложение еще одну форму (команда File | New Form). Эта форма будет вспомогательной. В обработчик команды Настройка главной формы вставьте оператор
Form2.ShowModal;
Этот оператор покажет пользователю окно вспомогательной формы как модальное — т.е. пользователь не сможет вернуться в главную форму, пока не закроет вспомогательную. Чтобы компилятор понял этот оператор, надо в модуль главной формы Unit1 вставить оператор uses, ссылающийся на модуль вспомогательной формы Unit2. Можете сделать это вручную или, перейдя в окне Редактора Кода в модуль Unit1, выполните команду File | Use Unit и укажите, что хотите связаться с модулем Unit2. Поскольку из модуля Unit2 надо будет видеть меню модуля Unit1, то аналогичным образом введите и обратную связь — свяжите модуль Unit2 c Unit1.
Теперь давайте спроектируем вспомогательную форму. Она может иметь вид, представленный на рис. 6.6. На ней расположено два списка ListBox: ListBox1, в котором отображаются заголовки меню, и ListBox2, в котором отображаются разделы меню, соответствующие выбранному заголовку. В нижней части формы расположен компонент HotKey и кнопка Button, которая фиксирует в меню сделанный пользователем выбор и закрывает форму. В компоненте HotKey надо стереть с помощью Инспектора Объектов свойство HotKey, которое содержит некоторое значение по умолчанию.
Рис. 6.6 Окно постройки горячих клавиш во время выполнения
Теперь надо написать обработчики событий, которые загружали бы списки 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. В этом выражении Form1.MainMenu1.Items[ListBox1.ItemIndex] — элемент головного раздела меню, выбранного пользователем в ListBox1. Каждый такой раздел можно рассматривать как элемент массива меню и в то же время он сам является массивом разделов второго уровня. Поэтому его свойство Items указывает на подраздел с индексом i.
При щелчке пользователя на списке ListBox2 происходит загрузка компонента HotKey1 символами горячих клавиш выбранного пользователем раздела. Если раздел не имеет горячих клавиш, то в окне HotKey1 отображается текст В«НетВ». Далее пользователь может войти в окно HotKey1 и нажать сочетание клавиш, которое он хочет назначить выбранному им разделу меню. Обработка щелчка на кнопке фиксирует это сочетание в разделе меню и закрывает вспомогательную форму.
Опробуйте это приложение в работе и вам станет яснее механизм работы с разделами меню и с быстрыми клавишами.