Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Мал. 4. Діалогове вікно вибору форми

Поиск

Загальні принципи використання стандартних діалогових вікон

До складу Windows входить ряд типових діалогових вікон, таких як вікно відкриття і збереження файлу, вікна вибору шрифту, кольору, настроювання принтера, пошуку і заміни тексту.

Робота зі стандартними діалоговими вікнами здійснюється в три етапи.

1. На формі розміщується відповідний компонент із панелі компонентів DIALOGS і здійснюється настроювання його властивостей (сам компонент - діалог невидимий у момент роботи програми, видно лише створюване їм стандартне вікно). Настроювання властивостей може проходити як на етапі конструювання, так і в ході виконання програми.

2. Здійснюється виклик стандартного для діалогів методу Execute, що створює і показує на екрані діалогове вікно. Виклик цього методу розташовується усередині обробника події, що відповідає елементу управління (кнопка, пункт меню і т.д.).

Тільки після звертання до Execute на екрані з'являється відповідне діалогове вікно. Вікно діалогу є модальним вікном, тому відразу після звертання до Execute подальше виконання програми припиняється доти, поки користувач не закриє вікно. Оскільки Execute - логічна функція, вона повертає в програму значення True, якщо результат діалогу з користувачем був успішним.

Проаналізувавши результат Execute, програма може виконати третій етап

3. Використання введених за допомогою діалогового вікна даних - імені файлу, настроювань принтера, обраного шрифту і т.д.

Розробка системи меню ПЗ Компоненти тиу MainMenu

Головне меню (компонент MainMenu), знаходиться у стандартній панелі компонентів. При розміщені на формі компонент відображається іконкою, але при додаванні пунктів, головне меню відразу з’явиться вздовж верхнього краю форм. Кожен пункт меню має власні сторінки в вікні ІО (подія OnClick – процедура обробки вибору команди меню).

Якщо розмістити на формі компонент MainMenu, а після цього два рази клацнути на полі властивісті Items, або два рази клацнути на піктограмі компонента, то відкриється вікно Menu Designer (Конструктор меню). Створення меню починається з введення назви першого пункту меню. Що б ввести відразу декілька пунктів підменю, потрібно клацнути в полі Caption вікна інспектора об’єктів, клацнути на пустому прямокутнику у нижній частині підменю у вікні конструктора і ввести потрібні заголовки, натискаючи клавішу Enter.

Якщо пункти меню поділяються на групи, можна вставити роздільну лінію, якщо ввести в якості заголовка пункту меню значок дефіса “ – “.

При проектуванні меню можна змінювати порядок розташування його пунктів, перетягуючи їх мишею, або вставити чи знищити пункт меню через його контекстне меню.

Компоненти типу MenuItem

Ці компоненти створюються у вікні конструктора меню (пункти підменю). Кожен пункт підменю має власні сторінки в вікні ІО (подія OnClick – процедура обробки вибору команди меню).

Важливою властивістю пункту меню є Caption, який інформує користувача, яку дію виконує цей пункт. Якщо заголовок пункту меню складається з символів національного алфавіту, то для властивості Name цього пункту використовуються ідентифікатори N1, N2 і т.д.

Властивість ShortCut визначає комбінацію гарячих клавіш. Для визначання комбінації можна скористатися запропонованим списком, або ввести їх вручну.

Якщо властивість Checked пункту меню містить значення True, то зліва від заголовку цього пункту з’являється прапорець.

Властивість GroupIndex, яка використовується разом з властивістю RadioItem для створення груп пунктів меню, які працюють як перемикачі.

Для створення продовження підменю з нового стовпчика („ПУСК”) властивості Break, одного з пунктів можна привласнити значення mbBreak.

Якщо підменю перевантажене, використовується каскадне меню. Для цього необхідно з контекстного меню вибраного пункту підменю вибрати команду Create Submenu і продовжувати створення меню.

Контекстні меню

Майже всі об’єкти Windows мають контекстне або спливаюче меню (PopupMenu). Процес розробки контекстного меню аналогічний створенню головного меню. В ньому можна використовувати вкладені підменю та клавіші швидкого доступу, але робити цього не рекомендується.

Для даного типу меню важливими властивостями є:

AutoPopup, якщо його значення встановлено в True, то меню буде з’являтися на екрані після клацання по об’єкту правою кнопкою миші, якщо Fals – то ні. Значення властивості Alignment визначає в якому місці відносно курсору миші буде з’являтися меню. Компонент PopupMenu обробляє подію OnPopup безпосередньо перед появленням на екрані.

Для присвоєння об’єкту КМ необхідно у властивостях об’єкта PopupMenu вказати назву елемента PopupMenu, що створювався.

