Лабораторная работа №9
Использование компонентов меню и горячих клавиш
Методика создания приложения
Раздел |
Подраздел |
Name |
Файл |
|
MFile |
|
Горячие клавиши |
MFileHotKey |
|
Выход |
MFileExit |
Правка |
|
MEdit |
|
Копировать |
MEditCopy |
|
Вставить |
MEditPaste |
|
Обмен |
MEditChange |
Справка |
|
MHelp |
|
О программе |
MHelpAbout |
Задать для раздела Правка свойство Enabled равным false
Раздел |
Name |
Копировать |
PU1Copy |
Вставить |
PU1Paste |
Обмен |
PU1Change |
#include "Unit2.h"
#include "Unit3.h"
Подключающие эти формы.
Завершение работы по команде меню "Выход" (Событие OnClick для раздела меню MFileExit)
Close();
Снимаем выделение в первом ListBox (Событие OnClick для компонента Button)
ListBox1->ItemIndex =
-1;
//-Если выделение есть хоть в одном ListBox, то
//-разрешаем меню "Правка" и соответствующиее
//-выпадающее меню
if (ListBox1->ItemIndex
>= 0 || ListBox2->ItemIndex >=0) {
MEdit->Enabled
= true;
PU1Copy->Enabled = true;
PU1Paste->Enabled = true;
PU1Change->Enabled
= true;
}
//-Если выделение снято в обоих ListBox,
то делаем
//-недоступным раздел меню "Правка" и
//-соответствующее выпадающее меню
else
{
MEdit->Enabled
= false;
PU1Copy->Enabled = false;
PU1Paste->Enabled = false;
PU1Change->Enabled
= false;
}
По щелчку в первом ListBox устанавливаем доступность раздела меню "Правка" и соответствующего контекстного меню (Событие OnClick для компонента ListBox)
if (ListBox1->ItemIndex
>= 0 || ListBox2->ItemIndex >= 0) {
MEdit->Enabled
= true;
PU1Copy->Enabled = true;
PU1Paste->Enabled = true;
PU1Change->Enabled
= true;
}
По щелчку во втором ListBox устанавливаем доступность раздела меню "Правка" и соответствующего контекстного меню (Событие OnClick для компонента ListBox)
if (ListBox1->ItemIndex
>= 0 || ListBox2->ItemIndex >= 0) {
MEdit->Enabled
= true;
PU1Copy->Enabled = true;
PU1Paste->Enabled = true;
PU1Change->Enabled = true;
}
Снимаем выделение во втором ListBox (Событие OnClick для компонента Button)
ListBox2->ItemIndex =
-1;
//-Если выделение есть хоть в одном ListBox, то
//-разрешаем меню "Правка" и соответствующиее
//-выпадающее меню
if (ListBox1->ItemIndex
>= 0 || ListBox2->ItemIndex >= 0) {
MEdit->Enabled = true;
PU1Copy->Enabled = true;
PU1Paste->Enabled = true;
PU1Change->Enabled
= true;
}
//-Если выделение снято в обоих ListBox,
то делаем
//-недоступным раздел меню "Правка" и
//-соответствующее выпадающее меню
else
{
MEdit->Enabled = false;
PU1Copy->Enabled = false;
PU1Paste->Enabled = false;
PU1Change->Enabled = false;
}
Обработка меню Правка-Копировать (Событие OnClick для раздела меню MEditCopy)
//-Если не сделан выбор
if
(ListBox1->ItemIndex < 0 && ListBox2->ItemIndex < 0) {
ShowMessage("Сделайте свой выбор !");
}
//-Если выбор сразу в двух окнах
if (ListBox1->ItemIndex
>= 0 && ListBox2->ItemIndex >= 0) {
ShowMessage("Определитесь с
выбором !");
}
//-Если сделан правильный выбор
if
(ListBox1->ItemIndex >= 0 && ListBox2->ItemIndex < 0) {
select=ListBox1->Items->Strings[ListBox1->ItemIndex];
}
else
select=ListBox2->Items->Strings[ListBox2->ItemIndex];
Обработка меню Правка-Вставить (Событие OnClick для раздела меню MEditPaste)
//-Если не сделан выбор
if (ListBox1->ItemIndex
< 0 && ListBox2->ItemIndex < 0) {
ShowMessage("Сделайте свой выбор !");
}
//-Если выбор сразу в двух окнах
if (ListBox1->ItemIndex
>= 0 && ListBox2->ItemIndex >= 0) {
ShowMessage("Определитесь с
выбором !");
}
//-Если сделан правильный выбор
if
(ListBox1->ItemIndex >= 0 && ListBox2->ItemIndex < 0) {
ListBox1->Items->Add(select);
}
else ListBox2->Items->Add(select);
Обработка меню Правка-Обмен (Событие OnClick для раздела меню MEditChange)
if
(ListBox1->ItemIndex >= 0 && ListBox2->ItemIndex >= 0) {
select=ListBox1->Items->Strings[ListBox1->ItemIndex];
ListBox1->Items->Delete(ListBox1->ItemIndex);
select1=ListBox2->Items->Strings[ListBox2->ItemIndex];
ListBox2->Items->Delete(ListBox2->ItemIndex);
ListBox1->Items->Add(select1);
ListBox2->Items->Add(select);
}
Открытие справочного окна "О программе" (Событие OnClick для раздела меню MHelpAbout)
Form3->ShowModal();
Открытие окна установки горячих клавиш (Событие OnClick для раздела меню MFileHotKey)
Form2->ShowModal();
Загрузка ListBox1 заголовками основного меню (Событие OnShow для формы)
ListBox1->Clear(); //-Очистили ListBox
//-В цикле перебираем все заголовки и добавляем их
//-в ListBox
for (int i=0; i<Form7->MainMenu1->Items->Count;
i++)
ListBox1->Items->
Add(Form7->MainMenu1->Items->Items[i]->Caption);
//-Устанавливаем выбор в первую позицию
ListBox1->ItemIndex =
0;
//-Вызываем обработчик щелчка на ListBox
ListBox1Click(Sender);
Заполнение ListBox2 подразделами меню (Событие OnClick для компонента ListBox1)
ListBox2->Clear();
//-Очистили ListBox
//-В цикле перебираем все подзаголовки и добавляем
их
//-в ListBox
for(int i=0; i<Form7->MainMenu1->Items->
Items[ListBox1->ItemIndex]->Count; i++)
ListBox2->Items->Add(Form7->MainMenu1->Items->Items[
ListBox1->ItemIndex]->Items[i]->Caption);
//-Устанавливаем выбор в первую позицию
ListBox2->ItemIndex =
0;
//-Вызываем обработчик щелчка на ListBox
ListBox2Click(Sender);
Занесение горячих клавиш для пункта меню выбранного в ListBox в компонент HotKey (Событие OnClick для компонента ListBox2)
HotKey1->HotKey = Form7->MainMenu1->Items->
Items[ListBox1->ItemIndex]->
Items[ListBox2->ItemIndex]->ShortCut;
Изменение горячих клавиш выбранного раздела меню (Событие OnClick для компонента BitBtn)
Form7->MainMenu1->Items->Items[ListBox1->ItemIndex]->
Items[ListBox2->ItemIndex]->ShortCut =
HotKey1->HotKey;
Закрытие окна (Событие OnClick для раздела компонента BitBtn)
Close();
Close();