• Главная
  • Карта сайта
Не найдено

Модальні форми - Delphi. :: CodingRUS ::. програмування по-російськи на Delphi, C ++, PHP, Prolog, GPSS

Реклама Виконуємо курсові та лабораторні з різних мов програмування
Детальніше - курсові та лабораторні на замовлення
Delphi, Turbo Pascal, Assembler, C, C ++, C #, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Замовити програму для Windows Mobile, Symbian
Моделювання роботи ділянки термічної обробки шестерень на GPSS + За ...
Медіа плеєр на Delphi + Пояснювальна записка
Лабораторна робота по динамічним списками на Turbo Pascal (видалення ду ...
Модальні форми Крім головної форми будь-який додаток Windows може містити й інші форми, однією з яких є модальна форма.
Відкриття форм як модальних використовується в більшості діалогових вікон. Модальна форма призупиняє виконання викликала її процедури до тих пір, поки користувач не закриє цю форму. Модальна форма не дозволяє також користувачеві переключити фокус курсором миші на інші форми цього додатка, поки форма не буде закрита. Користувач повинен виконати запропоновані йому дії перш, ніж продовжити роботу.
Модальної може бути зроблена будь-яка форма, якщо вона робиться видимої методом ShowModal. Якщо та ж сама форма робиться видимої методом Show, то вона не буде модальної.
Методи Show і ShowModal можна застосовувати тільки до невидимої в даний момент формі. Якщо немає впевненості, що форма в даний момент видима, то перш ніж застосовувати ці методи, слід перевірити властивість Visible форми. наприклад:

if (not Form2.Visible) then Form2.ShowModal;


При виконанні методів Show або ShowModal виникає подія форми onShow. Ця подія виникає до того моменту, як форма дійсно стане видимою. Тому обробку події onShow можна використовувати для налаштування будь-яких компонентів відкривається форми. При цьому в налаштуванні можна використовувати якусь оперативну інформацію, що виникає в процесі виконання програми.
Методом Hide форму в будь-який момент можна зробити невидимою. У цей момент в ній виникає подія onHide.
Необхідно пам'ятати, що для виконання методів CreateForm, Show, ShowModal, Hide і взагалі для обміну будь-якою інформацією між формами модулі відповідних форм повинні використовувати один одного. Наприклад, якщо форма в модулі Unit1 повинна управляти формою в модулі Unit2, то в оператор uses модуля Unit1 має бути включено ім'я другого модуля Unit2. А якщо до того ж форма в модулі Unit2 повинна пользова¬ться якоюсь інформацією, що міститься в модулі Unit1, то в оператор uses модуля Unit2 має бути включено ім'я першого модуля Unit1. В цьому випадку, якщо оператори uses в обох модулях розташовані в розділах interface, виникнуть проблеми з неприпустимими круговими посиланнями і компілятор видасть відповідну помилку. Від неприпустимих кругових посилань можна позбутися, якщо розімкнути їх, помістивши один або обидва оператора uses в розділ implementation. Можна також не включати імена модулів додатка в оператори uses вручну, а використовувати команду File | Use Unit, яка автоматизує цей процес і гарантує відсутність кругових посилань.
Закрити форму можна методом Close. При цьому в закривається формі виникає послідовність подій, які можна обробляти. Їх призначення - перевірити можливість закриття форми і вказати, що саме мається на увазі під закриттям форми. Перевірка можливості закриття форми необхідна, наприклад, для того, щоб проаналізувати, чи зберіг користувач документ, з яким він працював в цій формі і який змінював. Якщо не зберіг, додаток повинен запитати його про необхідність збереження і, в залежності від відповіді користувача, зберегти документ, закрити програму без збереження або взагалі скасувати закриття.
Поведінка модальної форми визначається її основною властивістю ModalResult. Це властивість доступно тільки під час виконання програми. При відкритті форми методом ShowModal спочатку значення властивості ModalResult дорівнює нулю. Як тільки при обробці якихось подій на формі властивості ModalResult буде присвоєно позитивне значення від 1 до 8, модальна форма закриється. При цьому значення її властивості ModalResult можна буде прочитати як результат, що повертається методом ShowModal. Таким чином, програма, яка викликала модальну форму, може дізнатися, що зробив користувач, працюючи з цією формою, наприклад, по якій кнопці він клацнув. Необхідні значення ModalResult можна задавати в обробниках відповідних подій в компонентах модальної форми.
У багатьох великих додатках Windows при їх запуску спочатку на екрані з'являється форма-заставка, яка містить логотип програми та відомості про програму та її розробників. Призначення цієї форми найчастіше полягає в тому, щоб забезпечити початкове завантаження і настройку програми. Тоді ця форма повинна закриватися не раніше, ніж закінчаться ці операції. Але іноді ця форма носить чисто інформаційний характер. У цих випадках бажано, щоб вона негайно закривалася при будь-яких діях користувача і навіть закривалася через якийсь час без будь-яких дій з боку користувача.
Крім форми-заставки нерідко в додатках, особливо в тих, які працюють з базами даних, на початку роботи програми з'являється форма із запитом пароля. При неправильному паролі додаток закривається, не дозволяючи користувачеві працювати з ним.
Форми-заставки і форми запиту пароля можуть бути реалізовані безліччю різних способів. Один з них полягає у використанні модальних форм.
Розглянемо послідовність дій при створенні модальної форми-заставки.
1. Відкрийте в Delphi новий додаток (File | New Application). Нехай відкрилася форма буде головною в додатку (замість такої порожній форми можна взяти будь-яке розроблене раніше додаток і додавати форму-заставку і форму запиту пароля в нього). Назвіть для визначеності головну форму додатку FMain.
2. Додайте в додаток нову форму (File | New Form). Нехай це буде форма-заставка з ім'ям FL. Її властивість BorderStyle треба зробити рівним bsNone, щоб у вікні цієї форми була відсутня смуга заголовка. Можна помістити на формі якийсь малюнок (розмістити компонент Image і вставити в його властивості Picture бажане зображення), різні написи і т.п. У найпростішому випадку можна помістити в центрі форми мітку Label і супроводити її будь-яким текстом. Розмір форми-заставки доцільно поставити невеликим, меншим, ніж звичайні вікна програми. Властивість Position слід зробити рівним poScreenCenter, щоб форма з'являлася в центрі екрану.
3. Напишіть обробники подій, які при будь-якій дії користувача закривали б форму FL. Клацніть на формі, щоб в інспектор об'єктів відкрилися пов'язані з нею сторінки (якщо форма накрита панелями або малюнками, то, клацнувши на них, натискайте клавішу Esc до тих пір, поки в інспектор об'єктів не відчиняться сторінки, які стосуються форми). Перейдіть в інспектор об'єктів на сторінки подій, виберіть подію onKeyDown і напишіть для нього обробник, що складається з одного оператора - Close. Аналогічний обробник напишіть для події onMouseDown. Якщо на формі є мітки, компоненти Image і ін., То виділіть їх все, задайте в подію onMouseDown посилання на той же обробник, що і для форми, а в формі поставте властивість KeyPreview в true, щоб форма перехоплювала всі пов'язані з натисканням клавіш події компонентів.
Тепер форма буде закриватися при натисканні користувачем будь-якої клавіші або кнопки миші.
4. Можна зробити так, щоб і при відсутності якихось дій з боку користувача форма закривалася сама, через певний проміжок часу, наприклад 5 секунд.
З цією метою додайте на форму компонент Timer зі сторінки System. Це невізуальний компонент, який може відраховувати інтервали часу. Інтервал задається у властивості компонента Interval в мілісекундах. Задайте його рівним 5000. Єдине подія таймера - OnTimer, наступає через встановлений період часу. Напишіть в обробнику цієї події все той же єдиний оператор Close.
Тепер при будь-якій дії і навіть бездіяльності користувача форма-заставка буде закриватися. За замовчуванням це означає зробити її невидимою. Однак форма-заставка не потрібна після того, як вона буде пред'явлена ​​користувачеві в початковий момент виконання програми. Зберігати весь час в пам'яті цю вже непотрібну форму не має сенсу. Тому в формі треба передбачити, щоб закриття форми означало б її видалення з пам'яті і одночасне звільнення пам'яті. Для цього в подія форми-заставки OnClose вставте оператор:

Action: = caFree;


Цей оператор призводить до знищення об'єкта форми і звільнення займаної формою пам'яті.
5. Перевірте, чи має її властивість Visible значення false. Це важливо, оскільки тільки невидиму форму можна відкрити методом ShowModal. У головній формі властивість Visible теж повинно мати значення false. Збережіть проект, давши файлу модуля головної форми ім'я Umain, а файлу модуля форми-заставки ім'я FLog.
6. Щоб послатися в модулі Umain на модуль Flog, додайте в оператор uses модуля Umain ім'я модуля FLog, або напишіть оператор uses FLog в розділі implementation модуля Umain, або зробіть те ж саме шляхом, виконання команди File | Use Unit.
7. Напишіть в модулі Umain обробник події форми OnShow, що складається з одного оператора:

FL.ShowModal;


Подія OnShow настає до того, як форма дійсно стане видимою. Тому під час обробки цієї події головна форма програми ще не видно. Оператор відкриває форму FL як модальну, передає їй управління, і подальше виконання програми в модулі Umain зупиняється до тих пір, поки модальна форма не буде закрита. Після закриття модальної форми виконання програми продовжиться і головна форма стане видимою.
8. Збережіть проект, запустіть додаток і перевірте його роботу.
Розглянемо процедуру розробки форми запиту пароля. Реальна форма такого типу повинна пропонувати користувачеві ввести своє ім'я і пароль, порівнювати введені значення із зразками, що зберігаються десь в системі, при неправильному паролі давати можливість користувачу поправитися. Якщо користувач так і не може ввести правильний пароль, форма повинна закрити програму, не допустивши до нього користувача. При правильному паролі після закриття форми запиту повинна відкритися головна форма програми.
Розглянемо простий випадок використання пароля, який безпосередньо вказується в відповідному операторі програми. При цьому можливість виправлення введеного пароля користувачу надаватися не буде.
9. Додайте до додатка нову форму. Назвіть її FPSW і збережіть її модуль у файлі з ім'ям UPSW. Зменшіть розмір форми до розумних меж, оскільки вона буде містити всього одне вікно редагування. Встановіть властивість форми BorderStyle рівним bsDialog, властивість Position - рівним poScreenCenter. У властивості Caption напишіть «Введіть пароль і натисніть Enter». Цей напис буде служити запрошенням користувачеві.
10. Помістіть в центрі форми вікно редагування Edit, в якому користувач буде вводити пароль. Очистіть його властивість Text. У обробнику події OnKeyDown цього компонента запишіть оператор:

if (key = VK_RETURN) then
begin
if FPSW.Edit1.Text = 'aa'
then ModalResult: = 6 else Close;
end;


Цей оператор виконує наступне. Перш за все, він аналізує натиснуту клавішу. Якщо натиснута клавіша Enter, то введений текст звіряє з паролем. В даному випадку для спрощення безпосередньо вказана правильна пароль - символи 'аа'. Якщо введений правильний пароль, то властивості ModalResult присвоюється деяке умовне число - 6 (можна було б вибрати і будь-яке інше допустиму кількість, крім 0 і 2). Якщо пароль неправильний, то виконується метод Close. В обох випадках форма закривається, так як завдання відмінного від нуля позитивного значення ModalResult рівносильно закриття форми. Але при правильному паролі значення ModalResult дорівнюватиме 6, а при неправильному - 2. Це значення виходить при виконанні методу Close або якщо користувач натисне кнопку системного меню в смузі заголовка вікна.
11. Модуль головної форми Umain потрібно доповнити операторами, які показують користувачеві форму пароля і аналізують відповідь ползователей. Для цього в модулі Umain в оператор uses потрібно додати посилання на модуль UPSW, а в обробнику події OnShow після раніше введеного оператора FL.ShowModal додати оператор:

if (FPSW.ShowModal 6) then Close else
begin
ShowMessage ( 'Ваш пароль' '' + FPSW.Edit1.Text + '' '');
FPSW.Free;
end;


Цей оператор аналізує значення властивості ModalResult форми запиту пароля. Значення цієї властивості повертає функція FPSW.ShowModal. Якщо результат не дорівнює 6, то був введений неправильний пароль. Тоді головна форма, а з нею разом і додаток закриваються методом Close. При правильному паролі можна продовжувати роботу додатка. Оператор ShowMessage введений для того, щоб показати, як можна використовувати властивість іншої форми - в даному випадку текст, який Ви самі ввели в якості пароля. У реальному додатку з цього паролю можна було б визначити рівень доступу користувача до конфіденційної інформації. Потім слід знищення форми запиту пароля методом Free. Це необхідно зробити, щоб звільнити пам'ять. Сама по собі ця форма в момент її закриття не знищується, оскільки за замовчуванням закрити форму - значить зробити її невидимою. Знищувати форму до цього моменту було не можна, так як при цьому знищилася б міститься в ній, - введений пароль.
Описаний вище спосіб управління формою запиту пароля не є єдиним. Він просто покликаний був показати, як можна обробляти величину ModalResult, що повертається методом ShowModal. опублікував Kest December 23 2009 1:46:36 · 5 Коментарів · 18775 Прочитаних ·
• Чи не знайшли відповідь на своє питання? Тоді задайте питання в коментарях або на форумі!
рейтинги

Рейтинг доступний тільки для користувачів.
Будь ласка, залогіньтеся або зареєструйтеся для голосування.

Немає даних для оцінки.

завантаження

нові завантаження

випадкові завантаження

Топ завантажень

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью