Велике зміна – перехід до багатодокументним формам C + + Builder

Я хочу розповісти вам сумну, але абсолютно правдиву історію зі свого програмістського минулого Якось кілька років тому працював я в невеликій компанії, що розробляє програмні продукти Ми отримали завдання конвертувати вже написану програму під MS-DOS в додаток під Windows 31, використовуючи для цього Visual C + + і MFC Після переговорів з менеджером з продажу і клієнтами нам було велено розробляти програму, використовуючи однодокументний (Single Document Interface, SDI) каркас І я, і інші програмісти нашої групи кілька разів запитували у них, чи впевнені вони в тому, чого хочуть, але вони твердо стояли на своєму Складалося відчуття, що людина, який проектував програму, ніколи не працював в середовищі Windows і в принципі не знайомий з концепцією багатодокументного інтерфейсу У результаті ми провели шість місяців, розробляючи дійсно непоганий програмний продукт на основі однодокументним моделі

Але ось шість місяців закінчилися, і продукт нарешті був готовий до системного тестування Було запрошено кілька людей з головного управління, в якому чули хороші відгуки про нашу програму Напевно, ви можете вгадати кінець історії Один із старших менеджерів, який працював-таки в Windows (тобто просто використовував Word і Excel), глянув на інтерфейс нашої програми і сказав: «Непогано Зробіть-ка його багатодокументним додатком »

Приблизно тиждень ми намагалися переробити вже готове додаток в багатодокументне Проблема полягала в тому, що нам треба було змінити всі імена класів Всі описи одиничного документа теж повинні були бути змінені Зрештою за допомогою майстра додатків Visual C + + було створено абсолютно нове багатодокументне застосування, в яке по шматочках були скопійовані підходящі рядки коду

Ви запитаєте – в чому ж мораль Що ви повинні краще клієнта знати, що йому треба Можливо Але тут є одна невелика проблема, повязана з тим, що зазвичай саме клієнти (або ваші шефи) платять за роботу, і тому вони маючи на увазі ють, що все робиться так, як їм хочеться Якщо вони передумали, ваша проблема переробити все заново, а не їх

До чого я хилю Ну, давайте припустимо, що ваш бос після демонстрації чудесного програмного продукту Scribble викликає вас до себе і заявляє: «Відмінна робота Зробіть тепер вашу програму багатодокументна, щоб можна було малювати відразу в декількох вікнах І щоб зміна в одному відбивалося і в інших » Якщо б ви використовували старий продукт типу Borland C + + або Visual C + +, вам би довелося прийти до того ж рішенню, що і моїй групі розробників колись: переписати все заново, а потім вставити відповідні

шматки коду зі старої версії На щастя, ви займаєтеся розробкою не в Visual C + + і MFC, і не в Borland C + + і OWL Ви маєте щастя використовувати CBuilder

У наступному прикладі ми збираємося переробити Scribble з одного-единствен ного вікна, як зараз, в багатодокументне застосування Ви будете приємно здивовані тим, як просто відбудеться це зміна, особливо якщо у вас є сумний досвід роботи з іншими системами

Першим важливим аспектом, на який слід звернути увагу, переходячи до багатодокументних застосувань на CBuilder, є відсутність принципиаль ної різниці між вікном багатодокументного програми та звичайним вікном Вікна багатодокументна додатків бувають двох типів – батьківського (parent) та дочірнього (children) У кожному багатодокументна додатку, як правило, існує одне батьківське вікно, яке є «рамкою», що обмежує розмір програми на екрані, в полі якої розташовуються дочірні вікна

У кожному такому додатку може бути (і звичайно є) багато дочірніх форм, які можуть бути як одного, так і різних типів Цілком може існувати, наприклад, багатодокументне додаток, в якому буде пять дочірніх вікон, і всі різних типів форм Я, чесно кажучи, не дуже розумію, навіщо вам може таке знадобитися, але якщо все-таки ви зважитеся на що-небудь подібне, CBuilder дозволить вам здійснити задумане

Рис 26 Багатодокументне застосування Scribble

На рис 26 показано додаток, який ми будемо розробляти У даному випадку вікном-

«Рамкою» буде головне вікно програми, що містить головне меню Дочірніми вікнами будуть вікна Scribble З точки зору розробки дизайну, немає майже що жодної різниці між дочірнім вікном Scribble і окремо взятим головним вікном додатка Scribble, яке ми використовували до цих пір

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