Наприклад:

Наступні процедури задають вирізання, копіювання та вставку даних з поля редагування у буфер обміну:

Memo1.CutToClipboard;

Memo1.CopyToClipboard;

Memo1.PasteFromClipboard;

Після чого в оператор uses модуля добавити ClipBrd.

 

Контрольні питання

1. Які різновиди форм вам відомі?

2. Яка властивість форми визначає її стиль?

3. Наведіть основні властивості форми?

4. Наведіть основні методи роботи з формами?

5. Як підключити нове вікно до додатку?

6. Що таке репозиторій?

7. Наведіть правила використання стандартних вікон діалогу?

8. Як створюється меню вікна?

9. Як створюється контекстне меню?

Тема 7.1. Розвинені засоби в середовищі Delphi

Управління додатком і екраном. Обробка виключних ситуацій.

План

1 APPLICATION

2 SCREEN

3 Опрацювання виняткових ситуацій

4 Приклад обробки виняткових ситуацій

 

ГЛОБАЛЬНІ ОБ'ЄКТИ І НАСТРОЙКА ПРОГРАМ

З будь-якою запущеною програмою автоматично зв'язуються чотири глобальні об'єкти: Application (програма), screen (екран), Printer (принтер) і Clipboard (буфер міжпрограмного обміну). У цьому розділі розглядаються властивості і методи цих об'єктів. Окремий розділ присвячений індивідуальній настройці програм.

APPLICATION

Об'єкт Application відноситься до класу TAppiication і інкапсулює найважливіші властивості і методи програми як такий. Він створюється автоматично і доступний будь-якій програмі. Об'єкт не поміщений в палітру компонентів, тому його властивості недоступні на етапі конструювання, але стають доступні при прогоні програми[ Деякі властивості програми (зокрема її піктограма, відомості про версію і використовувану мову) можуть встановлюватися за допомогою менеджера проекту (опція project | Options і сторінка Application). ].

Application є посередником між програмою і операційною системою. Зокрема, з його допомогою здійснюється диспетчеризація повідомлень Windows, реалізується контекстно-чутлива довідкова служба, він обробляє клавіші-акселератори, виняткові ситуації і т.д.

