ЗМІСТ
ВСТУП ................................................< br />
Відображаються об'єкти ....................................< br />
Об'єкт tView ........................................< br />
Група (tGroup). Z - порядок .........................< br />
Оформлення програми, що використовує засоби Turbo
Vision.Об'екти tProgram і tApplication ..............< br />
Обробка подій ...................................< br />
Команди .............................................< br />
ПОРЯДОК РОБОТИ З відображаються об'єкти ................< br />
Опис відображається об'єкта ......................< br />
Створення відображатиметься об'єкта ......................< br />
Приміщення відображатиметься об'єкта до групи ............< br />
Завдання параметрів відображаються об'єкти ............< br />
Робота з модальними об'єктами .......................< br />
СТВОРЕННЯ МЕНЮ ...........................................< br />
Створення розгортається меню ....................< br />
Створення локального меню ............................< br />
СТВОРЕННЯ ВІКОН І діалогових вікон .........................< br />
Вікна в Turbo Vision .................................< br />
Елементи вікон в Turbo Vision ........................< br />
Поле скролінгу .....................................< br />
Текстовий елемент буферірованной інформації .........< br />
Текстовий елемент для пасивного терміналу ..........< br />
Лінійка скролінгу ..................................< br />
Діалогове вікно .....................................< br />
Елементи діалогових вікон ............................< br />
Рядок введення ........................................< br />
Мітка ...............................................< br />
Протокол ............................................< br />
Селективний і тригерних списки .....................< br />
Кнопка ..............................................< br/>
Статичний і параметричний тексти ................< br />
Списки строк ........................................< br />
Стандартні вікна ....................................< br />
СТВОРЕННЯ СТРОК СТАНУ ................................< br />
Рядок стану, що відображає клавіші швидкого
управління ..........................................< br />
КОЛІРНА ПАЛІТРА TURBO VISION ...........................< br />
Стандартна палітра .................................< br />
Зміна стандартної палітри .......................< br />
НЕОТОБРАЖАЕМИЕ ОБ'ЄКТИ TURBO VISION .....................< br />
Аналізатори введеної інформації .....................< br />
Об'єкт - колекція ..................................< br />
Потоки Turbo Vision .................................< br />
Ресурси .............................................< br />
Списки строк ........................................< br />
ДЕЯКІ ДОДАТКОВІ МОЖЛИВОСТІ TURBO VISION .......< br />
Текстовий редактор ..................................< br />
Відображення деревовидних структур ....................< br />
Діалогове вікно завдання кольорової палітри .............< br />
ВИСНОВОК ..............................................< br/>
ВСТУП
Для ефективної роботи системи та її більшого купівельного
попиту недостатньо тільки того, щоб апаратура та програми забез-
Чіван правильні результати і швидку работу.Не менш важливим фактором
є зручність роботи користувача.
Тому в даний час ні один програмний продукт, позбавлений
більш-менш зручного інтерфейсу взаємодії користувача з
комп'ютером і програм між собою, не може розраховувати на успіх.
У світі розроблена величезна кількість різних систем підтримки
створення призначеного для користувача інтерфейса.Наіболее прогресивними, за на-
шему думку, є об'ектнооріентірованная система Turbo Vision
фірми Borland International і операційна система Windows фірми
Microsoft.Рассмотреніем можливостей ОС Windows займався А.А.Галаш-
кін, а в представленій роботі проводиться огляд та вивчення особ-
ностей, можливостей, елементів, організації пакету Turbo Vision.
Під час створення прикладної програми програміст великі зусилля зат-
рачівает на організацію введення/виводу інформації, тобто на формування
інтерфейса.Оні порівнянні із зусиллями, що витрачається на програмування-
ня основного алгоритму програми, за яким вирішується конкретна за-
дача.Работа, пов'язана з організацією введення/виводу, повторюється від
програми до програми, вимагає виконання однотипних операцій, отвле-
кає увагу програміста від вирішення основного завдання.
Хорошим засобом спрощення роботи з організації введення/виводу,
його уніфікації з урахуванням сучасних вимог до інтерфейсу програм
є розроблений фірмою Borland International пакет Turbo
Vision 2.0, який представляє об'єктно-орієнтовану бібліотеку коштів
формування інтерфейсу користувача.
Програму можна представити як сукупність-
ність двох частин: частина програми, що забезпечує рішення основної
завдання, і частину, що забезпечує організацію введення/виводу інформації з
зовнішніх пристроїв (на зовнішні пристрої), - так званий інтерфейс
программи.В основну частину (з основної частини) програми інформація
може передаватися двома способами - безпосередня передача інфор-
ції (наприклад, програма формує якісь дані та розміщує їх в
конкретному файлі на магнітному диску) і передача інформації за допомогою
організації діалогу (наприклад, після формування тих же даних проис-
ходить уточнення, в який конкретно файл слід помістити сформований-
ву інформацію). Спосіб, заснований на організації діалогу, є
більш універсальним і саме для організації діалогу призначений в
першу чергу пакет Turbo Vision.
У сучасних програмах, що працюють в текстовому режимі, діалог
зазвичай організовується за допомогою трьох засобів: меню, діалогових вікон і
строк состоянія.Turbo Vision дозволяє реалізувати всі ці кошти
діалогу.
Turbo Vision являє собою бібліотеку об'єктів, що дозволяють
створити користувальницький інтерфейс і широко використовують властивості ін-
капсуляціі, успадкування та поліформізма.Почті всі об'єкти бібліотеки
є нащадками спільного абстрактного об'єкта tObject.Ми розглянемо
їх класифікацію, виходячи із завдань, що виникають при створенні інтерфейсу.
Об'єкт tObject досить прост.Он не має параметрів і володіє
трьома методами, два з яких - конструктор Init:
constructor tObject.Init;
що заповнює виділену під об'єкт область нулями, і деструктор Done:
destructor tObject.Done;
який не виконує ніяких дій, - повинні бути перевизначені в його
нащадків, а третій метод Free:
procedure tObject.Free;
видаляє об'єкт з динамічної пам'яті, ніколи не перевизначається,
тому що може знищити будь-який нащадок об'єкта tObject.
При організації інтерфейсу доводиться вирішувати два завдання: ство-
ня відповідного образу на екрані і можливість за допомогою того
способу передачі інформації як від користувача до обчислювальної махай-
не, так і від машини до пользователю.Помімо цих двох завдань при організа-
ції інтерфейсу доводиться виконувати різні допоміжні опера-
ції (обчислення, контроль і перетворення даних, зберігання інформації
і т.д.). У зв'язку з цим всі об'єкти Turbo Vision можна розбити на дві
групи: які відображаються і неотображаемие об'єкти.
Відображаються об'єкти
Відображаються об'єкти є такі об'єкти, які можуть
бути зображені на екране.Еті об'єкти дозволяють наочно представити
користувачеві інформацію, дати йому засоби введення інформації в програм-
му найбільш природним образом.К таких об'єктів належать, в частнос-
ти, меню, рядка стану, діалогові вікна з їх компонентами.
Будь-який відображається об'єкт є нащадком загального абстрактного
об'єкта tView, який є безпосереднім нащадком загального предка
tObject.
Неотображаемимі об'єктами є об'єкти, які не можуть бути
зображені на екране.К цієї категорії, зокрема, належать об'єкти,
призначені для контролю і зберігання данних.Наіболее часто викорис-
зуемимі об'єктами такого класу є аналізатори вводиться інфор-
ції, колекції, потоки і ресурси.
Будь-який об'єкт Turbo Vision має велику кількість параметрів,
визначають його властивості та методів (підпрограм), які задають його пове-
деніе.Согласно принципам об'єктного програмування, бажано пара-
метри об'єктів не змінювати безпосередньо, а за допомогою відповідних-
щих методів, призначених для цієї целі.Ето пов'язано з тим, що в
ряді випадків тільки зміна того чи іншого параметра недостатньо -
слід виконати додатково певні дії (наприклад, пере-
малювати об'єкт на екрані). У ряді випадків безпосереднє зміна
параметрів просто недопустімо.Практіческі для всіх параметрів об'єктів
в Turbo Vision вказано, чи припустимо його безпосередньо змінювати (за-
пісивать). На жаль, принцип об'єктного програмування, що вимагає
змінити установки тільки за допомогою того чи іншого методу, повною
мірою в Turbo Vision не реалізований, і доводиться в найпростіших випадках
параметри змінювати безпосередньо або писати свої додаткові ме-
тоды.
Будь-який відображається об'єкт може бути розміщений на крані в прямоу-
гольной області, яка задається координатами лівого верхнього і пра-
вого нижнього углов.В Turbo Vision координати задають лінії розділу між-
ду знакомісць, і при цьому нумерація по горизонталі і вертикалі починають
нается з нуля (координати 0,0 - лівий верхній кут екрану). Координати
можуть бути абсолютними, відлічуваний відносно лівого верхнього
кута крана, і відносними, відлічуваний від лівого верхнього кута
відповідного вікна (так званого власника даного відображатиметься
об'єкта).
Для завдання координат точки на крані і координат прямокутної
області використовуються два об'єкти - tPoint, що містить дві координати
точки - X і Y:
type tPoint = object
X, Y: Integer;
end;
і tRect, що визначає верхній лівий і правий нижній кути прямокутної
області.Об'ект tRect не лише містить відповідні координати, але
також володіє методами, що дозволяють задавати, змінювати, отримувати ці
координати і виконувати над ними ряд інших операцій.
Об'єкт tView
Предком відображаються об'єктів є об'єкт tView.Несмотря на
те, що цей об'єкт абстрактний, тобто не можна створити конкретний обра-
зец цього типу, він має важливе значення, тому що задає загальні властивості
всіх відображаються елементів і визначає віртуальні методи, які
потім перевизначаються для конкретних що відображаються об'єктів.
В об'єкта tView задаються наступні параметри:
Розташування та розміри об'екта.Расположеніе об'єкта tView задає-
ся координатами його лівого верхнього кута в полі його власника - пара-
метр Origin, а розміри - параметром Size, що задає його ширину і висо-
ту.Непосредственно змінювати ці параметри в програмі не следует.Для
їх завдання потрібно використовувати методи Locate (одночасне завдання
всіх координат об'єкту):
procedure tView.Locate (var Bounds: tRect);
де Bounds - область, що виділяється під об'єкт в координатах його володів-
ца;
MoveTo (переміщення об'єкта в полі його власника без зміни розмі-
рів):
procedure tView.MoveTo (X, Y: Integer);
де X, Y - координати лівого верхнього кута об'єкта в полі його володів-
ца,
і GrowTo (зміна розмірів об'єкта):
procedure tView.GrowTo (X, Y: Integer);
де X, Y - горизонтальний і вертикальний розміри об'єкта.
При зміні розмірів об'єкта за допомогою методу GrowTo залишається
на місці лівий верхній кут об'єкта.
Координати курсора.Ряд відображаються об'єктів, таких, як рядок
введення текстової інформації, редактори і т.д., можуть мати видимий курей-
сор.Коордінати цього курсору задаються параметром Cursor.Для об'єктів,
що не мають видимого курсору, значення цього параметра безразлічно.За-
дати координати курсору можна за допомогою методу SetCursor:
procedure tView.SetCursor (X, Y: Integer);
де X, Y - координати курсору в полі об'єкта.
Курсор відображатиметься елемента можна зробити видимим і невидимим
(параметр sfCursorVis прапорів стану), а також змінювати його розміри
(параметр sfCursorIns).
Прапори свойств.Параметр Options розміром в один 16-розрядне слово
задає ряд властивостей відображатиметься об'екта.Назначеніе бітів цього слова
наступне (в круглих дужках приведені константи, що відповідають еди-
ниці у вказаному бите):
0-й біт (ofSelectable) - можливість активізації (виділення) даного
об'єкта в його власника або за допомогою миші,
або за допомогою клавіші табуляціі.Ето властивість
використовується у будь-якого об'єкта, і зазвичай прапор
задається рівним одиниці.
1-ий біт (ofTopSelect) - можливість розміщення об'єкта при його акти-
візаціі (виділення) зверху всіх інших
об'єктів конкретної группи.Ето властивість ис-
користується біля вікон (тип tWindow) та їх нащадків
- Діалогових вікон, стандартних діалогових
вікон і т.д.
2-ий біт (ofFirstClick) - можливість використання першого натискання
клавіші не тільки для виділення об'єкта (біт
0), але і для виконання дій, які
активізуються даними об'ектом.Свойство ис-
користується практично у всіх відображаються
об'єктів.
3-й біт (ofFramed) - наявність рамки навколо відображатиметься об'екта.Ето
властивість використовується для піделементи окон.Не
випливає цей прапор плутати з наявністю рамки вікна
(tWindow) та його нащадків.
4-ий біт (ofPreProcess) - випереджає реакція на собитіе.Заданіе прапора
призводить до зміни стандартної послідовно-
ності реакції відображаються елементів
групи на собитіе.Свойство може вико-
тися у будь-якого елемента в міру необходімос-
ти.
5-ий біт (ofPostProcess) - запізнілих реакція на собитіе.Аналогічно
попереднього прапора, але з іншими наслідками-
ями його використання.
6-ий біт (ofBuffered) - наявність КЕШ-буфера у відображатиметься об'єкта,
коли образ відображатиметься об'єкту не створюється
кожен раз заново при його промальовуванні на екрані,
а зберігається в спеціальному КЕШ-буфере.Флаг важливий
для складних складових об'єктів типу вікна і його
нащадків.
7-ий біт (ofTileable) - розташування відображаються об'єктів встик або
каскадно (з накладенням). Цей прапор вико-
ється тільки біля вікон і їхніх нащадків.
8-ий біт (ofCenterX) - центрування об'єкта за горізонталі.Прі заду-
ванні цього прапора об'єкт при його первісної
промальовуванні центрується щодо верти-
Кальной осі його владельца.Флаг може вико-
ватися у елементів, що входять до групи елементом
тов.
9-ий біт (ofCenterY) - центрування об'єкта за вертікалі.Аналогічно
попереднього прапора, але тільки об'єкт центрир-
ється щодо горизонтальної осі його вла-
ділка.
10-ий біт (ofValidate) - задається перевірка правильності введеної в
об'єкт інформації при виході з цього об'єктивним
та (активізації іншого об'єкта). Прапор ис-
користується тільки з рядками введення.
11-ий біт (ofVersion20) - використовується Turbo Vision 2.0.Ряд об'єктів
(як, наприклад, рядок вводу) мають принци-
піальние відмінності в залежності від версії
Turbo Vision.Версія 2.0 має додаткові
можливості в порівнянні з версією 1.0.
12-й біт (ofVersion10) - використовується Turbo Vision 1.0.
Решта біти слова прапорів властивостей не іспользуются.Для завдання
прапорів властивостей можна використовувати константу ofCentred = $ 0300 (одночасним-
менное центрування по горизонталі і вертикалі), за допомогою якої
можна одночасно встановити 8 і 9 біти параметра Options.Імеется
константа ofVersion = $ 3000, що дозволяє виділити біти, пов'язані з вер-
сіей Turbo Vision.
Прапори перемещенія.Параметр DragMode розміром в один байт задає
характеристики відображатиметься об'єкта при його переміщенні:
0-й біт (dmDragMove) - дозвіл переміщення об'єкта або за допомогою
миші, або за допомогою клавіш напрямку. Використовується у тих
об'єктів, які з тих чи інших причин можуть переміщатися
в полі свого власника, наприклад біля вікон і їхніх нащадків.
1-й біт (dmDragGrow) - дозвіл зміни розмірів об'єкта або з
допомогою миші, або за допомогою клавіш направленія.Іспользуется
біля вікон і їхніх нащадків.
4-й біт (dmLimitLoX) - заборона лівій стороні відображатиметься об'єкта
виходити за задані граніци.В як таких меж часто
виступають розміри власника даного об'єкту (наприклад, роз-
ри робочого поля, в якому розміщені вікна).
5-й біт (dmLimitLoY) - аналогічно 4 биту, але заборона верхній сторо-
не відображається об'єкта виходити за задані межі.
6-й біт (dmLimitHiX) - аналогічно 4 биту, але заборона правій стороні
відображатиметься об'єкта виходити за задані межі.
7-й біт (dmLimitHiY) - аналогічно 4 биту, але заборона нижньому боці
відображатиметься об'єкта виходити за задані межі.
Решта біти параметра DragMode НЕ іспользуются.Для одновремено-
ного завдання обмежень на переміщення у всіх напрямках можна вико-
пользовать константу dmLimitAll = $ FO, що встановлює в одиницю ритми з
4 по 7.
Прапори зміни размеров.Параметр GrowMode розміром в один байт
задає властивості відображатиметься об'єкта при спробі зміни розмірів
його власника за допомогою миші або клавіш напрямку.
0-й біт (gfGrowLoX) - ліва сторона відображатиметься об'єкта залишається на
одному і т?? м же відстані від правого боку його власника при
зміну розмірів власника.
1-й біт (gfGrowLoY) - верхня сторона відображатиметься об'єкта залишається
на одній і тій же відстані від правого боку його власника
при зміні розмірів власника.
2-й біт (gfGrowHiX) - права сторона відображатиметься об'єкта залишається на
одному і тому ж відстані від правого боку його власника при
зміну розмірів власника.
3-й біт (gfGrowHiY) - нижня сторона відображатиметься об'єкта залишається на
одному і тому ж відстані від нижньої сторони його власника при
зміну розмірів власника.
4-й біт (gfGrowRel) - відображається об'єкт змінює свої розміри про-
порціонально розмірами владельца.Такой режим може зажадати-
ся при відображенні вікна у разі зміни режиму адаптера з
25 рядків на 43/50 рядків і навпаки.
Решта біти параметра GrowMode не використовуються Для одновремено-
ної фіксації сторін відображатиметься об'єкта щодо розмірів його
власника можна використовувати константу gfGrowAll = $ OF, що встановлює
в одиницю біти з 0 по 3.
Прапори обробки собитій.Параметр EventMask розміром в один голос
визначає, які події може обробляти даний відображається об'єк-
ект.
Прапори состоянія.Параметр State розміром в один голос визначає
поточний стан даного відображатиметься об'екта.Как правило, зміна
цього параметра відбувається автоматично в процесі виконання прог-
Рамі (наприклад, виділений стан об'єкта), і не слід без осо-
Бих причин змінювати його в программе.Еслі ж все-таки буде потрібно вироб-
вести ті чи інші зміни, їх необхідно проводити за допомогою соот-
відповідне методів, спеціально для цього призначених.
Окремі біти параметра мають таке значення:
0-й біт (sfVisibl) - об'єкт може бути бачимо в полі свого володів-
ца.Еслі цей прапор встановлений (такий стан задається авто-
автоматично під час створення об'єкта), об'єкт буде бачимо повністю
або частково, якщо тільки він не закривається іншими відображаючи-
емимі об'єктами, а його власник сам видно на кране.Для заду-
ня цього прапора використовується метод Show:
procedure tView.Show;
Для скидання - метод Hide:
procedure tView.Hide;
Щоб визначити, чи видно насправді об'єкт, можна вос-
користуватися методом Exposed:
function tView.Exposed: Boolean;
де результат - True, якщо будь-яка частина об'єкта видно на
екрані.
1-й біт (sfCursorVis) - курсор об'єкта бачимо в поле об'екта.У некот-
яких відображаються об'єктів курсор задається видимим (наприклад, у
рядка введення), в інших - невидимим (наприклад, у статичної-
го тексту). Щоб змінити заданий стан і зробити курсор
видимим, варто скористатися методом ShowCursor:
procedure tView.ShowCursor;
щоб зробити його невидимим, використовується метод HideCursor:
procedure tView.HideCursor;
2-й біт (sfCursorIns) - збільшений розмір курсора.Для завдання курсору
збільшеного розміру скористаємося методом BlockCursor:
procedure tView.BlockCursor;
для завдання нормального розміру курсору (такий розмір задається
автоматично під час створення об'єкта) використовується метод
NormalCursor:
procedure tView.NormalCursor;
3-й біт (sfShadow) - об'єкт має тень.Прі створення одних об'єктів
(наприклад, вікон) задається тінь, у інших об'єктів (наприклад,
списків) тінь не задается.Еслі потрібно змінити заданий
стан цього прапора, варто скористатися універсальним
методом SetState:
procedure tView.SetState (AState: Word; Enable: Boolean); virtual;
де AState - прапор, який слід ізменітьЖ
Enable = True, якщо прапор слід встановити, і False, якщо
скинути.
За допомогою цього методу можна змінити будь-які прапори стану,
але при кожному зверненні до нього можна змінити тільки один
прапор.
4-й біт (sfActiv) - об'єкт є або активним вікном (вікном, з ко-
менту, котрим відбувається в даний час робота в програмі), або
піделементи активного окна.Как правило, цей прапор автомати-
но змінює своє значення в процесі роботи програми і вимірюв-
няти його в програмі практично не потрібно.
5-й біт (sfSelected) - об'єкт є виділеним в группе.В кожної
групі може бути тільки один виділений об'ект.Как і попередньої-
щий прапор, стан цього прапора змінюється автоматично в
процесі роботи програми, і зазвичай не виникає необхідності
примусової зміни його стану (змінити його також
можна за допомогою методу SetState).
6-й біт (sfFocused) - об'єкт є сфокусованим, т.е.является
виділеним в групі, і всі його власники також є виокрем-
леннимі.Сфокусірованний об'єкт - то той що відображається об'єкт,
з яким в даний час відбувається робота (наприклад,
конкретний редактор тексту, коли Ви відкрито кілька
редакторів).
7-й біт (sfDragging) - об'єкт знаходиться в режимі переміщення або вимірюв-
вання своїх розмірів або за допомогою клавіш напряму, або з
допомогою миші.Обично цей прапор використовується біля вікон і встановлюється
ється біля вікна при переході його в такий режим, а скидається
при виході з цього режіма.Прінудітельное зміна прапора віз-
можна за допомогою методу SetState.
8-й біт (sfDisabled) - об'єкт є "забороненим", тобто не реагую-
ющім ні на які воздействія.Задать цей прапор можна також за
допомогою методу SetState.
9-й біт (sfModal) - об'єкт є модальним.Етот прапор характерний для
вікон і встановлюється, якщо вікно знаходиться в режимі модальному
(використання методу ExecView або ExecuteDialog). Примусово
змінювати цей прапор не слід.
10-й біт (sfExposed) - об'єкт має в якості остаточного володів-
ца об'єкт tApplication, тобто має можливість відбиватися
на екрані (не плутати з прапором ofVisible). Примусово вимірюв-
няти прапор не слід.
Решта біти параметра State не використовуються.
Контекстна помощь.Етот параметр (HelpCtx) являє собою
число типу Word, який задає значення параметра контекстної допомоги
у випадку, якщо відображається об'єкт є сфокусірованним.Етот пара-
метр використовується в довідковій системі та в системі строк состоянія.Ес-
Чи контекстна допомога не потрібна, цей параметр слід задати рівним
нулю (константа hcNoContex). Це ж значення приймає параметр і при
створення об'єкта.
Наступний відображається елемент.Етот параметр (Next) містить ука-
затель на наступний об'єкт у групі, в яку входить даний об'єк-
ект.Параметр встановлюється автоматично при включенні об'єкта в
группу.Прінудітельно міняти значення цього параметра не слід.
Власник об'екта.Параметр (Owner) являє собою вказівник на
власника об'єкта - групу, в якій розташований даний об'ект.Пара-
метр встановлюється автоматично при розміщенні об'єкта в групі -
зазвичай за допомогою методу Insert об'єкту tGroup чи іншого методу,
що включає в себе метод Insert, і змінювати його примусово не сле-
дме.
Об'єкт tView володіє 67 методами плюс 1 метод, успадкований від
об'єкта tObject.Многіе з цих методів є віртуальними і переоп-
ределяются для потомков.Все методи можна умовно розбити на кілька
груп.
До першої групи можна віднести методи, за допомогою яких створюється
або знищується об'ект.Здесь слід відзначити два конструктора-Init,
за допомогою якого ініціалізується новий об'єкт, і Load, за допомогою
якого об'єкт завантажується з потоку, а також деструктор Done, що виконують-
няющій дії, зворотні діям конструктора Init.
До другої, найчисленнішої групи, можна віднести методи, за
допомогою яких або задаються, або визначаються поточні параметри
об'єкта (завдання і одержання зазначених вище параметрів).
До третьої групи можна віднести методи, що дозволяють помістити об'єк-
ект до групи, відобразити його на екрані, видалити з групи, видалити з
екрану.
До четвертої групи відносяться методи обробки подій, найбільш
часто використовуються з яких є метод HandlEvent, обробляю-
щий поточне подія.
Нарешті, до п'ятої групи віднесемо всі інші методи, що виконують
різноманітні додаткові дії (наприклад, отримання палітри
квітів для об'єкту, дозвіл і заборона виконання команд і т.д.)
Група (tGroup). Z-порядок
У загальному випадку відображається об'єкт може мати досить складну
структуру і включати в себе інші видимі елементи в якості своїх
поделементов.Еті піделементи, у свою чергу, можуть включати в себе
інші піделементи і т.д.
Сукупність об'єднаних відображаються об'єктів являє со-
бій групу (тип tGroup) і може розглядатися як щось єдине,
призначене для використання в программе.Так само як і об'єкт
tView, об'єкт tGroup є абстрактним об'єктом і не може мати
конкретні зразки у програмі, проте є родоначальником цілого
ряду реальних об'єктів (в першу чергу різних вікон) і визначає
основні властивості таких об'єктів як якогось целого.Сам об'єкт tGroup
є нащадком об'єкта tView і успадковує або перевизначають його па-
раметри і методи.
Будь-який об'єкт типу tGroup являє собою основний елемент
групи (наприклад, діалогове вікно), званий власником елементів
групи, в який включено та або інша кількість піделементи (наприклад
заходів, різні елементи керування діалогового вікна). Параметри, Насл-
дмемо групою від об'єкта tView, відносяться до основного об'єкта групи
- Власникові групи; окремі піделементи, які також є нащадками
об'єкта tView, володіють своїми характеристиками, часто не збігаються
з характеристиками їх власника.
На додаток до параметрів tView об'єкт tGroup має ряд власної
них параметрів, найбільш важливими і часто використовуваними з яких є при-
ляють два.Первий Last параметр, який вказує на останній піделементи
групи (фактично він є першим включеним до групи поделемен-
тов). Другим є параметр Current, який вказує на поточний виділений-
ний поделемент.Еслі група не має жодного піделементи, ці два па-
раметра рівні nil.
Основний елемент групи ініціалізується конструктором Init:
constructor tGroup.Init (var Bounds: tRect);
де Bounds - розміри об'єкта.
Якщо після ініціалізації група поміщається в іншу групу, уста-
встановлюються відповідні значення параметрів Next та Owner.
Будь-який піделементи групи повинен бути включений у цю групу з по-
міццю методу Insert:
procedure tGroup.Insert (P: pView);
де P - розташовуваний об'єкт, або іншого методу, що включає в себе ме-
тод Insert і може бути виключений з неї за допомогою методу Delete:
procedure tGroup.Delete (P: pView);
де P - виключає об'єкт, або будь-якого іншого методу, включающе-
го в себе метод Delete.
Послідовність включення піделементи до групи дуже важлива,
тому що від неї залежить порядок роботи з поделементамі.Следует починати
розташування піделементи з лівої верхньої частини основного елемента і
далі йти вправо і вниз.
Включені до групи піделементи утворюють так званий Z-поря-
док, і серед них можна виділити перший, останній і проміжні еле-
менти.
?????????????????????????????????????< br />
? Основний елемент (власник)?
?????????????????????????????????????< br />
?
?????????????????????????????????????< br />
? Останній елемент (Last) ?????????????????< br />
????????????????????????????????????? ?
?
????????????????????????????????????? ?
? Передостанній елемент? ?
????????????????????????????????????? ?
? ?
... ?
?
? ?
????????????????????????????????????? ?
? Другий елемент? ?
????????????????????????????????????? ?
?
????????????????????????????????????? ?
? Перший елемент? ?
????????????????????????????????????? ?
? ?
? ?
????????????????????????????????????< br />
Рис. 1. Структура групи
У кожного відображуваного об'єкта є поле Next, яке вказує на
Наступне піделементи группи.Поле Next останнього піделементи вказує
на попередній піделементи, поле Next попереднього піделементи вказує
на його попередній піделементи і т.д.У перший піделементи це поле ука-
викликають на останній піделементи группи.Такім чином, всі піделементи
групи утворюють циклічну структуру.У кожного піделементи групи з-
ле Owner (власник) вказує на основний елемент групи.
Поля, що вказує на попередній піделементи в групі у відображає-
мого об'єкта немає, проте у нього є метод Prev, який формує
вказівник на такий попередній поделемент.Етот метод дасть покажчик на
перший піделементи, якщо визначається попередній піделементи останнього
піделементи.
Оформлення програми, що використовує засоби Turbo Vision.
Об'єкти tProgram І tApplication
У Turbo Vision є два об'єкти - tProgram і tApplication, на
основі яких можна створити інтерактивну програму.
Об'єкт tProgram є основою створюваної програми і включає
спільні дії, які виконуються практично в будь-інтерактивної
программе.В першу чергу це обробка надходять собитій.tProgram
являє собою відображений об'єкт, який займає все поле екрана.Он
є безпосереднім нащадком об'єкта tGroup і має всі його
свойства.В Зокрема, це дозволяє в поле екрану розмістити будь-які
відображаються об'екти.В свою чергу, цей об'єкт має свої характер-
ные властивості, які дозволяють створити програму як щось ціле.
Ініціалізується об'єкт tProgram конструктором Init:
constructor tProgram.Init;
Після ініціалізації встановлюються значення парамет-
ров.ScreenWidth і ScreenHeight - параметри модуля Drivers, що містять
розміри екрана в текстовому режіме.Параметр DeskTop (модуль App) - ука-
затель на робочу область программи.Указатель на створений об'єкт
tProgram поміщається в змінну Application (модуль App).
Важливим методом об'єкта tProgram є метод Run:
procedure tProgram.Run; virtual;
що представляє собою цикл обробки подій і виконує, таким обра-
зом, основні дії, пов'язані з роботою програми.
Об'єкт tProgram дозволяє розмістити в полі екрану будь-які відобра-
жаемие об'екти.Іх можна поміщати в поле екрану довільним чином,
проте прийнята наступна система їх розташування: у верхній частині
екрану розміщується рядок меню (тип tMenuBar або його нащадок), в ниж-
ній частині екрана розміщується рядок стану (тип tStatusLine або його
нащадок), інша частина екрану віддається під робочу область (тип
DeskTop або його нащадок). Ці три об'єкти (tMenuBar, tStatusLine і
tDeskTop) також є відображуваними об'єктами, причому об'єкт
tDeskTop є до того ж нащадком об'єкта tGoup.
Об'єкти цих типів розміщуються на екрані автоматично при ініц-
алізації програми методом Init.Для розміщення меню, рядка стану
і робочої області викликаються методи InitMenuBar, InitDeskTop і
InitStatusLine.Методи InitMenuBar і InitStatusLine перевизначаються,
метод ж InitDeskTop звичайно не міняється (його слід нехтувати,
якщо у програми немає меню або рядка стану, з тим, щоб уівідповідності-
твующім чином змінити його розміри).
Робоча область ініціалізується конструктором Init:
constructor tDeskTop.Init ((var Bounds: tRect);
де Bounds - розміри робочої області.
Об'єкт tApplication є безпосереднім нащадком об'єкта
tProgram і має всі його свойства.Кроме цього, він призначений для
створення оболонки програми, що включає систему управління пам'яттю,
відеосистему, систему обробки подій і т.д., які можуть бути
ініціалізований за допомогою конструктора Init цього об'єкту:
constructor tApplication.Init;
а ліквідовані за допомогою деструктора Done:
destructor tApplication.Done; virtual;
При ініціалізації цього об'єкта його параметри приймають ті ж
значення, що й у його предка tProgram.
Сформована на основі об'єкта tApplication програма під
виконує послідовно три операції: ініціалізацію програми, про-
работке подій і завершення роботи програми.
Ініціалізація програми, якщо не потрібно яких-небудь спеціальних
додаткових дій, являє собою просте звернення до конс-
труктору Init об'єкта tApplication (або його нащадка), який ініціати-
лізує оболонку програми, після чого звертається до конструктора об'єк-
єкта tProgram, який, у свою чергу, виконує дії, пов'язані
з ініціалізацією програми як такої, встановлюючи вихідні значення
її параметрів і розміщуючи на екрані меню, рядок стану і робочу
область.
Обробка подій здійснюється методом Run об'єкта tProgram
(цей метод доступний і об'єкту tApplication або його нащадку).
Завершення роботи програми виконує деструктор Done.
Зазвичай тіло будь-якої програми і складається з обігу до цих трьох
методів.
СТРУКТУРА відображаються об'єкти ПРОГРАМИ
Все що відображені об'єкти утворюють деревоподібну структуру, коренем
якої є сама програма - нащадок об'єкта tApplication (наприклад
ме??, Рис. 2).
????????????????????????< br />
????????????????????????< br />
? Програма?
????????????????????????< br />
?
??????????????????????????????????????????????????
? ? ?
??????????????????? ???????????????????????? ???????????????????< br />
? Меню? ???????????????????????? ? Рядок стану?
??????????????????? ? Робоча область? ???????????????????< br />
????????????????????????< br />
?
???????????????????????????< br />
? ?
??????????????????? ???????????????????????< br />
? Вікно? ???????????????????????< br />
??????????????????? ? Діалогове вікно?
? ???????????????????????< br />
????????????????? ?
? ? ?????????????????< br />
? ? ? ? ?
???????????? ???????????? ??????????????????????????????????< br />
? Рамка? ? Кнопка? ? Рамка ???????????????????????< br />
???????????? ???????????? ?????????????? Рядок введення?
??????????????????????< br />
???????????????< br />
? ?
???????????? ??????????????< br />
? Кнопка? ? Рядок введення?
???????????? ??????????????< br />
Рис.2 Приклад структури відображаються об'єктів програми
Тут основним кольорам об'єктом є програма - нащадок
tApplication.Он є групою, до якої входять меню (нащадок
tMenuBar), робоча область (тип tDeskTop) та рядок стану (нащадок
tStatusLine). Робоча область, у свою чергу, є групою, до ко-
торую входять вікно і діалогове окно.Окно і діалогове вікно також був-
ются групами, що включають різні піделементи (рамки, рядки введення,
кнопки).
Кожен відображається об'єкт може бути в одному з двох станів -
пасивному і виделенном.На рис. виділені об'єкти позначені подвійний
верхній чертой.В кожній групі може бути тільки один виділений об'єк-
ект (або ні одного, якщо сама група не є виділеним об'єктивним
том). Покажчик на виділений елемент знаходиться у змінній Current
об'єкта-группи.Еслі якийсь об'єкт групи стає виділеним, пре-
дидущій виділений об'єкт цієї групи стає пасивним.
Зробити виділеним попередній або наступний об'єкт групи можна
за допомогою методу SelectNext:
procedure tGroup.SelectNext (Forwards: Boolean);
де Forwards - параметр, що визначає, який об'єкт слід виділити:
якщо Forwards = True, виділяється наступний в Z-порядку об'єкт групи.
Цей метод не перевіряє правильність введених даних в поточному
виділеному об'єкті і завжди виділяє інший елемент.Еслі необхідно
перевіряти правильність введених даних, слід замість цього методу
використовувати метод FocusNext:
function tGroup.FocusNext (Forwards: Boolean): Boolean;
де Forwards - той же параметр; результат - True, якщо відбулося пе-
реключеніе на інший об'єкт, і False - інакше.
Виділений об'єкт - це той об'єкт, з яким в даний час
відбувається работа.Так, в розглянутому прикладі виділеної є
робоча область - з вікнами, розташованими в ній, користувач може
взаімодействовать.Меню та рядок стану в цьому випадку є пас-
сівнимі.Еслі виділити меню, то робоча область стає пасивною, і
вже не буде можливості працювати з вікнами робочої області до тих пір,
поки робоча область знову не стане виділеною.
Виділені об'єкти утворюють ланцюжок виділених об'єктів (у нашому
прикладі: програма - робоча область - діалогове вікно - рядок вво-
да). Останній об'єкт такий ланцюжка називається сфокусованим об'єктивним
том.В нашому п