Перше, що треба зробити для перетворення програми з одно-в многодокумент ве, це зрозуміти, в чому ж відмінність батьківської або дочірньої форми многодокумен тного додатки від

нормальної форми Відмінність перебуває в одному-єдиному властивості форми, а саме у властивості Form Style (Стиль форми) Для більшості форм у ваших додатках властивість Form Style має значення fsNormal, Яке позначає, що форма є простим вікном, яке ми можемо розглядати як певне нами ж певне діалогове вікно Для форм багатодокументного додатки властивість Form Style встановлюється в fsMDIForm для батьківської форми або в fsMDIChild для дочірніх форм

Якщо форма має тип fsMDIForm, То автоматично вона створюється з одним дочірнім вікном, яке буде першим зразком дочірньої форми в проекті Форма стилю fsMDIChild  буде створена всередині кордонів батьківської форми програми

Першим кроком на шляху перетворення нашого застосування Scribble в багатодокументне стане додавання в додаток нової форми, яка буде єдиним батьком для всього програми Отже, додайте нову форму і встановіть її властивість Form Style  вfsMDIForm Додайте в нову форму меню, а в нього додайте два нові пункти з назвами Файл і Вигляд У пункт меню Файл додайте два підпункти – Новий і Вихід У пункт меню Вид додайте один-єдиний підпункт – Оновити все

Команда Файл – Новий використовуватиметься для створення в додатку нових дочірніх форм Команда Файл – Вихід передбачена для «чистого» виходу з програми І нарешті, команда Вид – Оновити все буде перемальовувати всі дочірні форми так, що у всіх у них поля малювання будуть відображати одну і ту ж картинку

Виберіть форму для малювання з програми Scribble і змініть її стиль на fsMDIChild Це буде основна форма перегляду в нашому додатку Незважаючи на те що нам доведеться зробити кілька змін для коректного співіснування нашої форми з іншими формами, основна частина коду для вікна Scribble залишиться незмінною Отже, все, що потрібно для перетворення форми з незалежною в дочірню, – це змінити властивість Form Style

Для подальшої роботи з формами ми повернемося до коду прикладу Scribble2, оскільки нам не треба, щоб дочірні вікна мали свої власні меню (на екрані це виглядало б огидно) Зовсім не складно було б додати в ці форми другого обробник, але, в цілях економії часу, наш приклад буде дозволяти тільки малювання ліній за допомогою миші, але не растрових малюнків, як в останньому прикладі

Наступним кроком треба переконатися, що головна форма створюється перший в порядку автоматичного створення форм, здійснюваному CBuilder Для зміни порядку створення форм відкрийте вікно Project Manager (View – Project Manager) і виберіть у ньому кнопку Options (опції) У списку автоматично створюються форм клацніть на назві Form2 і, не відпускаючи кнопку миші, перетягніть її на самий верх списку, перед назвою Form1 Ось і все Коли ви запустите програму, форма Form2 (Головна форма багатодокументного додатки) буде створена перша, а дочірні форми (Form1, Форма малювання з прикладу Scribble) створюватимуться після неї, вже як дочірні форми єдиної батьківської

Кожна форма в системі повинна знати про решту формах, відповідно, нам треба повідомити їм один про одного Для цього виберіть головну форму (Form2) І команду File – Include Unit Hdr Ви побачите список, в якому знаходиться назва форми Form1 Виберіть його і клацніть кнопку OK Тепер повторіть все для форми Form1 і включіть заголовок форми Form2

Коли ви включаєте заголовок іншої форми, ви автоматично отримуєте можливість використовувати обєкти, в ньому певні, у своїй формі Якщо ви поглянете в кінець заголовного файлу для форми Form2 (Unit2h), ви побачите рядок наступного змісту:

extern TForm2 *Form2

Цей рядок дозволяє вам використовувати обєкт Form2 в інших формах чи обєктах, просто включивши заголовний файл Цей витончений штрих, доданий розробниками системи CBuilder, зайвий раз показує прагнення їх максимально полегшити життя програміста

Отже, у нас є батьківська і дочірня форми багатодокументного додатки Тепер можна скомпілювати і запустити додаток, і ви побачите головну форму Дочірнє вікно, що знаходиться всередині кордонів головного, – Це форма малювання Scribble, в якій можна, натиснувши ліву кнопку миші і переміщуючи мишу по полю форми, малювати веселі картинки Не вірите – спробуйте самі

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*