
- •Списки з каталогами.
- •Лабораторна робота № 2
- •Лабораторна робота № 4 Реалізація авл-дерева.
- •Лабораторна робота № 6 Розбудова в-дерева.
- •1.Способи проходження графів
- •Лабораторна робота № 8 Розробка інфологічної моделі інформаційної системи ( іс ).
- •Лабораторна робота № 9 Засоби автоматизованної розробки інтерфейсу користувача іс заданної предметної галузі.
Лабораторна робота № 9 Засоби автоматизованної розробки інтерфейсу користувача іс заданної предметної галузі.
Мета роботи: Практично реалізувати автоматизовану розробку інтерфейсу користувача ІС ФКУ заданої предметної галузі
Зміст роботи та звіту. 1. Виділити об’єкти, атрибути , структурні та запитові зв’язки предметної галузі . 2. Проаналізувавши предметну галузь, розробити структури даних для записів. 3. Розробити алгоритм і реалізувати його засобами надбудов над МВР . 4. Подати результати роботи і зробити короткі висновки.
Завдання :
Розробити інтерфейс користувача інформаційної системи засобами надбудов МВР в заданній предметній галузі (тої, що в лабораторній роботіх № 8 ).
Короткі теоретичні відомості.
Мал. 9.1. Властивості компонента MainMenu
Мал. 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. Нестандартне меню поруч з головної формою .
Запити до захисту .
Об'єкт для створення головного меню в системах BCB/Delphi ?
Для виклику редактора меню треба ?
Порядок набора .меню по розділах ?
Сторінка значень властивостей команди — це об'єкт типу ?
У вікні редактора в початковий момент знаходиться виділене вікно, призначене для ?
Що прийдеться набирати у вікні Інспектора об'єктів на вкладці властивостей ?
Для назви розділу File (Файл) досить у поле значення Caption (Заголовок) набрати ?
Як набирається текст команди у вікні Caption ?
Порядок створення спливаючих меню ?