Лабораторная работа №9

Использование компонентов меню и горячих клавиш

 

Методика создания приложения

 

  1. Создать новый проект
  2. Расположить на форме компоненты согласно рисунку

  1. Заполнить свойство Items компонентов ListBox
  2. Задать свойство ItemIndex равным -1 для обоих компонентов ListBox
  3. Создать меню, открыв редактор двойным щелчком на компоненте MainMenu и добавляя разделы присвоить им названия в свойстве Caption. Задать имена разделов в свойстве Name

Раздел

Подраздел

Name

Файл

 

MFile

 

Горячие клавиши

MFileHotKey

 

Выход

MFileExit

Правка

 

MEdit

 

Копировать

MEditCopy

 

Вставить

MEditPaste

 

Обмен

MEditChange

Справка

 

MHelp

 

О программе

MHelpAbout

            Задать для раздела Правка свойство Enabled равным false

  1. Создать всплывающее меню открыв редактор двойным щелчком на компоненте PopUpMenu и добавляя разделы присвоить им названия в свойстве Caption. Задать имена разделов в свойстве Name.

Раздел

Name

Копировать

PU1Copy

Вставить

PU1Paste

Обмен

PU1Change

  1. Добавить к проекту еще две формы (для задания горячих клавиш и вывода справки) File->New->Form C++ Builder
  2. Чтобы компилятор понял обращение к этим формам из основной формы выполним (находясь в главной форме) команду File->UseUnit и добавить обе формы. При этом в код добавятся строки

#include "Unit2.h"

#include "Unit3.h"

Подключающие эти формы.

  1. Написать обработчики событий в основной форме:

Завершение работы по команде меню "Выход" (Событие 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();

 

  1. Для события OnClick кнопки выхода подставить обработчик меню Файл-Выход
  2. Для событий OnClick разделов всплывающего меню подставить обработчики событий соответствующих пунктов основного меню.
  3. На форму задания горячих клавиш добавим компоненты согласно рисунку:

  1. Напишем обработчики событий для этой формы:

Загрузка 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();

 

  1. На форму справки добавим компоненты согласно рисунку:

  1. Напишем обработчик события OnClick для компонента Button (Закрытие окна)

Close();

 

 

Hosted by uCoz