Нижче описуються деякі властивості Application для додатку Windows (для додатку Linux об'єкт Application декілька відрізняється). Опущені властивості призначені в основному для прямого звернення до API-функцій Windows.

property Active: Boolean; Містить True, якщо будь-яке вікно програми має фокус введення
property BiDiMode: TBiDiMode; Визначає властивість bidiMode для програми в цілому
property CurrentHelpFile: Strings; Визначає ім'я поточного довідкового файлу
property ExeName: Strings; Містить повне ім'я (з маршрутом доступу) виконуваного файлу програми
property HelpFile: String; Визначає ім'я файлу довідкової служби
property Hint: String; Містить довгу частину оперативної підказки
property HintColor: TColor;   Визначає колір фону ярличка оперативної підказки
property HintHidePause: Integers;   Визначає паузу (у мілісекундах) від моменту появи ярличка до його зникнення
property HintPause: Integer;   Визначає паузу (у мілісекундах) від моменту зупинки покажчика миші до появи ярличка
property HintShortPause: Integers; Визначає паузу (у мілісекундах) появи ярличка при переході з одного компоненту на іншій
property Icon: TIcon; Визначає піктограму програми
property MainForm: TForm; Визначає головне вікно програми
property ShowHint: Boolean; Разрешает/запрещает показ ярличків для всіх вікон програми
property ShowMainForm: Boolean;   Разрешает/запрещает показ головного вікна у момент старту програми
property Terminated: Boolean; Містить True, якщо програма винна припинити роботу. Використовується в додатках з інтенсивним рахунком для контролю необхідності припинення подальшої роботи
property Title: String; Визначає текст під піктограмою мінімізованої програми
property UpdateFormatSettings: Boolean; Якщо містить True, програма автоматично враховуватиме нові установки форматів Windows (наприклад, новий роздільник цілої і дробової частин числа) при їх зміні у момент роботи програми.
property UpdateMetricSet;Boolean; Якщо містить True, програма автоматично враховуватиме нові метричні установки Windows (наприклад, новий системний шрифт) при їх зміні у момент роботи програми

 

Методи Application:

procedure BringToFront; Поміщає вікно, яке було активним востаннє, поверх решти вікон
procedure HandleException(Sender: TObject); Здійснює замовчувану обробку виняткових ситуацій. Використовується при розробці нових компонентів
procedure HandleMessage; Припиняє роботу програми до тих пір, поки не будуть оброблені всі повідомлення, після чого створює подію Onidle
procedure CreateForm(FormClass: TFormClass; var Reference); Створює об'єкт-вікно: викликає конструктор класу TFormClass і пов'язує його значення із змінній Reference
procedure CancelHint; Забороняє показ ярличків оперативної підказки
function HelpContext(Context: THelpContext): Boolean; Викликає розділ context довідкової служби і повертає True, якщо такий розділ існує
function HelpJump(const JUMPID: String): Boolean; Викликає розділ довідкової служби по його імені JUMPID і повертає True, якщо такий розділ існує
procedure Hide Hint; Прибирає поточний ярличок оперативної підказки
procedure Minimize; Мінімізує програму до піктограми
procedure NormalizeAllTopMosts;   Поширює дію NormalizeTop Mosts на головне вікно програми
procedure ProcessMessages;   Те ж, що HandleMessage, але не створює подія OnIdle
procedure Restore;   Відновлює первинні розміри всіх вікон програми до її мінімізації
procedure RestoreTopMosts;   Відновлює дію стилю fsTopMost для всіх вікон програми
procedure ShowException(EiException); Реалізує замовчувану обробку виняткових ситуацій
procedure Terminate; Завершує роботу програми

За допомогою методів HandleException і ProcessMessages програма може тимчасово припинити свою роботу до тих пір, поки не будуть оброблені всі призначені нею повідомлення Windows. Це буває необхідно для оновлення видимих компонентів в процесі відображення тривалого за часом циклу роботи. Якщо, наприклад, програма змінить текст влучні або стан компоненту progressBar, повідомлення про це поступить в чергу повідомлень і залишиться в ній, поки не закінчиться поточна робота. Виклик HandleException або ProcessMessages в цьому випадку дозволить мітці або ProgressBar дійсно відновити свій вигляд і відобразити нову фазу процесу. Різниця між методами HandieException І ProcessMessages полягає в тому, що перший після очищення черги повідомлень викликає обробник фонової події OnIdie, а другою не робить цього. Призначення події onidie див. після опису подій об'єкту Application.

За допомогою методу HookMainWindow можна зареєструвати функцію Hook, яка отримуватиме всі адресовані програмі повідомлення windows. За моїми спостереженнями, ця функція отримує

Повідомлення Message паралельно з головною віконною функцією Application. ProcessMessage або після неї, оскільки ні зміна повідомлення, ні повертаний функцією Hook результат ніяк не впливають на поведінку програми. Як випливає з вбудованої довідкової служби, як функція Hook повинна реєструватися віконна функція діалогового вікна, створеного не за допомогою Delphi. Якщо ви вирішите використовувати HookMainWindow для спостереження за посиланими програмі повідомленнями, не забудьте перед завершенням програми відключити реєстрацію Hook методом unHookMainwin-dow, інакше завершення роботи програми супроводжуватиметься повідомленням про помилку. Для цілей перехоплення повідомлень і їх можливої зміни слід використовувати обробник Application. OnMessage, який викликається з віконної функції Програми Application. ProcessMessage до виклику методів Trans-lateMessage І DispatchMessage, що реалізовують стандартну обробку повідомлень. У Delphi 5 (і 6) з'явився додатковий зручний засіб перехоплення повідомлень - компонент TApplicationEvents.

Для об'єкту Application визначені наступні події:

property OnActivate: TNotifyEvent; Виникає, коли програма отримує фокус введення
property OnDeactivate: TNotifyEvent; Виникає, коли програма втрачає фокус введення
TExceptionEvent = procedure (Sender: TObject; E: Exception) of object; property OnException: TException Event; Обробник цієї події реалізує замовчувану обробку виняткових ситуацій  
THelpEvent = function (Command: Word; Data: Longint; var CallHelp: Boolean): Boolean of ob ject; property OnHeip: THelpEvent; Виникає при кожному зверненні до довідкової служби  
property OnHint: TNotifyEvent;   Виникає при необхідності відобразити довгу частину оперативної підказки
TIdleEvent = procedure (Sender: TObject; var Done: Boolean) of object; property Onldle: TIdleEvent; Обробник цієї події реалізує фонову роботу (див. нижчий за пояснення)
TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of object; property OnMessage: TMessageEvent; Виникає при отриманні програмою повідомлення Windows. За допомогою обробника цієї події можна обробити не скільки або всі повідомлення до того, як їх отримає активна форма
property OnMinimize: TNotifyEvent; Виникає при мінімізації програми
property OnRestore: TNotifyEvent; Виникає при відновленні програмою первинних розмірів після її мінімізації
property OnShowHint: TShowHintE vent; Виникає при необхідності відобразити вікно з ярличком оперативної підказки

Подія OnIdie виникає всякий раз, коли програма виявляє, що її черга повідомлень порожня. Обробник цієї події може непомітно для користувача виконати допоміжну роботу, наприклад, перевірити орфографічну правильність тільки що введеного слова або зібрати і обробити статистичні дані. Важливо пам'ятати, що виконувана в обробнику робота не може займати багато часу, інакше програма перестане реагувати на запити користувача. Якщо фонова робота віднімає багато часу, її слід розбити на порівняно невеликі фрагменти або періодично викликати в ній метод HandieMessage. Обробник в параметрі Done повідомляє про необхідність продовжити фонову роботу (Done = False) або 0 її завершенні (Done = True). У першому випадку програма прогляне чергу повідомлень і після її очищення поверне управління обробникові OnIdie. У другому випадку програма чекатиме надходження нових повідомлень.

Примітка

Подія Onidie введена в Delphi 1 для сумісності з Windows З.х в якій не було багатопоточності; Якщо ви працюєте з Windows 32 і вам дійсно потрібно зробити деяку фонову роботу, має сенс доручити її виконання окремому потоку команд(см.га. 14)

Для події ОnShowHint визначені такі типи:

type

THintInfo = record

HintControl: TControl;

HintPos: TPoint;

HintMaxWidth: Integer;

HintColor: TColor;

CursorRect: TRect;

CursorPos: TPoint;

ReshowTimeout: Integer;

HideTimeout: Integer;

HintStr: String;

end;

TShowHintEvent =

procedure (var HintStr: String;

var CanShow: Boolean;

var Hintlnfo: THintInfo)

of object;

У параметрі HintStr обробник отримує текст, який повинен містити ярличок, а в параметрі Hintlnfo - додаткову інформацію, зокрема: HintControl - елемент, для якого виводиться ярличок; HintPos - координати верхнього лівого кута ярличка; HintMaxWidth - максимальна ширина вікна; HintColor - колір вікна; CursorRect - прямокутник, в якому повинен залишатися покажчик миші, щоб з'явився ярличок; CursorPos - поточне положення покажчика миші; ReshowTimeout - затримка в мілісекундах від моменту виникнення події до появи ярличка;

HideTimeout - час показу ярличка в мілісекундах.

SCREEN

Об'єкт screen класу TScrеen інкапсулює властивості і методи, що спрощують роботу з дисплеєм ПК, зокрема з його допомогою оперативно змінюється вид використовуваного програмою покажчика миші. Як правило, програма встановлює покажчик у вигляді пісочного годинника перед початком довгої за часом роботи і відновлює замовчувану форму після її завершення. Для цього використовується властивість Cursor об'єкту Screen:

Screen.Cursor:= crHourGlass;

// Виконуємо тривалу роботу:

..

// Відновлюваний замовчувану срорму:

Screen.Cursor:== crDefault;

Властивості об'єкту Screen:

property ActiveControl: TWinControl; Містить посилання на елемент з фокусом введення
property ActiveForm: TForm; Містить посилання на вікно з фокусом введення
property Cursor: TCursor; Визначає поточний покажчик миші для вікон програми
property Cursors[Index: Integer]: HCursor; Відкриває доступ до одного із зареєстрованих покажчиків миші по його індексу
property CustomFormCount: Integer;   Містить кількість вікон або сторінок властивостей програми, відкритих в даний момент
property CustomForms[Index: Integer]: TCustomForm;   Містить список об'єктів класу TCustom Form - відкритих в даний момент вікон програми
property DataModuleCount: Inte ger; Містить кількість модулів даних в програмі
property DataModules[Index: Integer]: TDataModule; Містить список модулів даних - об'єктів класу TdataModule
property Fonts: TStrings; Містить список імен всіх екранних шрифтів
property FormCount: Integer;   Містить загальну кількість вікон програми, що показуються на екрані
property Forms[Index: Integer]: TForm; Відкриває доступ до вікна програми по його індексу
property Height; Integer; Містить висоту екрану в пікселях
property IconFont: TFont; Визначає шрифт для напису нижче за піктограму мінімізованої програми
property PixelsPerInch: Integer;   Містить роздільну здатність екрану в пікселях на лінійний дюйм
property Width: Integer; З об'єктом screen зв'язані два Містить ширину екрану в пікселях події:
property OnActiveControlChange: TNotifyEvent; Виникає під час переходу фокусу введення від одного елементу до іншого
property OnActiveFormChange: TNotifyEvent; Виникає під час переходу фокусу введення від однієї форми до іншої
     

 



Поделиться:


Последнее изменение этой страницы: 2016-09-13; просмотров: 349; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.73.157 (0.011 с.)