Практическая работа с компилятором С++Builder 6
Практическая работа с компилятором С++Builder 6
Содержание
1. Ключевые положения объектно-ориентированного программирования.
2. Расширения файлов, принятые в среде разработки C++Builder 6.
3. Алгоритм создания программного кода на C++.
4. Создание и сохранение нового проекта.
5. Открытие и использование менеджера проектов.
6. Планирование работ - список to-do list.
7. Задание информации о версии программы.
8. Работа с формами.
1.
2.
3.
4.
9. Инструментальные средства поддержки разработки кода.
1.
2.
3.
4.
10. Отладка приложений.
1.
2.
3.
4.
5.
11. Разработка графического интерфейса пользователя.
1.
Приложение № 1 "Палитра компонентов"
1. Ключевые положения объектно-ориентированного программирования
В идеальном случае подход к разработке программы делится на три части: вначале получить ясное понимание задачи, потом выделить ключевые идеи, входящие в ее решение, и наконец выразить решение в виде программы.
Объект - это совокупность данных и способов работы с ними. Инкапсуляция - это механизм объединения и защиты данных и кода. Объект - это то, что поддерживает инкапсуляцию. Объединение кода и данных представляет собой "черный" ящик. Объект характеризуется свойствами. Свойства объекта - это данные, методы обра-щения с данными объекта, события, на которые объект может реагировать. Данные объекта представляются полями или записями. Внутри объекта коды и данные могут быть закрытыми (private) для этого объекта или от-крытыми (public). Источниками событий могут быть действия пользователя или результат работы самих объ-ектов. К числу действий пользователя можно отнести: перемещение курсора мыши, нажатие кнопок мыши или клавиш клавиатуры. Обработчик событий отлавливает прерывания осуществляемых действий пользователя или работы других объектов и согласно свойств и методов, определенных у объекта, выполняет запрограммированное событие. Если событие произошло, то выводится соответствующее сообщение.
В C++Builder все объекты компонентов размещаются в объектах - формах. Для каждой формы, которую вы проектируете в своем приложении, C++Builder создает отдельный модуль. Именно в модулях и осуществляется программирование задачи. В обработчиках событий объектов - форм и компонентов, вы помещаете все свои алгоритмы. В основном они сводятся к обработке информации, содержащейся в свойствах одних объектов, и задании по результатам обработки свойств других объектов. При этом вы постоянно обращаетесь к методам различных объектов.
1. Структура программы является динамическим образованием, меняющемся в процессе работы программы.
1.1. С целью организации динамического распределения памяти во все объекты заложены методы их создания - Конструкторы и уничтожения - Деструкторы.
1.2. Включать объекты в свою программу можно двумя способами:
- вручную включать в нее соответствующие операторы (это приходится делать не очень часто) или
- путем визуального программирования, используя заготовки - компоненты.
1.2.1. Типы объектов и, в частности, компонентов библиотек C++Builder оформляются в виде классов. Классы - это типы, определяемые пользователем. В классах описываются свойства объекта, его методы и события, на которые он может реагировать.
1.3. Существует возможность создавать модули, не привязанные к конкретным формам. Чтобы создать в Вашем проекте новый модуль, не связанный с какой-либо формой, надо выполнить команду File => New => Other и в открывшемся окне New Items на странице New щелкнуть на пиктограмму Unit.
1.3.1. Полезно создавать в приложении модуль, не связанный с формой, в который помещать описание типов данных, констант, переменных, функций, используемых другими модулями.
2. В С++Builder можно разрабатывать прикладные программы двух видов - автономные выполняемые файлы *.exe и программы с поддержкой пакетов (packages) времени выполнения.
2.1. Во время отладки надо включать поддержку пакетов времени выполнения:
Project => Options => страница Packages => (1), (2):
(1) включить индикатор Build with runtime packages,
(2) включение индикатора Default обеспечит статус установки по умолчанию для всех ваших будущих проектов.
2.2. При заключительной компиляции надо выключить опцию поддержки пакетов, если Вы намерены передавать пользователям автономный выполняемый модуль.
3. С целью создания уникальных программ старайся придерживаться правила повторного использования кода.
2. Расширения файлов, принятые в среде разработки С++Builder 6
Таблица № 1.
Расширения файлов С++Builder 6.
П/п | Расширение | Краткое описание файла с расширением |
1 | *.cpp | Файл головной функции WinMain |
2 | *.bpr | Файл установок опций проекта |
3 | *.res | Файл, содержащий ресурсы проекта |
4 | *.cpp | Файл реализации модуля |
5 | *.h | Заголовочный файл модуля |
6 | *.dfm | Файл формы, которой соотвествует файл модуля *.cpp |
7 | *.hpp | Заголовочный файл компонента |
8 | *.bpg | Файл группы проектов |
9 | *.bpl | Файл самого проекта (файл пакета) |
10 | *.bpk | Файл, определяющий компиляцию и компоновку пакета (файл пакета) |
11 | *.dsk | Файл рабочего стола проекта (файл создается, если включена опция оболочки Autosave Options / Project desktop |
12 | *.~bp | Файл резервной копии |
13 | *.~df | Файл резервной копии |
14 | *.~cp | Файл резервной копии |
15 | *.~h | Файл резервной копии |
16 | *.exe | Исполняемый файл приложения |
17 | *.obj | Объектный файл модуля |
18 | *.dll | Динамически присоединяемая DLL |
19 | *.tds | Файл таблицы символов (для отладки) |
20 | *.il? | Файлы выборочной компоновки |
21 | *.hlp | Файлы справки |
22 | *.wmf | Файл изображения или графический файл |
23 | *.bmp | Файл изображения или графический файл |
24 | *.ico | Файл изображения или графический файл |
25 | *.todo | Файл со списком задач для конкретного проекта |
Важные добавления к таблице:
1. Расширения важнейших файлов: *.cpp, *.h, *.dfm, *.bpr, *.res.
3. Алгоритм создания программного кода на С++.
Конструирование многих программ логически можно разделить на три этапа:
(1) Этап инициализации, на котором происходит инициализация переменных программы.
(2) Этап обработки, на котором происходит ввод данных и соответствующая настройка переменных программы.
(3) Этап завершения программы, на котором происходит вычисление и вывод окончательных результатов.
В составе программного модуля выделяются:
(1) Главная функция.
(2) Заголовочные файлы. Стандартное расширение заголовочных файлов - .h.
(3) Файлы реализации. Стандартное расширение файлов реализации - .cpp.
1. В окне главного модуля *.cpp написать в комментарии написать имя файла с программой.
2. Написать комментарий, выражающий назначение программы /* назначение программы */ или //:
2.1. Комментарий в программном коде предназначен для облегчения восприятия программного кода. Комментарий можно разбить он не вызывает каких-либо действий. Синтаксис комментария в языках программирования выражается: (1), (2)
(1) в языке программирования Си : /* текст комментария */
(2) в языке программирования Си++: // текст комментария
(2.1) в языка программирования С++ допустима запись комментария в виде: /* текст комментария */
(3) ANSI-стандартом запрещено вкладывать комментарии друг в друга.
3. Включить в программный код с помощью директивы препроцессора #include (1) и / или (2) и/или (3):
(1) <:> - : стандартный заголовочный файл, т.е. файл стандартной библиотеки функций С++,
(2) ":" - : имя подключаемого файла из библиотеки функций пользователя, так называемые функции, определяемые программистом, т.е. заголовочный файл,
(3) IM - : идентификатор макроса
4. Объявить глобальные переменные с их типами, область действия которых будет область действия файла.
4.1. Написать комментарий, раскрывающий описание и назначение глобальных переменных.
5. Написать оператор (-ы) , определяющий прототип (-ы) для функции (-й) пользователя, располагающихся в файле головной функции main ( ), эти прототипы должны содержать: (1), (2), (3), (4)
(1) тип возвращаемого значения функции пользователя
(2) заголовок функции, который должен быть уникальным
(3) в круглых скобках список параметров с указанием типа возвращаемого параметра
(4) такой оператор, должен заканчиваться операцией "точка с запятой"
(5) после операции "точка с запятой" надо вставить комментарий с описанием назначения функции
5.1. Такой оператор включается после написания функции пользователя, имеющей также обязательный оператор return в своем теле, в файле головной программы. Старайтесь применять метод повторного использования кода.
6. Сформировать шаблон головной функции main ( ).
o Справочно: В написании тела программы могут возникнуть следующие типы ошибок: синтаксические, логические и/или фатальные. Определение функции имеет следующий формат: тип_возвращаемого_значения имя_функции (список_параметров, включающий тип_каждого_параметра)
{ объявления;
операторы;
}
o Справочно: Имя главной функции программного модуля определено как: (1) или (2)
(1) main - для консольных приложений (работающих с Win32);
(2) WinMain - для приложений Windows.
o Справочно: Тело программы строится из управляющих структур. Тело структуры представляет оператор, который может быть простым или составным. Приняты следующие способы соединения управляющих структур: вложение одной управляющей структуры в другую и следование управляющих структур одна за другой. Структур выбора:
Условной операции: ' ?:' ;
Структура единичного выбора: if (с одним входом и одним выходом);
Структура с двойным выбором: if / else ;
Структура со множественным выбором: switch.
Структур повторения:
Цикл: while
Цикл: do / while
Цикл: for
Выделяют следующие типы повторения:
Определенное повторение - это повторение, управляемое счетчиком.
Неопределенное повторение - это повторение, управляемое контрольным значением.
Последовательных структур
7. 6.1. Определить спецификацию главной функции main ( ): (1) или (2)
(1) (void) - это значит, что функция не возвращает никакого значения - пример, void F1(void);
(2) или ( ) - это значит, что если тип возвращаемого значения не указан, то он по умолчанию считается равным int - пример, void F1( ).
(3) Первая из приведенных записей предпочтительнее, так как делает программу более переносимой.
6.1.1. При необходимости указать тип возвращаемых значений переменных в функции main (тип1, тип2, :).
6.2. Поставить скобки "{", "}", означающие начало и конец тела головной функции main ( ).
6.2.1. В теле главной функции (и не только главной функции) допустимы следующие типы комментариев:
o Описывающие назначение переменных,
o Комментарии типа подсказки,
o Исключение из комментариев: сообщения об ошибках ввода данных.
6.3. В теле функции main ( ) {тело головной функции} объявить переменные области действия функции, а именно: (1), (2), (3), (4)
(1) перед типом переменной в случае необходимости указывается спецификатор класса памяти идентификатора
(1.1) Справочно: Каждая переменная характеризуется некоторым классом памяти, который определяет ее время жизни - период, в течение которого эта переменная существует в памяти. Спецификация класса памяти идентификатора определяет его класс памяти, область действия и пространство имен. Класс памяти, в частности, определяется местом объявления переменной. В C++Builder имеется четыре спецификации класса памяти:
o auto, registr - автоматический класс памяти с локальным временем жизни,
o extern, static - статический класс памяти с глобальным временем жизни.
(2) в случае необходимости после спецификатора класса памяти указывается модификатор const или volatile, которые сообщают компилятору об изменчивости или постоянстве определяемого объекта.
(2.1) Если переменная описана как const, то она недоступна в других модулях программы, ее нельзя изменять в других во время выполнения программы. Единственная возможность присвоить ей значение - это инициализация при определении. Объекту с модификатором const не только нельзя присваивать значения, но и для него запрещены операции инкремента (++) и декремента ( -- ). Указатель, определенный с модификатором const, нельзя изменять, однако может быть изменен объект, который им адресуется.
(2.2) Модификатор volatile отмечает, что в процессе выполнения программы значение объекта может изменяться в промежутке между явными обращениями к нему. Например, на объект может повлиять внешнее событие. Поэтому компилятор не должен помещать его в регистровую память и не должен делать никаких предположений о постоянстве объекта в те моменты, когда в про-грамме нет явных операций, изменяющих значение объекта.
(2.3) Диалекты языка С++ также включают следующие модификаторы:
o cdecl - для функций и переменных;
o pascal - для функций и переменных;
o interrupt - для функций обработки прерываний;
o near - для указателей, функций, переменных;
o far - для указателей, функций, переменных;
o huge - для указателей и функций.
Эти модификаторы предназначены для влияния на распределение памяти при размещении объектов и учета особенностей сегментной организации и адресации памяти в процессорах семейства 80х86.
(3) тип переменной (данных)
(3.1) Помните, что переменная может быть простая и вычисляемая. Поэтому для вычисляемых переменных используйте операцию приведения типов, чтобы программа корректно выполняла вычисления.
(3.2) Если программиста по каким -либо причинам не устраивает тот тип, который компилятор приписывает константе, то он может явным образом повлиять на его выбор. Для этого служат суффиксы, например, L, l (long), U, u (unsigned), которые ставятся перед типом переменной.
(4) идентификатор (имя) переменной
(4.1) Требования к идентификатору:
o Длина идентификатора должна быть больше или равна 31 символа;
o Особенности написания идентификаторов:
- Идентификатор не должен начинаться с цифры;
- Ключевые или зарезервированные слова Языка прогр. не применимы как идентификаторы;
- Идентификаторы нельзя разбивать.
o Виды идентификаторов в зависимости от регистра написания:
- в нижнем регистре,
- в верхнем регистре,
- начинающийся с заглавной буквы.
o Виды областей действия идентификатора:
- область действия функции,
- область действия файла,
- область действия блока, - область действия прототипа функции.
(5) комментарий, раскрывающий описание и / или назначение вводимых переменных 6.3.1. Возможна инициализация переменных при их объявлении. Инициализация переменных при их объявлении уменьшает время выполнения программы. Переменная, представляющая изображение фиксированного числового, строкового или символьного (литерного) значения называется константой (ли-тералом). Константы делятся на пять групп:
o целые (десятичные, восьмеричные, шестнадцатеричные);
o вещественные (с плавающей точкой);
o перечислимые;
o символьные (литерные);
o строковые (строки или литерные строки).
6.3.1.1. Инициализация переменных может быть произведена одним из следующих способов:
o Значением присваиваемым непосредственно;
o Значением присваиваемым по адресу.
6.3.1.2. В теле функции должны быть предусмотрены операторы, выдающие сообщения об ошибках ввода данных. Поэтому целесообразно вводить условие на проверку контрольного значения, которое используется в структурах повторения:
- Синонимы термина "контрольное значение": сигнальное значение, фиктивное значение или флаговое значение.
- Нельзя в качестве контрольного значения выбирать значение, которое является допустимым значением данных.
4. Создание и сохранение нового проекта.
Надо отвести для каждого проекта новый каталог.
Способы начинания нового проекта:
File => New => (1) - (6)
(1) Application
(2) CLX Application
(3) Data Module
(4) Form
(5) Frame
(6) Unit
File => New => Other => Окно New Items => соответствующие Вкладки Окна New Items: (1) - (11 ) (1) New:
- Control Panel Module
- Service
- Control Panel Application
- Resource DLL Wizard
- Service Application
- Web Server Application
- Project Group
- Application
- DLL Wizard
- Package
- Form
- Frame
- Data Module
- Unit
- Cpp File
- C File
- Header File
- Thread Object
- Text
- Component
- Library
- Console Wizard
- Bath File
- CLX Application
- CLX Form
- CLX Frame
- CLX Data Module
- CLX Thread Object
- XML Data Binding
- Report
(2) ActiveX:
(3) Multitier:
(4) Forms:
(5) Dialogs:
(6) Projects:
(7) Data Modules:
(8) Business:
(9) Web Documents:
(10) WebSnap:
(11) WebServices:
Соответствующая быстрая кнопка
После создания приложения с пустой формой, надо сразу сохранить его в нужном каталоге. И в течение работы надо почаще выполнять сохранение. Проект нужно сохранить под осмысленным именем. В С++Builder недопустимы одинаковые имена файлов модулей и файла проекта.
Способы сохранения проекта:
File => Save All
Соответствующая быстрая кнопка
Способы открытия проекта:
File => Open Project
File => Reopen
Соответствующая быстрая кнопка
Автооткрытие при загрузке последнего рабочего проекта устанавливается: Tools => Environment Options => страница Preferences => группа опций AutoSave Options => включить индикатор Project desktop
Открытие головного файла проекта: Project => View Source.
5. Открытие и использование менеджера проектов.
Project Manager (Менеджер проектов) - это инструмент управления группами проектов, например, проектами клиента и сервера; проектом, создающим библиотеку DLL, и проектом, использующим ее.
Открытие менеджера проектов: View => Project Manager: (1), (2), [(3)]
(1) New - добавление в группу нового проекта
(2) Remove - удаление выделенной "строки" (модуля или формы как объекта в менеджере проек-тов)
[(3)] При нажатии правой кнопки мыши => всплывающее меню: (1), (2), (3), (4):(N)
Open - открыть
Remove From Project - удалить из проекта
Save - сохранить
Save As - сохранить как
(N) :
Задание локальных опций компиляции:
Окно менеджера проектов => Выделить узел файла *.cpp или *.c => щелчок правой кнопкой мыши => Контекстное меню: (1), (2)
(1) раздел Edit Local Options:
Revert All - отказ от выбранных ранее опций
(2) раздел Change Override Color - изменение цвета выделения локальных опций
6. Планирование работ - список To-Do List.
*.todo - файл со списком задач для конкретного проекта.
" View => To Do list - просмотр списка задач текущего проекта
7. Задание информации о версии программы.
команда Project => Options => страница Version Info, опции "Include version information in project" которой: (1), (2)
(1) если выделена, то все окна только для чтения,
(2) если не выделена - для редактирования.
8. Работа с формами.
Основным элементом любого приложения является форма - контейнер, в котором размещаются другие визуальные и невизуальные компоненты. С точки зрения пользователя форма - это окно, в котором он работает с приложением. Каждой новой форме, видимой в приложении, соответствует свой модуль (unit), описывающий эту форму как класс и включающий, если необходимо, какие-то дополнительные константы, переменные, функции и процедуры.
Надо задавать уникальное имя формы в свойстве Name. О наступлении случая совпадения имен выдается следующее предупреждение: "The project already contains a form or module named Form 1", которое означает "Проект уже содержит форму или модуль с именем Form1".
8.1. Включение в проект новой формы.
8.1.1. Способы включения в проект новой формы:
File => New Form
Соответствующая быстрая кнопка
8.1.2. Способы включения в проект ранее разработанных форм:
Project => Add to Project
Соответствующая быстрая кнопка
Копирование соответствующих файлов из одного каталога в другой, т.е. файлов: *.cpp, *.h, *.dfm.
Выполнить команду File => Open и затем команду File => Save As, тогда С++Builder автоматически скопирует файлы, описывающие форму.
Добавление формы из ДЕПОЗИТАРИЯ: выполнить команду File => New => Other, в открывшемся окне New Items на страницах Form and Dialogs можно заимствовать ряд форм для своего проекта. Форма заимствования определяется тремя радиокнопками: (1), (2), (3)
(1) Copy - копировать
(2) Inherit - наследовать
(3) Use - использовать
В случае совпадения имен добавляемых файлов надо перейти в окно редактора кода добавляемого приложения и сохранить конфликтующий модуль командой File => Save As в каталоге "нового" приложения, дав ему новое имя. В случае включения формы способами 8.1.2. , форма становится общей для обоих приложений, изменение которой отразиться в обоих приложениях.
8.2. Просмотр форм и модулей без включения их в проект.
Потребность в просмотре возникает при работе над своим проектом в связи с желанием ознакомиться с примерами форм и модулей, близкими к задаче решаемой Вами в данный момент.
Для просмотра надо выполнить команду: File => Open => Выбрать файл модуля в Окне Редактора Кода => Скопировать через буфер обмена Clipboard какие-то операторы или компоненты в свои модули.
Для закрытия надо выполнить команду: На коде открытого модуля щелкнуть правой кнопкой мыши => Выполнить команду Close Page.
Аналогичным образом в окне Редактора Кода можно просматривать текстовые файлы и файлы HTML
8.3. Размещение компонентов на форме.
В Интегрированной Среде Разработки компоненты представлены пиктограммами.
8.3.1. Перенос компонентов со страниц библиотеки на форму.
(1) Открыть соответствующую страницу Палитры компонентов
(2) Найти на Странице компонентов соответствующий компонент
(3) Двойной щелчок на компоненте, чтобы он появился на активной форме
(3.1) Размещение на форме нескольких компонентов одного типа:
- Удерживая клавишу Shift, щелчок на пиктограмме компонента => щелчок на активной форме в месте, где должны появиться компоненты.
Удалить ошибочно перенесенный компонент на форму очень просто: выделите его и нажмите клавишу Delete.
При переносе компонента на форму надо сразу изменить его имя Name, принятое по умолчанию, на другое осмысленное имя.
Способы изменения визуальных параметров компонента:
- буксировка компонента в нужное место на форме,
- изменение размеров компонента на форме
8.3.2. Поиск компонента по его имени и страницы, на которой он расположен.
View => Component List => Откроется диалоговое окно Components, содержащее алфавитный список компонентов => В окне быстрого поиска по имени "Search by name " написать имя искомого компонента => Выделить искомый компонент: (1), (2), (3)
(1) F1 - справка по выделенному компоненту
(2) Для появления компонента на форме нажать кнопку Add to form или
(3) Для появления компонента на форме двойной щелчок мыши на выбранном компоненте.
8.3.3. Родители и владельцы компонентов Parent и Owner
Способы размещения компонентов на форме:
- непосредственно на форме;
- на панели группы компонентов
У каждого компонента есть родитель:
(1) Форма - тогда родителем и владельцем компонента является сама форма;
(2) Другой оконный компонент - тогда для компонента родителем становиться эта панель:
(2.1) А значит, дочерние компоненты будут расположены в Z-последовательности, которая определяет какой из них будет виден.
Родитель компонента указывается в Инспекторе Объектов в его (групповом?) свойстве Parent, которое раскрывается в таблице:
Тип компонента | Название свойства компонента в Object Inspector | Принимаемое значение свойством | Что отражает свойство компонента при соответствующем значении? |
Виз. К. | ParentFont | true(falce) | Наследование от родительского компонента атрибутов шрифта |
Виз. К. | ParentShowHint | true(falce) | Наследование от родительского компонента атрибута показа ярлычков |
Виз.О.К. | ParentCtl3D |
| Наследование от родительского компонента атрибута оформления |
Виз.К. | Left |
| Измерение в системе координат родительского компонента положения левого верхнего угла дочернего компонента |
Виз.К. | Anchors |
| Определение привязки дочерних компонентов к границам родительского компонента |
Виз.К. | Visible(видимый) | true(falce) | Установка невидимости не только видимости родительского компонента, но и всех его дочерних компонентов |
Виз.К. + | Enabled(доступный) | true(falce) | Установка значения свойства в родительском компоненте закрывает / открывает доступ к дочерним компонентам, т.е. пользователь не сможет нажимать кнопки и производить любые другие действия в пределах данного родительского компонента |
8.3.3.1. Многослойное размещение компонентов на форме
При помещении панелей друг на друга получается многослойное размещение компонентов на форме. Для переноса компонента с панели на панель используется Clipboard.
Схема переноса компонента через Clipboard, тогда компонент пренесется из Clipboard на новое место и обретет нового родителя - панель или форму:
(1) Выделить курсором переносимый компонент;
(2) Вырезать выделенный компонент в Clipboard следующими способами:
(2.1) Командой Edit => Cut или
(2.2) Горячей клавишей Ctrl-X.
(3) Щелчок на форме или панели, куда переносится компонент, сопровождается следующими действиями:
(3.1) Командой Edit => Paste или
(3.2) Горячей клавишей Ctrl-V.
Управление видимостью оконных компонентов: панелей, кнопок, окон редактирования, осуществляется щелкнув правой кнопкой мыши и выбором соответствующей команды:
(1) Edit => Bring To Front - перемещение выделенного оконного компонента на верх Z-последовательности,
(2) Edit => Send To Back - перемещение выделенного оконного компонента на самый низ Z-последовательности.
8.3.4. Поиск "пропавших" компонентов
Способы поиска "пропавших" компонентов:
(1) Инспектор Объектов => самый верхний выпадающий список => выбор по имени "пропавшего" компонента, тогда пропавший компонент будет отмечен маркером.
(2) Еще один способ найти компонент на форме - выделение его вершины в окне Object Tree-View, смотри раздел 8.3.5.
(3) Дополнительно смотри п. 8.3.3.1. : управление видимостью оконных компонентов.
8.3.5. Окно Object TreeView и страница диаграмм Редактора Кода
Object TreeView - дерево объектов для отображения всех визуальных и невизуальных компонентов приложения в аспекте связей этих компонентов.
Вызов окна Object TreeView выполняется командой View => Object TreeView, в котором можно перетаскиванием дочернего компонента менять родителя.
Связи между компонентами можно документировать в виде диаграммы:
- Окно Редактора Кода => Страница Diagram => (1), (2), (3):
(1) выпадающий список активной диаграммы и быстрые кнопки для создания, редактирования, удаления диаграммы;
(2) окно Name - имя диаграммы;
(3) окно Description - текстовое описание диаграммы.
Для создания диаграммы надо из окна Object TreeView перетащить в поле Диаграммы интересующие компоненты; автоматически появляются стрелки, показывающие заданные связи между компонентами.
8.3.6. Работа с группой компонентов, выравнивание компонентов по размеру и положению
Способы выделения группы компонентов:
- при расположении компонентов непосредственно на форме обвод курсором рамки вокруг компонента;
- держа нажатой клавишу Shift выделить компоненты, расположенные на разных формах и которые войдут в группу выделенных компонентов.