Окно постройки горячих клавиш во время выполнения
Теперь надо написать обработчики событий, которые загружали бы списки 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 отображается текст «Нет». Далее пользователь может войти в окно HotKey1 и нажать сочетание клавиш, которое он хочет назначить выбранному им разделу меню. Обработка щелчка на кнопке фиксирует это сочетание в разделе меню и закрывает вспомогательную форму.
Опробуйте это приложение в работе и вам станет яснее механизм работы с разделами меню и с быстрыми клавишами.