Ноу Інти, лекція, створення форми з вкладками

Анотація: Створюється форма, в якій відображаються докладні відомості про члена сім'ї, виводиться його життєпис і відображаються дерева предків і нащадків. Форма містить три вкладки. На першій сторінці розміщується інформація з бази даних, на другий відображаються дерева предків і нащадків (дерева створюються в лекції 6), на третій виводиться текст. Текст можна завантажити з файлу, відредагувати і зберегти. Ця ж форма використовується для додавання інформації в базу даних (див. Лекцію 7).

створення форми

Ноу Інти, лекція, створення форми з вкладками

Форма з вкладками відкривається при натисканні на кнопку "Відкрити" вікна familyForm. Вона відображає інформацію про виділений в списку члені сім'ї, тому попередньо слід знайти і запам'ятати покажчик на об'єкт класу person. в якому зберігається інформація про цю людину.

Лістинг 5.1. Визначення предиката onViewClick

Предикат getParent в даному випадку повертає покажчик на класу taskWindow. Замість нього можна використовувати предикат applicationWindow :: get / 0, який завжди повертає покажчик на об'єкт класу taskWindow.

Отже, при натисканні на кнопку "Відкрити" спочатку знаходиться покажчик на об'єкт виділеного елемента списку, потім він запам'ятовується, далі запам'ятовується покажчик на об'єкт вікна familyForm. після цього відкривається форма з вкладкаміі і в її рядок заголовка записується ім'я виділеного члена сім'ї.

Далі створюються сторінки вкладок.

Створення сторінки інформації

Виділимо папку tabForm дерева проекту, за допомогою команди меню New In New Package відкриємо діалогове вікно Create Project Item. виділимо в ньому елемент Control. в поле Name напишемо назву сторінки: infoPage. Натиснемо кнопку Create. У рядку Title таблиці властивостей введемо текст закладки: Інформація. Розмістимо на сторінці наступні елементи управління (рис. 5.2 рис. 5.2):

написи (Static Text) "Ім'я", "Прізвище", "Батько", "Мати";

поля редагування (Edit Control):

За замовчуванням властивість Representation групових блоків (Group Box) і написів (Static Text) має значення Variable. Для групового блоку "Пол" і написи "Подружжя" його значення слід змінити на Fact Variable (див. Вище).

Ноу Інти, лекція, створення форми з вкладками

Перемикач (Radio Button) може знаходитися в двох станах - checked (включений) і unchecked (вимкнений). З набору перемикачів, об'єднаних в одну групу, може бути включений тільки один перемикач.

Для відображення батьків використовуються списки, що випадають, так як в режимі додавання в них містяться списки членів сім'ї, з яких потім вибираються батьки.

Аналогічно слід створити в окремих пакетах ще дві сторінки вкладок - treePage (Title. Дерева) і descrPage (Title. Опис). Ці сторінки будуть заповнені пізніше.

В інтерфейсі tabForm слід оголосити властивість familyForm. Воно використовується для зберігання покажчика на об'єкт вікна, з якого відкривається форма з вкладками (може бути відкрито кілька таких вікон).

Тепер необхідно змінити визначення конструктора new / 1 в імплементації класу tabForm. У ньому створюються сторінки вкладок.

Лістинг 5.3. Зміна визначення конструктора

Заповнення сторінки інформації

Заповнимо першу сторінку вкладок. В інтерфейсі infoPage слід оголосити властивість, яке зберігає покажчик на об'єкт бази даних. а також предикат updatePicture. який ініціює перерисовку зображення при зміні розмірів форми.

В імплементації infoPage слід внести зміни в визначення конструктора new. оголосити необхідні факти-змінні і визначити предикат updatePicture.

Лістинг 5.5. Основні параметри

Тепер слід додати обробник події ShowListener. Коли відкривається вікно, заповнюються поля сторінки.

Лістинг 5.6. Визначення предиката onShow

Нижче наведено визначення предикатів, які розміщують відомості в елементах управління.

Лістинг 5.7. Заповнення полів сторінки інформації

Як зазначалося вище, якщо відомості про подружжя відсутні в базі даних, то список не відображається (рис. 5.3 рис. 5.3).

Ноу Інти, лекція, створення форми з вкладками

Додамо обробники подій натискання на кнопки left_ctl і right_ctl. Визначення цих предикатів наведено нижче.

Лістинг 5.8. Визначення предиката onLeftClick

Лістинг 5.9. Визначення предиката onRightClick

Лістинг 5.10. Оновлення зображення при зміні розмірів

Друга сторінка вкладок буде заповнена пізніше (в главі 6 "Дерева. Зведена таблиця"). Приступимо до заповнення третьої сторінки (рис. 5.4 рис. 5.4).

Ноу Інти, лекція, створення форми з вкладками

призначений для користувача елемент управління (Class: sciLexer; Border: True);

Відкриємо файл descrPage.pro і змінимо визначення конструктора new так, як показано нижче. Крім цього, оголосимо факти-змінні для зберігання покажчика на об'єкт бази даних. імені файлу і вказівки на систему кодування символів в цьому файлі (Unicode чи ні).

Лістинг 5.11. Зміна визначення конструктора

Предикат postAction використовується в даному випадку для того, щоб після виведення тексту до нього була застосована операція автоматичного переносу слова на наступний рядок, якщо воно не поміщається в поле вікна цілком.

Нижче наведено визначення предиката onShow. Коли відкривається сторінка "Опис", в ній відображається текст з файлу, вказаного в базі даних.

Лістинг 5.12. Визначення предиката onShow

При натисканні кнопки "Відкрити" відкривається вікно "Відкрити файл". Вміст обраного в ньому текстового файлу відображається у вікні.

Лістинг 5.13. Визначення предиката onOpenClick

При натисканні кнопки "Зберегти" відкривається вікно "Зберегти файл". Вміст поля записується в обраний файл.

Лістинг 5.14. Визначення предиката onSaveClick

Вважати текст можна також наступним чином:

Предикат обробки події натискання на кнопку "Запам'ятати" буде визначений пізніше.

5.1. Створіть вікно, що містить два списки і кнопку. У першому списку повинні бути перераховані назви родинних відносин: "батько", "брат" і т. Д. Другий список повинен бути порожній. Крім цього, слід створити кнопку на формі familyForm. при натисканні на яку має відкриватися це вікно. Після того, як в першому списку буде виділено назву родинного відносини, у другому списку повинен відображатися список відповідних родичів виділеного (у вікні familyForm) члена сім'ї.

5.2. Створіть вікно для пошуку в базі даних за допомогою регулярних виразів (див. Клас regEx). Регулярний вираз вводиться в поле редагування. Пошук ведеться в рядках виду "<имя> <фамилия> ". Результати повинні виводитися в списку.

Схожі статті