Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MetAnalizSD_10.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
380.42 Кб
Скачать

Лабораторна робота № 9 Засоби автоматизованної розробки інтерфейсу користувача іс заданної предметної галузі.

Мета роботи: Практично реалізувати автоматизовану розробку інтерфейсу користувача ІС ФКУ заданої предметної галузі

Зміст роботи та звіту. 1. Виділити об’єкти, атрибути , структурні та запитові зв’язки предметної галузі . 2. Проаналізувавши предметну галузь, розробити структури даних для записів. 3. Розробити алгоритм і реалізувати його засобами надбудов над МВР . 4. Подати результати роботи і зробити короткі висновки.

Завдання :

Розробити інтерфейс користувача інформаційної системи засобами надбудов МВР в заданній предметній галузі (тої, що в лабораторній роботіх № 8 ).

Короткі теоретичні відомості.

Мал. 9.1. Властивості компонента MainMenu


Для створення головного меню в системах BCB/Delphi на форму варто помістити об'єкт MainMenu (мал. 9.1). Мал. 9.2. Вікно редактора меню в середовищі ВСВ.

Для виклику редактора меню досить два рази клацнути по значени властивості Items чи по піктограмі об'єкта MainMenu, після чого на екрані з'явиться вікно редактора меню (мал. 9.2) У ВСВ і Delphi редактор немає спеціальної назви, але заголовок вікна відбиває суть справи. На відміну від автономного редактора VB, де набір всіх елементів команди меню ведеться на одній формі, у середовищі BCB/Delphi постійно приходиться переключатися між вікном редактора меню і сторінкою значень властивостей команди — об'єкта типу TMenuItem.

У вікні редактора в початковий момент знаходиться виділене вікно, призначене для фіксації найменування першого розділу меню, а у вікні Інспектора об'єктів на вкладці властивостей прийдеться набирати необхідні значення. Для назви розділу File (Файл) досить у поле значення Caption (Заголовок) набрати &File. Після натискання клавіші <Enter> у вікні редактора з'явиться перший заголовок — File, а прямокутник зміститься вправо для набору заголовка наступного розділу. Тому що меню зручніше набирати по розділах, то у вікні редактора можна примусово клацнути за назвою першого розділу чи натиснути клавішу, що переміщає курсор клавіатури вліво, — до попереднього розділу. Тоді з'явиться пунктирний прямокутник для набору першої команди меню File (Файл) (мал. 3.3)

Мал. 9.3 Підготовка до набору команд розділу File

Одночасно в Інспекторі об'єктів відкривається сторінка для чергового об'єкта типу TMenuItem. Текст команди набирається у вікні Caption з використанням символу & перед буквою, що підкреслюється. Клавішна комбінація, еквівалентна команді, вибирається зі списку Shortcut. Значення параметра Name призначається автоматично. Наприклад, якщо Caption=New, то у властивість Name засилається значення New1. Однак серед найменувань команд можуть зустрітися невідповідні комбінації — наприклад, лінія розділу має заголовок, що складається з єдиного знака мінус. Заголовок команди може бути написаний російською мовою, але ідентифікатор Name не може містити російські букви. У таких випадках система привласнює подібним до команд імена типу ni, N2, N3,... . Вікно редактора меню, фактично, служить екраном, на якому динамічно відображається процес побудови оболонки меню. І лише зрідка допомагає в конструюванні розділів меню і переходів у підменю інших рівнів.

Створення спливаючих меню в BCB і Delphi

У візуальних середовищах ВСВ і Delphi спливаючі меню створюються і виявляються в роботі небагато простіше. З будь-яким об'єктом, так само як і з формою можна зв'язати спливаюче меню. Створюється таке меню тим же способом, що і головне. Тільки замість об'єкта MainMenu на форму викликається компонент PoupMenu і його ім'я заноситься в однойменну властивість хазяїна спливаючого меню (мал. 9.4). Подвійний щиглик по піктограмі об'єкта - вікно редактора (мал. 9.5). Мал. 9.4. Підготовка до створення спливаючого меню Програма може у визначені моменти часу забороняти чи дозволяти автоматичну появу спливаю-чого меню, маніпулюючи значенням властивості AutoPop. В останніх версіях ВСВ і Delphi з'явила-ся можливість створення більш комфортабельних умов для лівші. Властивість TrackButton, за замовчуванням значення, що має, tbRightButton, можна змінити на tbLeftButton. Нестандартне меню

У додатку можна створити декілько головних і спливаючих меню і, у залежності від сформованої ситуації, привласнювати властивостям MainMenu і PopupMenu потрібні значення. Крім того, головне меню головної форми може зливатися з пунктами меню дочірніх форм. Ок-ремі пункти меню можна виключати, робити недоступними чи заміняти новими. Однак, по-пер-ше, це заняття достатнє заморочливе. По-друге, ініціатива входу в меню і право вибору тієї чи іншої команди цілком належать користувачу. У деяких додатках корисно висвічувати різні меню по запланованій логіці програми і жадати від користувача обов'язкового вибору одного з запропонованих блюд. Саме для таких ситуацій пропонується нестандартне рішення. Ідея нестандартного меню полягає в розміщенні чергового розділу команд у вікні списку типу ListBox, розміщеного на допоміжній формі FormMenu, що динамічно створюється, формується по номеру розділу і відображається в режимі ShowModal. Відмахнуться від такого вікна користувач просто так не може, а якщо ще заголовок вікна позбавити керуючих кнопок, то єдиний вихід продовжити работу додатка складається у виборі одного з рядків запропонованого розділу меню.

Мал. 9.5. Набір команд спливаючого меню

Будь-яка функція додатка може звернутися до процедури ShowMenu, передавши їй як єдиний параметр цілочислений номер розділу меню. Після підготовчої роботи зі створення вікна FormMenu керування буде передано допоміжній формі, у момент активізації якої виникне подія onActivate. В оброблювачі цієї події і зосереджені всі операції по формуванню заданого розділу і припасуванню розмірів форми під габарити списку. У заголовку форми FormMenu перед лагается розташувати назва розділу відображуваного меню. Для зв'язку за даними між головною і допоміж-ною формами номер поточного розділу меню можна передати в глобальну перемінну Num_Menu.

У системі ВСВ функція ShowMenu повинна бути включена до складу модуля Unit1, що обслуговує головну форму, і може бути реалізована в такий спосіб:

int ShowMenu(int k) { Num_Menu=k; if(FormMenu != NULL) delete FormMenu; FormMenu = new TFormMenu(Application); return FontiMenu->ShowModal () ; }

Перевірка покажчика FormMenu почата для того, щоб у разі потреби видалити форму з попереднім розділом з пам'яті. Потім створюється нова форма за допомогою оператора new і їй передається керування в модальному режимі. Повернення керування у функцію ShowMenu тепер відбудеться тільки тоді, коли один з оброблювачів подій форми FormMenu зашле в системну змінну ModaiResult ненульове значення. І як таке значення природно вибрати номер виділеного рядка списку, збільшений на 1 (рядки в списку нумеруються від 0).

Для демонстрації викладеної ідеї ми обмежилися формуванням двох розділів меню, що містять відповідно 3 і 6 команд. А замість виконання обраної команди на екран видається повідомлення про вибір користувача. Сформоване меню підганяється по висоті під число команд у розділі, а форма FormMenu зміщається у верхній правий кут, щоб не займати екран. Додаткові зсуви в командах припасування висоти і положення об'єктів доводиться підбирати експериментально.

Оброблювач події onKeyDown доводиться підключити тому, що без нього список реагує на натискання деяких клавіш — стрілки керування курсором, пробіл, <End>, <Home>, <Page Up>, <Page Down>. При цьому позначеним завжди виявляється перший рядок списку.Один із фрагментів роботи з нестандартним меню показаний на мал. 9.6. // Модуль Unitl #include <vcl.h> #pragma hdrstop #include "Unitl.h" #include "Unit2.h"

//

#pragma resource "*.dfm"

