Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторна робота №7
Тема: Головне та контекстне меню. Створення обєктів.
Ціль: Навчитися створювати та ефективно використовувати як головне так і контекстне меню. Вміти динамічно створювати обєкти і вилучати їх. Застосовувати засоби налагодження програми, які надає система С++ Builder.
Хід роботи
Створимо проект, який демонструє роботу з меню.
Файлу модуля форми дайте ім'я Main, а файлу проекту MyMenu.
Щоб написати текст нового пункту меню користуйтесь властивістю Caption даного елементу. Щоб створити новий пункт клацніть мишкою на пустій рамці де повинен бути цей пункт меню і заповніть властивість Caption відповідним написом. Щоб створити підменю меню Color в контекстному меню виберіть команду Create SubMenu (Ctrl+Right). Щоб замість пункту меню вставити лінію досить в Caption ввести символ „-” і натиснути Enter. Рис. 8.1.
Кожному пункту меню задайте наступні імена: FileNew, FileOpen, FileSave, FileSaveAs, FileExit, OptionsColor, ColorGreen, ColorBlue, ColorYellow.
Для цього значенням властивості PopupMenu форми виберіть меню ppEngMenu.
Запустіть програму на виконання і перевірте її роботу.
Як ви бачите, одна й та ж сама дія (завершення програми) зустрічається в програмі тричі. Кожного разу для виконання однієї й тієї ж операції створювалась нова процедура. Щоб не ускладнювати код програми подібними процедурами, використаємо компонент ActionList.
Увага!!! Щоб вилучити обробник достатньо вилучити текст, який ми писали в ньому (тобто оператори Close) і відкомпілювати проект.
Зверніть увагу як змінився після цього напис на кнопці і пункти меню Exit.
для acNew:
ShowMessage(“Виконується команда New”);
acSave->Enabled=true;
acSaveAs->Enabled=true;
для acOpen:
ShowMessage(“Виконується команда Open”);
acSave->Enabled=true;
acSaveAs->Enabled=true;
для acSave:
ShowMessage(“Виконується команда Save”);
для acSaveAs:
ShowMessage(“Виконується команда Save as”);
для acGreen:
Color=clMoneyGreen;
для acBlue:
Color=clSkyBlue;
для acYellow:
Color=clInfoBk;
Зверніть увагу, пункти меню Save і Save As стають активними тільки після вибору команди New або Open.
Створимо проект, який буде динамічно створювати і вилучати обєкти.
файлу проекту дайте ім'я MyDinamic, а файлу модуля форми Main.
//компоненти, що будуть створюватись
TLabel *MyLabel ;
TButton *MyButton ;
//елементи головного меню
TMenuItem *CreateLabel ;
TMenuItem *CreateButton ;
TMenuItem *DeleteLabel ;
TMenuItem *DeleteButton ;
//елементи контекстного меню
TMenuItem *CrLabel ;
TMenuItem *CrButton ;
TMenuItem *DelLabel;
TMenuItem *DelButton ;
//пункт 'створити мітку' в головному меню
CreateLabel=new TMenuItem(MenuCreate);
MenuCreate->Add(CreateLabel);
CreateLabel->Action=acCreateLabel;
//в контекстному меню
CrLabel=new TMenuItem(ppMenu);
ppMenu->Items->Add(CrLabel);
CrLabel->Action=acCreateLabel;
//пункт 'створити кнопку' в головному меню
CreateButton=new TMenuItem(MenuCreate);
MenuCreate->Add(CreateButton);
CreateButton->Action=acCreateButton;
//в контекстному меню
CrButton=new TMenuItem(ppMenu);
ppMenu->Items->Add(CrButton);
CrButton->Action=acCreateButton;
для дії acCreateLabel:
void __fastcall TfmMain::acCreateLabelExecute(TObject *Sender)
{
//створюємо мітку
MyLabel=new TLabel(this);
MyLabel->Parent=fmMain;
MyLabel->Caption="Моя мітка";
MyLabel->Left=100;
MyLabel->Top=50;
//пункт 'вилучити мітку' в головному меню
DeleteLabel=new TMenuItem(MenuDelete);
MenuDelete->Add(DeleteLabel);
DeleteLabel->Action=acDeleteLabel;
//в контекстному меню
DelLabel=new TMenuItem(ppMenu);
ppMenu->Items->Add(DelLabel);
DelLabel->Action=acDeleteLabel;
//Вилучаємо пункти меню
delete (CreateLabel);
delete(CrLabel);
}
для дії acCreateButton:
void __fastcall TfmMain::acCreateButtonExecute(TObject *Sender)
{
//створення кнопки
MyButton=new TButton(this);
MyButton->Parent=fmMain;
MyButton->Caption="Моя кнопка";
MyButton->Visible=true;
MyButton->Left=100;
MyButton->Top=100;
//пункт 'вилучити мітку' в головному меню
DeleteButton=new TMenuItem(MenuDelete);
MenuDelete->Add(DeleteButton);
DeleteButton->Action=acDeleteButton;
//в контекстному меню
DelButton=new TMenuItem(ppMenu);
ppMenu->Items->Add(DelButton);
DelButton->Action=acDeleteButton;
//Вилучаємо пункти меню
delete(CreateButton);
delete (CrButton);
}
для дії acDeleteLabel:
void __fastcall TfmMain::acDeleteLabelExecute(TObject *Sender)
{
//вилучаємо мітку
delete (MyLabel);
//пункт 'створити мітку' в головному меню
CreateLabel=new TMenuItem(MenuCreate);
MenuCreate->Add(CreateLabel);
CreateLabel->Action=acCreateLabel;
//в контекстному меню
CrLabel=new TMenuItem(ppMenu);
ppMenu->Items->Add(CrLabel);
CrLabel->Action=acCreateLabel;
//Вилучаємо пункти меню
delete (DeleteLabel);
delete(DelLabel);
}
для дії acDeleteButton:
void __fastcall TfmMain::acDeleteButtonExecute(TObject *Sender)
{
//вилучаємо кнопку
delete(MyButton);
//пункт 'створити кнопку' в головному меню
CreateButton=new TMenuItem(MenuCreate);
MenuCreate->Add(CreateButton);
CreateButton->Action=acCreateButton;
//в контекстному меню
CrButton=new TMenuItem(ppMenu);
ppMenu->Items->Add(CrButton);
CrButton->Action=acCreateButton;
//Вилучаємо пункти меню
delete (DeleteButton);
delete(DelButton);
}