Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
іНФОРМАТИКА 1.doc
Скачиваний:
24
Добавлен:
15.08.2019
Размер:
14 Мб
Скачать
☆

1. Форма – головний компонент додатку

Різновиди форм визначаються значеннями їх властивостей FormStyle, а також різноманітністю форм-заготовок, що зберігаються в репозиторії Delphi.

Стиль форми задається одним із значень властивості

TFormStyle = (fsNormal, fsMDIChild, fsMDIForm, fsStayOnTop) ;

property FormStyle: TFormStyle;

Стиль fsNormal визначає звичайну форму, що використовується для вирішення самих різних завдань, зокрема - для загального управління всією програмою (головна форма).

Стилі fsMDIChild і fsMDIForm використовуються при створенні так званих багатодокументних застосувань в стилі MDI (MDI -Multi Document Interface). Цей немодний сьогодні стиль припускає створення головного вікна MDI (його зазвичай називають рамковим), усередині якого у міру потреби з'являються дочірні вікна.' Дочірні вікна, подібно дочерним елементам контейнера, не можуть виходити за межі свого власника - рамкового вікна. У MDI-додатках є спеціальні засоби управління взаємодією рамкового вікна з дочірніми вікнами. Наприклад, кожне дочірнє вікно у момент активізації може потрібним чином набудувати головне меню рамкового вікна (дочірні MDI-вікна не мають власного головного меню). У Delphi для створення рамкового вікна використовується стиль fsMDIForm, а для створення дочірнього MDI-вікна - стиль fsMDIChild.

Стиль fsStayOnTop призначений для вікон, які завжди повинні розташовуватися над всіма іншими вікнами програми[ У термінології Windows такі вікна називаються Popup Window, що буквально переводиться як вікно-поплавець. ]. У момент активізації вікна воно зазвичай стає видимим на екрані, навіть якщо перед цим його загороджували інші розкриті вікна. Стиль fsStayOnTop перешкоджає перекриттю вікна іншими вікнами, навіть якщо воно стає неактивним і втрачає фокус введення (так сказано в документації, проте насправді це не так, див. нижчий). Зрозуміло, що цей стиль використовується у виняткових випадках, коли вікно містить щось, що вимагає підвищеної уваги користувача.

Як показує практика, оголошення вікна із стильовою ознакою fsStayOnTop ще не вирішує проблему створення вікна-поплавця, тобто вікна, яке неможливо перекрити іншими вікнами. Більш того, нескладні експерименти переконають вас, що ця ознака взагалі не грає ніякої ролі! Щоб створити вікно-поплавець, потрібно звернутися до API-функції SetWindowPos.

Наприклад:

SetWindowPos(fmAlarmForm.Handle, hwnd_TopMost, 300, 300, 250, 70, swp_noActvate)

Повний опис цієї функції (як і всіх інших API-функцій Windows) ви знайдете в Help-файлах WIN32.HLP або WIN32SDK.HLP, які поставляються разом з Delphi і за умовчанням розташовуються В теці Program Files | Common Files | Borland shared | MSHelp. Тут я лише стисло поясню призначення параметрів виклику.

Першим параметром звернення до функції є дескриптор вікна, яке повинне стати “поплавцем”. Нагадаю, що дескриптор форми міститься в її властивості Handle, тому для форми fmAlarmForm параметр виклику має вид fmAlarmForm. Handle. другим параметром визначається розташування вікна щодо інших вікон в так званому Z-порядку їх розташування. Константа nwnd_TopMost указує, що вікно повинне стати самим верхнім і аж до його закриття не може перекриватися іншими (звичайними) вікнами. Чотири наступні параметри визначають координати лівого верхнього кута вікна, його ширину і висоту. Всі параметри указуються в пікселях, координати кута задаються відносно, лівого верхнього кута екрану. Останнім указується один або декілька бітових прапорів, що уточнюють поведінку вікна. У нашому прикладі використаний прапор swp_noActvate, що означає, що вікно не отримує фокусу введення у момент своєї появи на екрані. Поясню, що на практиці я часто використовую вікна-поплавці, щоб повідомити користувача, наприклад, про необхідність відновити набір даних, які він бачить зараз, оскільки ці дані були змінені іншими користувачами клієнт-серверної БД. Таке вікно не повинне віднімати активність (фокус введення) біля вікна, з яким працює користувач.

І останнє зауваження. “Поплавцем” може стати і звичайне вікно (із значенням FormStyle=fsNormai). Проте “поплавець” дійсно з'явиться на екрані, тільки якщо в його властивості visible міститься значення True.

Іншими словами, якщо користувач закриє таке вікно, воно не з'явиться в результаті виклику функції setwindowpos - його заздалегідь потрібно зробити видимим методом show. Оскільки вікно-поплавець може викликатися в різних місцях програми, зручно помістити виклик функції setwindowspos його обробник події onActivate. Проте якщо ви спробуєте створити такий обробник для вікна із стилем FormStyle=fsStayonTop, то компілятор видасть повідомлення про помилку і помістить заготівку методу в тексті модуля після обмежувача “.”. В цьому випадку визначайте вікно із стилем fsNormal.

Сучасні багатовіконні застосування найчастіше будуються в стилі SDI (SDI - Single Document Interface), який в протилежність MDI не накладає обмежень на положення і розміри допоміжних форм, кожна з яких при необхідності може мати своє головне меню (у стилі SDI реалізована, наприклад, середовище Delphi). Для створення форм в цьому випадку використовується стиль fsNormal.

Відмічу, що в рамках SDI-додатків можуть використовуватися рамкові MDI-форми з своїми дочірніми вікнами, так що термін SDI носить вельми умовний характер і застосовується в основному для зіставлення давно використовуваному терміну MDI.

У репозиторії Delphi зберігається безліч стандартних форм-заготовок, призначених для вирішення конкретних завдань (доступ до репозиторія відкриває опція меню File | New | other).

Крім універсальної порожньої форми Form (сторінка New peno-зитория) репозиторії містить наступні спеціалізовані форми:

Назва Сторінка Призначення

About box Forms Вікно 0 програмі

Dual list box   Forms Діалогове вікно з двома компонентами ListBox. Використовується для гнучкого управління списками, зокрема для переміщення елементів з одного списку в іншій

Quick Report Labels Forms

Використовується в додатках баз даних для друку етикеток

Quick Report List Forms Використовується в додатках баз даних для створення звичайних звітів

Quick Report Master/Detail Forms

Використовується в додатках баз даних для створення звітів типу головний /детальний

Tabbed Pages Forms Заготівка для багатосторінкового діалогового вікна із закладками, кнопками ok, cancel і Help

Dialog with Help Dialogs Заготівка для діалогового вікна з кнопками ok. Cancel, Help. Є варіанти з вертикальним асположением кнопок і з горизонтальним розташуванням

Password Dialog Dialogs Діалогове вікно з редактором TEdit, кнопками ok і Cancel для введення паролів

Reconcile Error Dialog Dialogs

Використовується в додатках баз даних для пояснення виявленої помилки при зміні таблиці

Standard Dialog   Dialogs Заготівка для діалогового вікна з кнопками ok, cancel. Є варіанти з вертикальним розташування кнопок і з горизонтальним розташуванням

Dialog Wizard Dialogs Майстер створення діалогових вікон

Decision Cube Sample Business Заготівка для використання компонентів сторінки Decision Cube

Database Form Wizard Business Майстер створення форм для доступу до баз даних

Quick Report Wizard Business Майстер створення звітів для баз даних

TeeChart Wizard Business Майстер форм для доступу до компоненту chart