Практическая работа с компилятором С++Builder

Содержание

  1. Ключевые положения объектно-ориентированного программирования.
  2. Расширения файлов, принятые в среде разработки C++Builder 6.
  3. Алгоритм создания программного кода на C++.
  4. Создание и сохранение нового проекта.
  5. Открытие и использование менеджера проектов.
  6. Планирование работ - список to-do list.
  7. Задание информации о версии программы.
  8. Работа с формами.
    1. Включение в проект новой формы.
    2. Просмотр форм и модулей без включения их в проект.
    3. Размещение компонентов на форме.
    4. Repository - Депозитарий - Хранилище форм и проектов.
  9. Инструментальные средства поддержки разработки кода.
    1. Применение Code Insight - знатока кода.
    2. Исследователь классов ClassExplorer.
    3. Поддержка разработки, встроенная в окно редактора кода.
    4. Справочная система C++Builder и программа ее конфигурирования OpenHelp.
  10. Отладка приложений.
    1. Компиляция и компоновка проекта.
    2. Сообщения компилятора и компоновщика.
    3. Выполнение приложения по шагам.
    4. Точки прерывания.
    5. Использование окна инспектора отладки bug Inspector.
  11. Разработка графического интерфейса пользователя.
    1. Требования к интерфейсу пользователя приложений для Windows.

Приложение № 1 "Быстрые кнопки"
Приложение № 2 "Палитра компонентов"


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 ( ).

    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. В теле главной функции (и не только главной функции) допустимы следующие типы комментариев:

    6.3. В теле функции main ( ) {тело головной функции} объявить переменные области действия функции, а именно: (1), (2), (3), (4)
    (1) перед типом переменной в случае необходимости указывается спецификатор класса памяти идентификатора
    (1.1) Справочно: Каждая переменная характеризуется некоторым классом памяти, который определяет ее время жизни - период, в течение которого эта переменная существует в памяти. Спецификация класса памяти идентификатора определяет его класс памяти, область действия и пространство имен. Класс памяти, в частности, определяется местом объявления переменной. В C++Builder имеется четыре спецификации класса памяти: (2) в случае необходимости после спецификатора класса памяти указывается модификатор const или volatile, которые сообщают компилятору об изменчивости или постоянстве определяемого объекта.
    (2.1) Если переменная описана как const, то она недоступна в других модулях программы, ее нельзя изменять в других во время выполнения программы. Единственная возможность присвоить ей значение - это инициализация при определении. Объекту с модификатором const не только нельзя присваивать значения, но и для него запрещены операции инкремента (++) и декремента ( -- ). Указатель, определенный с модификатором const, нельзя изменять, однако может быть изменен объект, который им адресуется.
    (2.2) Модификатор volatile отмечает, что в процессе выполнения программы значение объекта может изменяться в промежутке между явными обращениями к нему. Например, на объект может повлиять внешнее событие. Поэтому компилятор не должен помещать его в регистровую память и не должен делать никаких предположений о постоянстве объекта в те моменты, когда в про-грамме нет явных операций, изменяющих значение объекта.
    (2.3) Диалекты языка С++ также включают следующие модификаторы:
    Эти модификаторы предназначены для влияния на распределение памяти при размещении объектов и учета особенностей сегментной организации и адресации памяти в процессорах семейства 80х86.
    (3) тип переменной (данных)
    (3.1) Помните, что переменная может быть простая и вычисляемая. Поэтому для вычисляемых переменных используйте операцию приведения типов, чтобы программа корректно выполняла вычисления.
    (3.2) Если программиста по каким -либо причинам не устраивает тот тип, который компилятор приписывает константе, то он может явным образом повлиять на его выбор. Для этого служат суффиксы, например, L, l (long), U, u (unsigned), которые ставятся перед типом переменной.
    (4) идентификатор (имя) переменной
    (4.1) Требования к идентификатору: (5) комментарий, раскрывающий описание и / или назначение вводимых переменных 6.3.1. Возможна инициализация переменных при их объявлении. Инициализация переменных при их объявлении уменьшает время выполнения программы. Переменная, представляющая изображение фиксированного числового, строкового или символьного (литерного) значения называется константой (ли-тералом). Константы делятся на пять групп: 6.3.1.1. Инициализация переменных может быть произведена одним из следующих способов: 6.3.1.2. В теле функции должны быть предусмотрены операторы, выдающие сообщения об ошибках ввода данных. Поэтому целесообразно вводить условие на проверку контрольного значения, которое используется в структурах повторения:
    - Синонимы термина "контрольное значение": сигнальное значение, фиктивное значение или флаговое значение.
    - Нельзя в качестве контрольного значения выбирать значение, которое является допустимым значением данных.

4. Создание и сохранение нового проекта.

Надо отвести для каждого проекта новый каталог.
Способы начинания нового проекта:

После создания приложения с пустой формой, надо сразу сохранить его в нужном каталоге. И в течение работы надо почаще выполнять сохранение. Проект нужно сохранить под осмысленным именем. В С++Builder недопустимы одинаковые имена файлов модулей и файла проекта.

Способы сохранения проекта:

Способы открытия проекта:

5. Открытие и использование менеджера проектов.

Project Manager (Менеджер проектов) - это инструмент управления группами проектов, например, проектами клиента и сервера; проектом, создающим библиотеку DLL, и проектом, использующим ее.