TForml *Forml;

int Num Menu; // Глобальна змінна для номера меню

int ShowMenu(int k);

//

_fastcall TForml::TForml(TComponent *Owner)

: TForm(Owner)

{ }

// ___

void fastcall TForml::ButtonlClick(TObject* /*Sender*/)

{// Імітація роботи з меню

int resp;

resp=ShowMenu(l); // Вивід меню з командами розділу switch (resp)

{ case 1: ShowMessage("Ви6рана команда l-l");break; case 2: ShowMessage("Ви6рана команда l-2");break;

case 3: ShowMessage("Ви6рана команда l-3"); }

resp=ShowMenu(2); // Вивід меню з командами розділу 2

switch (resp)

( case l; ShowMessage("Ви6рана команда 2-l");break;

case 2: ShowMessage("Ви6рана команда 2-2");break;

case 3: ShowMessage("Ви6рана команда 2-3");break;

case 4: ShowMessage("Ви6рана команда 2-4");break;

case 5: ShowMessage("Ви6рана команда 2-5");break; case 6: ShowMessage("Ви6рана команда 2-6"); } }

//

void fastcall TForml::FormClose(TObject *Sender, TCloseAction &Action )

{// Осво6ождение зайнятих ресурсів

if(FormMenu != NULL) delete FormMenu;

}

//

int ShowMenu(int k)

{// Підготовка до створення форм для меню

Num_Menu=k;

if(FormMenu != NULL) delete FormMenu;

FormMenu = new TFormMenu(Application);

return FormMenu->ShowModal(); }

// Модуль Unit2 #include <vcl.h> #pragma hdrstop #include "Unit2.h"

//

#pragma resource "*.dfm"

TFormMenu *FormMenu;

extern int Num_Menu;

//

fastcall TFormMenu::TFormMenu(TComponent *Owner)

: TForm(Owner)

{

}

//

void fastcall TForrnMenu::FormActivate(TObject *Sender)

{// Формування команд меню в списку

ListMenu->Clear();

switch(Num_Menu)

{

case 1: Caption="Розділ 1";

ListMenu->Items->Add("Команда 1-1");

ListMenu->Items->Add("Команда l-2");

ListMenu->Items->Add("Команда l-3");

break;

case 2: Caption="Розділ 2";

ListMenu->Items->Add("Команда 2-l") ;

ListMenu->Items->Add("Команда 2-2");

ListMenu->Items->Add("Команда 2-3") ;

ListMenu->Items->Add("Команда 2-4") ;

ListMenu->Items->Add("Команда 2-5") ;

ListMenu->Items->Add("Команда 2-6") ;

break;

}

Top=0; // npижим форми до верхньої частини екрана

Left=Screen->Width-Width-2; // nрижим форми до правої границі екрана // установка висоти списку з невеликим запасом

ListMenu->Height=ListMenu->Items->Count*ListMenu->ItemHeight+5;

Height=ListMenu->Height+27;

} //----------------------------------------------------------------------------------

void fastcall TFormMenu::ListMenuClick(TObject *Sender)

{

ModalResult=ListMenu->ItemIndex+l;

}

//----------------------------------------------------------------------------

void_fastcall TFormMenu::ListMenuKeyDown(TObject *Sender,

WORD &Key, TShiftState Shift) { Key=0; }


Мал. 9.6. Нестандартне меню поруч з головної формою .


Запити до захисту .

  1. Об'єкт для створення головного меню в системах BCB/Delphi ?

  2. Для виклику редактора меню треба ?

  3. Порядок набора .меню по розділах ?

  4. Сторінка значень властивостей команди — це об'єкт типу ?

  5. У вікні редактора в початковий момент знаходиться виділене вікно, призначене для ?

  6. Що прийдеться набирати у вікні Інспектора об'єктів на вкладці властивостей ?

  7. Для назви розділу File (Файл) досить у поле значення Caption (Заголовок) набрати ?

  8. Як набирається текст команди у вікні Caption ?

  9. Порядок створення спливаючих меню ?

28

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]