Открытие менеджера проектов: View => Project Manager: (1), (2), [(3)]
(1) New - добавление в группу нового проекта
(2) Remove - удаление выделенной "строки" (модуля или формы как объекта в менеджере проек-тов)
[(3)] При нажатии правой кнопки мыши => всплывающее меню: (1), (2), (3), (4):(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. Способы включения в проект новой формы: 8.1.2. Способы включения в проект ранее разработанных форм: (1) Copy - копировать
(2) Inherit - наследовать
(3) Use - использовать

В случае совпадения имен добавляемых файлов надо перейти в окно редактора кода добавляемого приложения и сохранить конфликтующий модуль командой File => Save As в каталоге "нового" приложения, дав ему новое имя. В случае включения формы способами 8.1.2. , форма становится общей для обоих приложений, изменение которой отразиться в обоих приложениях.

8.2. Просмотр форм и модулей без включения их в проект.

Потребность в просмотре возникает при работе над своим проектом в связи с желанием ознакомиться с примерами форм и модулей, близкими к задаче решаемой Вами в данный момент.

8.3. Размещение компонентов на форме.

В Интегрированной Среде Разработки компоненты представлены пиктограммами.

8.3.1. Перенос компонентов со страниц библиотеки на форму.
(1) Открыть соответствующую страницу Палитры компонентов
(2) Найти на Странице компонентов соответствующий компонент
(3) Двойной щелчок на компоненте, чтобы он появился на активной форме
(3.1) Размещение на форме нескольких компонентов одного типа:
- Удерживая клавишу Shift, щелчок на пиктограмме компонента => щелчок на активной форме в месте, где должны появиться компоненты.

- буксировка компонента в нужное место на форме,
- изменение размеров компонента на форме

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

Тип компонентаНазвание свойства компонента в Object InspectorПринимаемое значение свойствомЧто отражает свойство компонента при соответствующем значении?
Виз. К.ParentFonttrue(falce)Наследование от родительского компонента атрибутов шрифта
Виз. К.ParentShowHinttrue(falce)Наследование от родительского компонента атрибута показа ярлычков
Виз.О.К.ParentCtl3D Наследование от родительского компонента атрибута оформления
Виз.К.Left
Top
 Измерение в системе координат родительского компонента положения левого верхнего угла дочернего компонента
Виз.К.Anchors Определение привязки дочерних компонентов к границам родительского компонента
Виз.К.Visible(видимый)true(falce)Установка невидимости не только видимости родительского компонента, но и всех его дочерних компонентов
Виз.К. + Enabled(доступный)true(falce)Установка значения свойства в родительском компоненте закрывает / открывает доступ к дочерним компонентам, т.е. пользователь не сможет нажимать кнопки и производить любые другие действия в пределах данного родительского компонента

8.3.3.1. Многослойное размещение компонентов на форме

8.3.4. Поиск "пропавших" компонентов

Способы поиска "пропавших" компонентов:
(1) Инспектор Объектов => самый верхний выпадающий список => выбор по имени "пропавшего" компонента, тогда пропавший компонент будет отмечен маркером.
(2) Еще один способ найти компонент на форме - выделение его вершины в окне Object Tree-View, смотри раздел 8.3.5.
(3) Дополнительно смотри п. 8.3.3.1. : управление видимостью оконных компонентов.

8.3.5. Окно Object TreeView и страница диаграмм Редактора Кода

8.3.6. Работа с группой компонентов, выравнивание компонентов по размеру и положению

8.3.7. Фиксация компонентов

8.4. Repository - Депозитарий - хранилище форм и проектов.

9. Инструментальные средства поддержки разработки кода.

9.1. Применение Code Insight - Знатока Кода.

9.2. Исследователь Классов ClassExplorer.

9.3. Поддержка разработки, встроенная в окно Редактора Кода.

9.4. Справочная система C++Builder и программа ее конфигурирования OpenHelp.

Справка в C++Builder может вызываться из меню Help. Это меню имеет, в частности, разделы:

C++Builder Helpвызов справки по C++Builder и C++
C++Builder Toolsвызов справок по инструментарию C++Builder 6
Windows SDKвызов справок по Windows
STLport Helpвызов справки по стандартной библиотеке шаблонов (Standard Template Library), реализованной в виде файлов HTML

Способы получения контекстной справки:

К сожалению, изредка контекстная справка не дает правильный результат. Иногда вы в ответ получаете сообщение, что такой темы нет, и совет обратиться к разработчикам программы. А иногда просто вы попадаете совсем не на ту тему.

Если вас интересует справка по C++ или C++Builder, то в подобных случаях можно посоветовать выходить на требуемую тему через страницу справки Содержание. Если вам требуется информация о компоненте, свойстве, методе, событии, то наиболее удобно раскрыть на этой странице книжку "Visual Component Library Reference" (Обзор библиотеки визуальных компонентов), затем раскрыть "Alphabetical Object and Component Listing" (Алфавитный список объектов и компонентов) и в этом списке отыскать по алфавиту требуемый компонент. А из окна справки компонента всегда можно найти все его свойства, методы и события.

Если вам нужно найти справку по функциям, объявленным в библиотеке компонентов, и обычный контекстный поиск не помогает, то удобно на странице справки Содержание открыть книжку "Visual Component Library Reference" (Обзор библиотеки визуальных компонен-тов), затем раскрыть "Alphabetical Routines Listing" (Алфавитный список функций) или "Categorical Routines Listing" (Список функций по категориям), а затем найти нужную функцию в соответствующем разделе.

Если вам нужно найти справку по типам и функциям С или C++, то удобно на странице справки Содержание открыть одну из книжек "С Runtime Library Reference" (Обзор библиотеки С) или "Standard C++ Library". В соответствующих подразделах вы найдет списки всех функций и типов.

Для получения справки по API Windows, по сообщениям Windows и т.п. надо воспользоваться разделом Windows SDK меню Help. Контекстные справки по Windows из окон ИСР C++Builder не вызываются.

Настройка справочной системы.
Вызов программы Borland OpenHelp командой Help | Customize. OpenHelp предоставляет вам простой путь конфигурирования файлов справки .hlp. При этом можно добавлять и убирать файлы справки, которые будут появляться в таблице содержания и в предметном указателе справки. В частности, можно встроить в систему собственные справочные файлы на русском языке. Рис. Окно OpenHelp с открытой страницей Contents.

OpenHelp хранит информацию о справочной системе в проекте. Файл этого проекта имеет расширение .ohp и хранится в каталоге /Help. Вы можете изменить состав справочной системы: таблицы Содержание (Contents), таблицы Предметный Указатель и контекстной справки, доступ к которой осуществляется из ИСР C++Builder клавишей F1.

OpenHelp позволяет также удалить ссылки системного реестра на устаревшие файлы справки. Дело в том, что нередко системный реестр и файл WINHELP.INI загромождаются ссылками на устаревшие файлы справок. Вы можете быстро очистить от них реестр, выполнив в окне OpenHelp команду File Clean Registry

Ниже изложена методика модификации справочной системы.
Таблица Содержание хранится в файле с расширением .toc, подобном файлам содержания Windows .cnt, только без предложений Include. Чтобы добавить файлы в таблицу Содержание, надо сделать следующее:
1. Перейти в окне OpenHelp на страницу Contents (см. рис.).
2. Выполнить команду Edit | Add Files.
3. Выбрать или написать имена одного или более добавляемых файлов .toc или .cnt.
4. Щелкнуть на ОК.
5. Вы можете переместить файл на желательное вам место среди других файлов. Для этого выделите файл и переместите его, пользуясь кнопками со стрелками на странице Contents.
6. Выполнить команду File | Save Project или File | Save Project As. Для удаления файла из таблицы Содержание надо:
1. Перейти в окне OpenHelp на страницу Contents.
2. Выделить удаляемые файлы.
3. Выполнить команду Edit | Remove.
4. Выполнить команду File | Save Project или File | Save Project As.

Таблица Предметный Указатель хранит ссылки на файлы справок .hlp. Чтобы добавить файлы в таблицу Предметный Указатель или удалить файлы из нее надо произвести те же операции, которые были рассмотрены выше, но только работать на странице Index и добавлять или удалять файлы .hlp. Контекстно-зависимый поиск справки состоит из файлов .hlp, доступных с помощью так называемых макросов ALink. Эти макросы используются в C++Builder при нажатии клавиши F1 в Инспекторе Объектов, Редакторе Кодов, палитре компонентов. Чтобы добавить файлы в контекстно-зависимый поиск, надо произвести те же операции, которые описаны выше, но на странице Link.

10. Отладка приложений.

10.1. Компиляция и компоновка проекта.

Способы выполнения и задания опций компиляции приложения:

(1) команда Run => Run (производится выполнение приложения после компиляции);
(2) горячая клавиша F9 (производится выполнение приложения после компиляции);
(3) Cancel - прервать процесс компиляции;
(4) команда Run => Parameters - передача параметров перед компиляцией;
(5) команда Project => Compile Unit - компиляция отдельного модуля в obj-файл;
(6) команда Project => Make Project - компиляция модулей, тексты которых изменены с момента предыдущей компоновки проекта, в obj-файл, а затем в exe-файл (не производится выполнение приложения);
(7) команда Project => Build Project - компиляция всех модулей независимо от того, когда они в последний раз изменялись (не производится выполнение приложения, подходит при изменениях в опциях компиляции);
(8) Еще команды компиляции: Project => Make All Project и Project => Build All Project подобны командам Make и Build, но при работе с группой проектов;
(9) команда Tools => Environment Options => страница Preferences => опция Background Compilation включена, то компиляция будет производиться в фоновом режиме.

О фоновом режиме компиляции.

Если фоновый режим компиляции отключен, то после окончания компиляции рассмотрен-ными командами в Окне компиляции и компоновки появляется одно из трех итоговых сооб-щений: (1), (2), (3)
(1) "Done: Make" - "Результат: выполнено";
(2) "Done: There are errors" - "Результат: имеются ошибки";
(3) "Done: There are warnings" - "Результат: имеются предупреждения".

10.2. Сообщения компилятора и компоновщика.

10.3. Выполнение приложения по шагам.

Чаще для того, чтобы найти причину ошибки, надо выполнить какой-то фрагмент программы, наблюдая изменения переменных при выполнении каждой команды.

Для прохода фрагмента программы по шагам можно использовать команды:

КомандаГорячие" клавишиПояснения
Step Over (По шагам без захода в...)F8Пошаговое выполнение строк программы, считая вызов функции за одну строку, т.е. вход в функции не производится.
Trace Into (Трассировка с захо-дом в...)F7Пошаговое выполнение программы с заходом в вызываемые функции.
Trace to Next Source Line (Трас-сировка до следующей строки)Shift+F7Переход к следующей исполняемой строке.
Run to Cursor (Выполнить до курсора)F4Команда выполняет программу до того выполняемого оператора, на котором расположен курсор в окне редактора кода.
Run Until Return (Выполнить до выхода из функции)Shift+F7Выполнение программы до выхода из текущей функции, останов на операторе, следующем за вызовом этой функции.
Show Execution Point (Показать точку выполнения)--Команда помещает курсор на операторе, который будет выполняться следующим.

10.4. Точки прерывания.

Чтобы ввести простую (безусловную) точку прерывания, достаточно в окне Редактора Кода щелкнуть мышью на полоске левее кода требуемой строки. Строка окрасится в красный цвет и на ней появится красная точка. Если вы теперь запустите приложение на выполнение и начнете с ним работать, то произойдет прерывание выполнения, как только управление перейдет к строке, в которой указана точка прерывания.

Такая точка прерывания дает тот же результат, что и описанное ранее выполнение до точки, указанной курсором, при нажатии клавиши F4. Но преимущество точек прерывание заключается в том, что их можно одновременно указать несколько в разных местах кода и в разных модулях. Приложение будет выполняться до тех пор, пока управление не перейдет к первой встретившейся в программе точке прерывания. Кроме того, как мы скоро увидим, в этих точках можно устанавливать условия прерывания.

Для того чтобы убрать точку прерывания, достаточно щелкнуть мышью на красной точке левее кода соответствующей строки

Точки прерывания можно устанавливать только на выполняемых операторах.
Условные точки прерывания - мощный инструмент отладки приложений, содержащих циклы.

10.5. Использование окна Инспектора Отладки Debug Inspector.

В C++Builder 6 и 5 имеется еще одно средство отладки - Инспектор Отладки Debug Inspector. Инспектор Отладки позволяет вам получить исчерпывающую информацию о любой переменной в приложении и дает возможность, как и окно оценки и модификации Evaluate/Modify, изменить значение пе-ременной и продолжить выполнение приложения с этим новым значением.

Вызов этого инструмента осуществляется командой Run | Inspect, которая доступна только во время выполнения приложения при останове средствами отладки или вследствие генерации исключения. При останове вы можете поставить курсор в окне Редактора Кода на имя интересующей вас переменной и выполнить команду Run | Inspect. Другой способ - вызвать ту же команду из всплывающего меню (Debug | Inspect). Ну, а проще всего - нажать "горячие" клавиши Alt+F5. Попробуйте сделать это при генерации исключения в нашем тестовом приложении. Если после прерывания выполнения вы поставите курсор на пустое место в коде и вызовите Инспектор Отладки, перед вами откроется окно, в котором вы можете написать имя интересующей вас переменной, например, А и щелкнуть ОК. Инспектор Отладки позволяет исследовать различные данные: переменные, массивы, классы, функции, указатели. Находясь в окне Инспектора Отладки, можно щелкнуть правой кнопкой мыши и выбрать одну из команд:

RangeПросмотр данных в заданном диапазоне.
ChangeПерейти в окно Change для изменения значения элемента.
Show InheritedЕсли этот флаг включен, то на страницах окна отображаются все свойства и методы, как объявленные в данном классе, так и наследуемые. Если флаг выключен, то отображается только то, что объявлено в данном классе.
Show Fully Qualified NamesОтображение наследуемых элементов с их полными именами.
InspectОткрывает новое окно для выделенного вами элемента данных. Это позволяет детальнее исследовать данные типа структур, классов, массивов и т.п. и только для таких данных этот раздел доступен.
DescendАналогична команде Inspect, но детализирующие данные появляются не в отдельном, а в том же самом окне. В дальнейшем можно вернуться в исходное окно, воспользовавшись расположенным вверху окна выпадающим списком, в котором накапливаются просмотренные объекты.
New ExpressionЭта команда позволяет вам задать новое выражение для анализа.
Type CastПозволяет вам указать другой тип для рассматриваемого объекта, например, указать тип нетипизированного указателя.

11. Разработка графического интерфейса пользователя.

CUI - Graphical User Interface - графический интерфейс пользователя

11.1. Требования к интерфейсу пользователя приложений для Windows

11.1.1. Общие рекомендации по разработке графического интерфейса.

Работая с различными программами Windows, графический интерфейс пользователя любой серьезной программы должен включать в себя:

11.1.2. Многооконные приложения.

Модели управления окнами приложения: (1) SDI - с интерфейсом одного документа, которая предполагает:

(2) MDI - с интерфейсом множества документов, которая предполагает: 11.1.3. Стиль окон приложения.

Характеристики, задающие стиль окон приложения:

Свойства формы:

11.1.4. Цветовое решение приложения.

Большинство компонентов имеют свойство Color (цвет), который вы можете изменять в Инспекторе Объектов при проектировании или программно во время выполнения (если хотите, чтобы цвета в различных режимах работы приложения были разные). Щелкнув на этом свойстве в Инспекторе Объектов, вы можете увидеть в выпадающем списке большой набор предопределенных констант, обозначающих цвета. Все их можно разбить на две группы: статические цвета типа clBlack - черный, cIGreen - зеленый и т.д., и системные цвета типа clWindow - текущий цвет фона окон, clMenuText - текущий цвет текста меню и т.д.

Не злоупотребляйте в приложении яркими цветами Пестрое приложение - обычно признак дилетантизма разработчика, утомляет пользователя, рассеивает его внимание Как правило, используйте системные цвета, которые пользователь может перестраивать по своему усмотрению Из статических цветов обычно имеет смысл использовать только clBlack - черный, clWhite - белый и cIRed - красный цвет предупреждения об опасности.

Единству цветового решения отдельных частей экрана способствует также использование свойства ParentColor. Если это свойство установлено в true, то цвет компонента соответствует цвету содержащего его контейнера или формы. Это обеспечивает единство цветового решения окна и, кроме того, позволяет программно изменять цвет сразу группы компонентов, если вы, например, хотите, чтобы их цвет зависел от текущего режима работы приложения. Для такого группового изменения достаточно изменить только цвет контейнера.

11.1.5. Шрифты текстов.

Шрифт надписей и текстов компонентов C++Builder задается свойством Font, имеющим множество подсвойств. Кроме того, в компонентах имеется свойство ParentFont. Если это свойство установлено в true, то шрифт данного компонента берется из свойство Font его родительского компонента - панели или формы, на которой расположен компонент. Использование свойств ParentFont и ParentColor помогает обеспечить единообразие отображения компонентов в окне приложения.

По умолчанию для всех компонентов C++Builder задается имя шрифта MS Sans Serif и размер - 8. Константа множества символов Charset задается равной DEFAULT_CHARSET. Последнее означает, что шрифт выбирается только по его имени и размеру. Если описанный шрифт недоступен в системе, то Windows заменит его другим шрифтом.

Вы можете при установке вашего приложения узнать, имеется ли на компьютере пользователя нужный шрифт, например, с помощью следующего кода:
if (Screen ->Fonts ->IndexOf ("Arial") == -1)

Другой выход из положения - ввести в приложение команду выбора шрифта пользователем. Это позволит ему выбрать подходящий шрифт из имеющихся в его системе. Осуществляется подобный выбор с помощью стандартного диалога, оформленного в виде компонента FontDialog. Проведенную пользователем установку можно запоминать в файле .ini, в реестре или в другом файле конфигурации и читать автоматически информацию из этого файла при каждом запуске приложения.

11.1.6. Меню.

11.1.7. Компоновка форм.

11.1.8. Последовательность фокусировки элементов.

11.1.9. Подсказки и контекстно-зависимые справки.

Приложение должно предельно облегчать работу пользователя, снабжая его системой подсказок, помогающих сориентироваться в приложении. Эта система включает в себя:

Тексты ярлычков и подсказок панели состояния устанавливаются для любых визуальных компонентов в свойстве Hint в виде строки текста, состоящей из двух частей, разделенных символом вертикальной черты '|'. Первая часть, обычно очень краткая, предназначена для отображения в ярлычке; вторая более развернутая подсказка предназначена для отображения в панели состояния или ином заданном месте экрана. Например, в кнопке, соответствующей команде открытия файла, в свойстве Hint может быть задан текст:
Открыть|Открытие текстового файла

Как частный случай, в свойстве Hint может быть задана только первая часть подсказки без символа '|'.

Для того чтобы первая часть подсказки появлялась во всплывающем ярлычке, когда пользователь задержит курсор мыши над данным компонентом, надо сделать следующее:
1. Указать тексты свойства Hint для всех компонентов, для которых вы хотите обеспечить ярлычок подсказки.
2. Установить свойства ShowHint (показать подсказку) этих компонентов в true или установить в true свойство ParentShowHint (отобразить свойство ShowHint родителя) и установить в true свойство ShowHint контейнера, содержащего данные компоненты.

Конечно, вы можете устанавливать свойства в true или false программно, включая и отключая подсказки в различных режимах работы приложения.

При ShowHint, установленном в true, окно подсказки будет всплывать, даже если компонент в данный момент недоступен (свойство Enabled = false).

Если вы не задали значение свойства компонента Hint, но установили в true свойство ShowHint или установили в true свойство ParentShowHint, a в родительском компоненте ShowHint = true, то в окне подсказки будет отображаться текст Hint из родительского компонента.

Правда, все описанное выше справедливо при значении свойства ShowHint приложения Application равном true (это значение задано по умолчанию). Если установить Application->ShowHint в false, то окна подсказки не будут появляться независимо от значений ShowHint в любых компонентах.

Свойства Hint компонентов можно также использовать для отображения текстов заключенных в них сообщений в какой-то метке или панели с помощью функций GetShortHint и GetLongHint, первая из которых возвращает первую часть сообщения, а вторая - вторую (если второй части нет, то возвращается первая часть). Например, эти функции можно использовать в обработчиках событий OnMouseMove, соответствующих прохождению курсора мыши над данным компонентом. Так обработчик: void fastcall TForml::ButtonlMouseMove(TObject *Sender,
TShiftState Shift, int X, int У) {
TControl *Send = (TControl *)Sender;
Panel1->Caption = GetShortHint(Send->Hint);
Panel2->Caption = GetLongHint(Send->Hint); }
отобразит в панели Panel1 первую, а в панели Panel2 - вторую часть свойства Hint всех компонентов, над которыми будет перемещаться курсор, если в этих компонентах в событии OnMouseMove указан этот обработчик ButtonlMouseMove. Причем это не зависит от значения их свойства ShowHint.

Еще один пример. Пусть вы хотите, чтобы при нажатии некоторой кнопки Buttonl вашего приложения в панели Panel1 высвечивалась подсказка пользователю, например, "Укажите имя файла", а сама кнопка имела всплывающий ярлычок подсказки с текстом "Ввод". Тогда вы можете задать свойству Hint этой кнопки значение "Ввод|Укажите имя файла", задать значение true свойству ShowHint, а в обработчик события нажатия этой кнопки вставить оператор
Panell->Caption = GetLongHint(Buttonl->Hint);

Если же вы не хотите отображать ярлычок подсказки для кнопки, то можете ограничиться значением Hint, равным "Укажите имя файла", а приведенный выше оператор оставить неизменным или заменить на эквивалентный ему в данном случае оператор
Panel1->Caption = GetShortHint(Button1->Hint); или даже просто на оператор>br? Panell->Caption = Buttonl->Hint;

Перед тем моментом, когда должен отобразиться ярлычок какого-нибудь компонента, возникает событие приложения OnShowHint. В обработчике этого события можно организовать какие-то дополнительные действия, например, изменить отображаемый текст. Особенно легко работать с событиями приложения, начиная в C++Builder 5, в котором появился компонент ApplicationEvents, перехватывающий все эти события (см. подроб-нее в разд. 4.6). В обработчик его события OnShowHint можно поместить те операторы, которые надо выполнить перед отображением ярлычка. Заголовок этого обработчика имеет вид:
void __fastcall TForml::ApplicationEventslShowHint(
AnsiString SHintStr, bool SCanShow, THintInfo &HintInfo)

Здесь передаваемый по ссылке параметр HintStr - отображаемый в ярлычке текст. В обработчике этот текст можно изменить. Так же по ссылке передается параметр CanShow. Если в обработчике установить его равным false, то ярлычок отображаться не будет. Третий параметр, передаваемый по ссылке - HintInfo. Это струк-тура, поля которой содержат информацию о ярлычке: его координаты, цвет, задержки появления и т.п. В частности, имеется поле HintControl - компонент, сообщение которого должно отображаться в ярлычке, и поле HintStr - отображаемое сообщение. По умолчанию HintInfo. HintStr - первая часть свойства Hin компонента. Но в обработчике это значение можно изменить.

Имеется еще один способ отображения второй части сообщения, записанного в Hint, в строке состояния или какой-то области экрана в моменты, когда курсор мыши проходит над компонентом - это использование обработки события приложения OnHint. Это событие не того компонента, над которым проходит курсор мыши, а именно приложения - объекта Application. Начиная с C++Builder 5 это событие также перехватывается компонентом ApplicationEvents. Если обработчик этого события определен, то в момент прохождения курсора над компонентом, в котором задано свойство Hint, вторая часть сообщения компонента заносится в свойство Hint объекта Application. Если свойство Hint компонента содержит только одну часть, то в свойство Hint объекта Application заносится эта первая часть.

Если ваше приложение содержит инструментальную панель с быстрыми кнопками, то, как правило, эти кнопки должны снабжаться не только всплывающими ярлычками, но и развернутыми подсказками в панели состояния. Если у вас есть подобный пример, вы можете опробовать на нем методику отображения подсказок в панели состояния. А можете взять какой-нибудь более простой пример. Для реализации подсказок в панели состояния надо перенести на форму панель состояния - компонент StatusBar со страницы Win32. Если вам нужна односекционная панель, установите свойства SimplePanel и AutoHint панели StatusBar в true. Больше ничего делать не требуется - свойство AutoHint обеспечит автоматическое отображение подсказок. Запустите приложение на выполнение. Вы увидите, что тексты подсказок отображаются в панели состояния, когда курсор мыши перемещается над тем или иным окном редактирования. Причем это не мешает появляться ярлычкам, отображающим тексты окон.

Если вы используете многосекционную панель состояния, то свойство AutoHint обеспечит отображение подсказок только в первой секции. Для отображения подсказок в другой секции надо перенести на форму компонент ApplicationEvents и в обработчик его события OnHint компонента вставить оператор
StatusBarl->Panels->Items[I]->Text = Application->Hint;
где I - индекс секции.

Более подробные пояснения пользователю может дать контекстно-зависимая справка, встроенная в приложение. Она позволяет пользователю нажать в любой момент клавишу F1 и получить развернутую информацию о том компоненте в окне, который в данный момент находится в фокусе. Для того чтобы это осуществить, надо разработать для своего приложения файл справки .help. Как это сделать, подробно описано в [1]. Затем надо в каждом компоненте, для которого вы хотите обеспечить контекстно-зависимую справку, задать свойства, обеспечивающие ссылку на соответствующую тему.

В версиях, младше C++Builder 6, такое свойство одно - HelpContext. Это номер темы, который задается в проекте справки специальной таблицей [MAP], содержащей эти условные номера и соответствующие им идентификаторы тем. В C++Builder 6 появилось еще два свойства: HelpKeyword и HelpType. Первое из них является идентификатором темы, содержащимся в сноске К. А второе определяет, каким свойством - HelpContext или HelpKeyword задается ссылка на тему. Если HelpType = htContext - используется свойство HelpContext; если HelpType = htKeyword - используется свойство HelpKeyword.

Если HelpContext компонента равен нулю, то данный компонент наследует это свойство от своего родительского компонента. Например, для всех компонентов, размещенных на некоторой панели можно задать Help-Context = 0, а для самой панели задать отличное от нуля значение HelpContext, соответствующее теме, описывающей назначение всех компонентов панели.

Для того чтобы все это работало, надо выполнить команду Pro|ect | Options и в окне Project Options (опции проекта) на странице Application (приложение) установить значение опции Help file, равное имени подготовленного файла .hlp. Это приведет к тому, что в головном файле проекта появится оператор вида:
Application->HelpFile = "<имя файла>.hlp";

В этом операторе используется метод HelpFiIe, определяющий файл справки, к которому обращается проект. Этот метод и подобный оператор можно использовать в приложении в любом обработчике события, если в какие-то моменты требуется сменить используемый файл справки.

Если предполагается, что файл справки будет расположен в том же каталоге, где находится само приложение, то имя файла и в окне Опции проекта, и в приведенном выше операторе надо задавать без указания пути. Иначе приложение, работающее на вашем компьютере, перестанет работать на компьютере пользователя, у которого каталоги не совпадают с вашими.

Для того чтобы приложение в свойствах HelpContext могло ссылаться на какой-то номер контекстной справки, в файле проекта справки .hpj в разделе [MAP] надо поместить таблицу соответствия использованных значений HelpContext и тем файла .hlp.

В заключение поговорим о традиционном разделе меню Справка, позволяющем пользователю открыть файл справки .hlp и получить развернутую информацию по всем вопросам, связанным с данным приложением. В обработчик события при выборе данного раздела меню или при нажатии соответствующих кнопок помощи вставляются операторы вида
Application->HelpContext(<номеp темы>);

Задаваемые в этих операторах номера тем аналогичны используемым при задании свойств HelpContext. Это номер той темы, которая первой отобразится при открытии окна справки. А в дальнейшем пользователь, как обычно, может перейти, работая с программой справки, к любой интересующей его теме.

Имеется еще несколько методов объекта Application, обеспечивающих работу со справочными файлами.

Еще один механизм подсказок, связанный с файлом справок .hlp - кнопка справки, присутствующая в заголовках многих современных окон Windows. Нажав ее, пользователь может подвести курсор мыши, изменивший свою форму на вопросительный знак, к какому-то компоненту, щелкнуть и во всплывшем окне появится развернутая подсказка, поясняющая назначение данного компонента. Для того чтобы ввести такую возможность в свое приложение, надо установить в true подсвойство byHelp свойства BorderIcons вашей формы. Однако не для всех форм это вызовет появление в заголовке окна кнопки справки. Кнопка появится только в случае, если свойство BorderStyle формы установлено в bsDialog. Никакого программирования работа с кнопкой справки не требует. Все будет выполняться автоматически. Достаточно предусмотреть в файле .hlp соответствующие темы и сделать на них ссылки в свойствах HelpContext компонентов. Эти темы будут появляться при соответствующих действиях пользователя во всплывающих окнах.

Приложение № 1 "Быстрые кнопки"

ПиктограммыКоманда меню / горячие клавишиПояснение команды
File | New | Other Открыть проект или модуль из Депозитария
File Open
File Reopen
Открыть файл проекта, модуля, пакета. Кнопочка со стрелкой справа от основного изображения соответствует команде Reopen, позволяющей открыть файл из списка недавно использовавшихся
File Save As
File Save (Ctrl-S)
Сохранить файл модуля, с которым в данный момент идет работа
File | Save All Сохранить все (все файлы модулей и файл проекта)
File | Open Project (Ctrl-Fll)Открыть файл проекта
Project | Add to Project (Shift-Fll) Добавить файл в проект
Project | Remove from Project Удалить файл из проекта
Help | C++Builder Help Вызов страницы встроенной справки
View Units (Ctrl-F12) Переключиться на просмотр текста файла модуля, выбираемого из списка
View Forms (Shift-F12) Переключение на просмотр формы, выбираемой из списка
View Toggle Form/Unit (F12) Переключение между формой и соответствующим ей файлом модуля
File | New Form Включить в проект новую форму
Run | Run (F9) Выполнить приложение. Кнопочка со стрелкой справа от основного изображения позволяет выбрать выполняемый файл, если вы работаете с группой приложений
Run | Program Pause Пауза выполнения приложения и просмотр информации CPU. Кнопка и соответствующий раздел меню доступны только во время выполнения приложения
Run Trace Into (F7) Пошаговое выполнение программы с заходом в функции
Run | Step Over (F8) Пошаговое выполнение программы без захода в функции




Приложение № 2 "Палитра компонентов"

Палитра компонентов (рис. ) - это витрина библиотеки визуальных компонентов (Visual Component Library - VCL). Она позволяет сгруппировать компоненты в соответствии с их смыслом и назначением. Эти группы или страницы снабжены закладками. Вы можете изменять комплектацию страниц, вводить новые страницы, переставлять их, вносить на страницы разработанные вами шаблоны и компоненты и т.д.

StandardСтандартная, содержащая наиболее часто используемые компоненты
AdditionalДополнительная, являющаяся дополнением стандартной
Win3232-битные компоненты в стиле Windows 95/98 и NT
System Системная, содержащая такие компоненты, как таймеры, плееры и ряд других
Data Access Доступ к данным, в C++Builder 6 большинство компонентов, размещавшихся ранее на этой странице, перенесено на страницу BDE
Data Controls Компоненты отображения и редактирования данных
dbExpress Связь с данными с помощью dbExpress (начиная с C++Builder 6)
DataSnap Компоненты для связи с сервером приложений при построении многопоточных приложений, работающих с данными (начиная с C++Builder 6 и не во всех вариантах C++Builder)
BDE Доступ к данным через Borland Database Engine - BDE (начиная с C++Builder 6, ранее эти компоненты размещались на странице Data Access)
ADO Связь с базами данных через Active Data Objects (ADO) - множество компонентов ActiveX, использующих для доступа к информации баз данных Microsoft OLE DB (начиная с C++Builder 5)
InterBaseПрямая связь с Interbase, минуя Borland Database Engine (BDE) и Active Data Objects (ADO) (начиная с C++Builder 5)
WebServicesКомпоненты клиентский приложений Web, использующие доступ к службам Web с помощью SOAP (начиная с C++Builder 6)
InternetExpressПостроение приложений InternetExpress - одновременно приложений сервера Web и клиента баз данных с параллельными потоками (начиная с C++Builder 5)
Internet Компоненты для создания серверов Web
WebSnap Компоненты для создания серверов Web, содержащих сложные страницы, управляемые данными (начиная с C++Builder 6 и не во всех вариантах C++Builder)
FastNet Различные протоколы доступа к Интернет (начиная с C++Builder 5)
Decision Cube Компоненты для многомерного анализа данных (не во всех вариантах C++Builder)
QReport Компоненты для подготовки отчетов
Dialogs Диалоги, системные диалоги типа "Открыть файл" и др.
Win 3.1 Windows 3.x, компоненты в стиле Windows 3.x
Samples Образцы, различные интересные, но не до конца документированные компоненты
ActiveX Примеры компонентов ActiveX
COM+ Компонент, дающий доступ к каталогу СОМ+, содержащему данные по конфигурации СОМ+
Servers Компоненты связи с серверами СОМ (начиная с C++Builder 6, в C++Builder 5 на этой странице размещались компоненты, перенесенные теперь на страницу Office2k)
IndyClients Компоненты клиентских приложений Internet Direct (Indy), дающих доступ к различным протоколам Интернет из приложений Delphi, C++Builder, Kylix (начиная с C++Builder 6)
IndyServers Компоненты серверных приложений Internet Direct (Indy) (начиная с C++Builder 6)
IndyMisk Различные вспомогательные компоненты приложений Internet Direct (Indy) (начиная с C++Builder 6)
InterBase Admin Компоненты доступа к службам InterBase
Office2k или Office97 Оболочки VCL для распространенных серверов СОМ офисных приложений Microsoft (начиная с C++Builder 5, но там эти компонента размещались на странице Servers)

Поскольку число страниц в C++Builder 6 велико и не все закладки видны на экране одновременно, в правой части палитры компонентов имеются две кнопки со стрелками, направленными влево и вправо. Эти кнопки позволяют перемещать отображаемую на экране часть палитры. Кроме того, в C++Builder 6 в контекстном меню палитры компонентов, всплывающем при щелчке на палитре правой кнопкой мыши, имеется раздел Tabs. При выборе этого раздела вы увидите алфавитный перечень страниц библиотеки и сможете переключиться на указанную вами страницу.

Чтобы перенести компонент на форму, надо открыть соответствующую страницу библиотеки и указать курсором мыши необходимый компонент. При этом кнопка-указатель , размещенная в левой части палитры компонентов, приобретет вид не нажатой кнопки. Это значит, что вы находитесь в состоянии, когда собираетесь поместить компонент на форму. Если вы нажмете эту кнопку, это будет означать, что вы отказались от размещения выбранного компонента.

Поместить выбранный в палитре компонент на форму очень просто - надо сделать щелчок мышью в нужном месте формы. Есть и другой способ поместить компонент на форму - достаточно сделать двойной щелчок на пиктограмме компонента в палитре, и он автоматически разместится в центре вашей формы. Если вы выбрали компонент, а затем изменили ваше намерение размещать его, вам достаточно нажать кнопку указателя. Это прервет процесс размещения компонента, и программа вернется в нормальный режим, в котором вы можете выбирать другой компонент или выполнять какую-то команду.

Имена компонентов, соответствующих той или иной пиктограмме, вы можете узнать из ярлычка, появляющегося, если вы задержите над этой пиктограммой курсор мыши. Если вы выберете в палитре компонент и нажмете клавишу F1, то вам будет показана справка по типу данного компонента. Тут надо сразу сделать одно замечание. Имена на ярлычках выглядят, например, так: MainMenu, Button и т.д. Однако в C++Builder все имена классов в действительности начинаются с символа "Т", например, TMainMenu, TButton. Под такими именами вы можете найти описания соответствующих компонентов во встроенной в C++Builder справочной системе.

Автор: Орлов Андрей
Верстальщик в HTML: Кононевич Станислав

Hosted by uCoz