


Работа над новым проектом (так в C++ Builder называется разрабатываемое приложение) начинается с создания стартовой формы — главного окна программы.
Стартовая форма создается путем изменения значений свойств формы Form1(настройки формы) и добавления к форме необходимых компонентов (полей ввода, полей вывода текстовой информации, командных кнопок).
Основные свойства формы, которые определяют ее вид и поведение во время работы программы, приведены в табл. 2.1.

Помимо полей редактирования в окне программы находится текст — краткая информация о программе и назначении полей ввода.
Для вывода текста на поверхность формы используют поля вывода текста. Поле вывода текста — это компонент Label. Значок компонента Label находится на вкладке Standard (Рисунок 2.14). Добавляется компонент Label в форму точно так же, как и поле редактирования. Основные свойства компонента Label перечислены в табл. 2.5.

Значения некоторых свойств компонента, определяющих, например, размер и положение компонента на поверхности формы, можно изменить при помощи мыши.

Аналогичным образом можно установить значения свойств Height и width, которые определяют высоту и ширину формы. Размер формы, а также размер других компонентов задают в пикселах, т. е. точках экрана. Свойствам Height и width надо присвоить значения 200 и 330, соответственно.
Форма — это обычное окно. Поэтому размер формы можно изменить точно так же, как размер любого окна Windows, т. е. путем перетаскивания границы. По окончании перемещения границы значения свойств Height и width автоматически изменятся. Они будут соответствовать установленному размеру формы.
Положение диалогового окна на экране после запуска программы соответствует положению формы во время разработки, которое определяется значением свойств тор (отступ от верхней границы экрана) и Left (отступ от левой границы экрана). Значения этих свойств также можно задать путем перемещения формы при помощи мыши.
При выборе некоторых свойств, например, Borderstyle, справа от текущего значения свойства появляется значок раскрывающегося списка. Очевидно, что значение таких свойств можно задать путем выбора из списка (Рисунок 2.3).
Некоторые свойства являются сложными, т. е. их значение определяется совокупностью значений других (уточняющих) свойств. Например, свойство Border icons определяет, какие кнопки управления окном будут доступны во время работы программы. Значения этого свойства определяется совокупностью значений свойств MSystemMenu, biMinimize, biMaximize и biHelp, каждое из которых, в свою очередь, определяет наличие соответствующей командной кнопки в заголовке окна во время работы программы. Перед именами сложных свойств стоит значок "+", в результате щелчка на котором раскрывается список уточняющих свойств (Рисунок 2.4), значения которых можно задать обычным образом (ввести в поле или выбрать в списке допустимых значений).

В результате выбора некоторых свойств (щелчка кнопкой мыши на свойстве), рядом со значением свойства появляется командная кнопка с тремя точками. Это значит, что задать значение свойства можно в дополнительном диалоговом окне, которое появится в результате щелчка на этой кнопке. Например, значение сложного свойства Font можно задать в окне Object Inspector путем ввода значений уточняющих свойств, а можно воспользоваться стандартным диалоговым окном Шрифт, которое появится в результате щелчка на кнопке с тремя точками (Рисунок 2.5).
В табл. 2.2 перечислены свойства формы разрабатываемой программы, которые следует изменить. Остальные свойства формы оставлены без изменения и в таблице не приведены. В приведенной таблице в именах некоторых свойств есть точка. Это значит, что надо задать значение уточняющего свойства.


После добавления к форме двух командных кнопок нужно установить значения их свойств в соответствии табл. 2.7.
Процесс преобразования исходной программы в выполняемую состоит из двух этапов: непосредственно компиляции и компоновки. На этапе компиляции выполняется перевод исходной программы в некоторое внутреннее представление. На этапе компоновки выполняется сборка (построение) программы.
После ввода текста функции обработки события и сохранения проекта можно, выбрав в меню Project команду Compile, выполнить компиляцию. Процесс и результат компиляции отражается в диалоговом окне Compiling (Рисунок 2.31). Если в программе нет синтаксических ошибок, то окно будет содержать сообщение: Done: Compile Unit, в противном случае будет выведено сообщение Done: There are errors.


Программа вычисления тока в электрической цепи должна получить от пользователя исходные данные — напряжение и величину сопротивления. Эти данные могут быть введены с клавиатуры в поля редактирования. Поэтому в форму надо добавить поле редактирования.
Поля редактирования, поля вывода текста, списки, переключатели, командные кнопки и другие элементы пользовательского интерфейса называют компонентами.
Для того чтобы в форму разрабатываемого приложения добавить поле редактирования, надо в палитре компонентов, на вкладке Standard, щелкнуть на значке компонента Edit (Рисунок 2.6), установить курсор в ту точку формы, в которой должен быть левый верхний угол компонента, и еще раз щелкнуть кнопкой мыши. В результате на форме появляется компонент Edit — поле редактирования (Рисунок 2.7).
Если в программе нет ошибок, то можно выполнить компоновку. Для этого надо в меню Compile выбрать команду Make или Build. Разница между командами Make и Build заключается в следующем. Команда Make обеспечивает компоновку файлов проекта, а команда Build — принудительную перекомпиляцию, а затем — компоновку.
На этапе компоновки также могут возникнуть ошибки. Чаще всего причина ошибок во время компоновки состоит в недоступности файлов библиотек или других ранее откомпилированных модулей. Устраняются эти ошибки путем настройки среды разработки и включением в проект недостающих модулей. В простых проектах ошибки времени компиляции, как правило, не возникают.


После выбора типа создаваемого файла открывается окно Icon Properties (Рисунок 2.40), в котором необходимо выбрать характеристики создаваемого значка: Size (Размер) — 32x32 (стандартный размер значков Windows) и Colors (Палитра) — 16 цветов. В результате нажатия кнопки ОК открывается окно Iconl.ico (Рисунок 2.41), в котором можно, используя стандартные инструменты и палитру, нарисовать нужный значок.

Процесс рисования в Image Editor практически ничем не отличается от процесса создания картинки в обычном графическом редакторе, например в Microsoft Paint. Однако есть одна тонкость. Первоначально поле изображения закрашено "прозрачным" цветом. Если значок нарисовать на этом фоне, то при отображении значка части поля изображения, закрашенные "прозрачным" цветом, примут цвет фона, на котором будет находиться значок.
В процессе создания картинки можно удалить (стереть) ошибочно нарисованные элементы, закрасив их прозрачным цветом, которому на палитре соответствует левый квадрат в нижнем ряду (Рисунок 2.42).
Кроме "прозрачного" цвета в палитре есть "инверсный" цвет. Нарисованные этим цветом части рисунка при выводе на экран будут окрашены инверсным относительно цвета фона цветом.
После того как программа отлажена, необходимо выполнить ее окончательную настройку: задать название программы и значок, который будет изображать исполняемый файл приложения в папке, на рабочем столе и на Панели задач, во время работы программы.
Окно редактора кода разделено на две части (Рисунок 2.23). В правой части находится текст программы. Левая часть, которая называется навигатор классов (ClassExplorer), облегчает навигацию по тексту (коду) программы. В иерархическом списке, структура которого зависит от проекта, над которым идет работа, перечислены объекты проекта (формы и компоненты) и функции обработки событий. Выбрав элемент списка, можно быстро перейти к нужному фрагменту кода, например к функции обработки события.
Название программы отображается во время ее работы в панели задач Windows, а также в заголовках окон сообщений, выводимых функцией ShowMessage.
Название программы надо ввести в поле Title (Рисунок 2.38) вкладки Application диалогового окна Project Options, которое появляется в результате выбора в меню Project команды Options.


Окно навигатора классов можно закрыть обычным образом. Если окно навигатора классов не доступно, то для того чтобы оно появилось на экране, нужно в меню View выбрать команду ClassExplorer.

Чтобы начать разработку нового приложения (так принято называть прикладные программы), надо запустить C++ Builder или, если C++ Builder уже запущен, в меню File выбрать команду New | Application.

Завершив работу над формой, можно приступить к созданию программы. Но перед этим рассмотрим два важных понятия: событие и функцию обработки события.
Компилятор переходит ко второму этапу генерации выполняемой программы только в том случае, если исходный текст не содержит синтаксических ошибок. В большинстве случаев в только что набранной программе есть ошибки. Программист должен их устранить. Процесс устранения ошибок носит итерационный характер. Обычно сначала устраняются наиболее очевидные ошибки, например, объявляются необъявленные переменные. После очередного внесения изменений в текст программы выполняется повторная компиляция. Следует обратить внимание на то, что компилятор не всегда может точно локализовать ошибку. Поэтому, анализируя фрагмент программы, который, л о мнению компилятора, содержит ошибку, нужно обращать внимание не только на тот фрагмент кода, на который компилятор установил курсор, но и на тот, который находится в предыдущей строке. Например, в следующем фрагменте кода:
// вычислить ток i = u/r //. вывести результат в поле метки Label4->Caption = "Ток : " + FloatToStrF(i,ffGeneral,7,2) + " А";
не поставлена точка с запятой после оператора присваивания. Компилятор это обнаруживает, выводит сообщение statement missing ;, но выделяет строку Label4->caption = "Ток : " + и устанавливает курсор после идентификатора Label4.
В табл. 2.10 перечислены типичные ошибки и соответствующие им сообщения компилятора.
Во время работы приложения могут возникать ошибки, которые называются ошибками времени выполнения (run time errors) или исключениями (exceptions). В большинстве случаев причинами исключений являются неверные исходные данные.
Например, если во время работы программы вычисления силы тока в поле Напряжение ввести ю.5, т. е. разделить целую и дробную часть точкой, то в результате щелчка на кнопке Вычислить на экране появится окно с сообщением об ошибке (Рисунок 2.34).

В табл. 2.4 приведены значения свойств компонентов Edit1 и Edit2 разрабатываемого приложения (значения остальных свойств оставлены без изменения и поэтому в таблице не приведены). Компонент Edit1 предназначен для ввода величины напряжения, Edita — для ввода величины сопротивления. Обратите внимание, значением свойства Text обоих компонентов является пустая строка. В результате форма разрабатываемого приложения должна выглядеть так, как показано на Рисунок 2.13.

Для того чтобы изменить размер компонента, необходимо его выделить, установить указатель мыши на один из маркеров, помечающих границу компонента, нажать левую кнопку мыши и, удерживая ее нажатой, изменить положение границы компонента. Затем отпустить кнопку мыши. Во время изменения размера компонента отображаются его текущие размеры: высота и ширина (значения свойств Height и width) (Рисунок 2.12).

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

Процесс компиляции можно активизировать, выбрав в меню Run команду Run, которая запускает разрабатываемое приложение. Если будет обнаружено, что с момента последней компиляции в программу были внесены изменения или программа еще ни разу не компилировалась, то будет выполнена компиляция, затем — компоновка, и после этого программа будет запущена (естественно, только в том случае, если в программе нет ошибок).
Небольшую программу, которая использует только стандартные компоненты и представляет собой один-единственный ехе-файл, можно перенести на другой компьютер вручную, например, при помощи дискеты. Как правило, при запуске таких программ на другом компьютере проблем не возникает. Вместе с тем, необходимо обратить внимание на следующее. Программа, созданная в C++ Builder, использует DLL версию библиотеки времени выполнения (RTL — Runtime Library) и специальные динамические библиотеки — пакеты (например, в пакете VCL60 находятся наиболее часто используемые компоненты и системные функции). Чтобы программа могла работать на другом компьютере, помимо ехе-файла на этот компьютер надо перенести RTL-библиотеку и используемые программой пакеты или включить библиотеку и пакеты в ехе-файл (что существенно увеличит размер ехе-файла). Чтобы включить в выполняемый файл RTL-библиотеку и используемые программой пакеты, надо в меню Project выбрать команду Options и во вкладках Linker (Рисунок 2.43) и Packages (Рисунок 2.44) сбросить соответственно флажки Use dynamic RTL и Build with runtime packages. После этого нужно выполнить перекомпоновку программы.
Сложные программы, например те, которые используют компоненты доступа к базам данных, перенести на другой компьютер вручную проблематично. Для таких программ лучше создать установочную дискету (CD-ROM). Сделать это можно, например, при помощи пакета InstallShield Express, который входит в комплект поставки C++ Builder.

При обнаружении в программе неточностей, которые не являются ошибками, компилятор выводит подсказки (Hints) и предупреждения (Warnings). Например, наиболее часто выводимой подсказкой является сообщение об объявленной, но не используемой переменной (... is declared but never used.). Действительно, зачем объявлять переменную и не использовать ее? В табл. 2.11 приведены предупреждения, наиболее часто выводимые компилятором.

Причина возникновения ошибки в следующем. В тексте программы дробная часть числа от целой отделяется точкой. При вводе данных в поле редактирования пользователь может отделить дробную часть числа от целой точкой или запятой. Какой из этих двух символов является правильным, зависит от настройки Windows.
Если в настройке Windows указано, что разделитель целой и дробной частей числа — запятая (для России это стандартная установка), а пользователь использовал точку (ввел в поле Напряжение (Edit1) строку 10.5), то при выполнении инструкции
u = StrToFloat(Editl->Text);
возникнет исключение, т. к. при указанной настройке Windows содержимое поля редактирования и, следовательно, аргумент функции StrToFloat не является изображением дробного числа.
Если программа запущена из среды разработки, то при возникновении исключения выполнение программы приостанавливается и на экране появляется окно с сообщением об ошибке и ее типе. В качестве примера на Рисунок 2.35 приведено окно сообщения о возникновении исключения, причина которого заключается в том, что строка, введенная пользователем в поле редактирования, не является дробным числом.

Значение функции MessageDig — число, проверив значение которого можно определить, выбором какой командной кнопки был завершен диалог. В общем виде обращение к функции MessageDig выглядит так:
Выбор:= MessageDig(Сообщение, Тип, Кнопки, КонтекстСправки)
где:
сообщение — текст сообщения; Тип — тип сообщения. Сообщение может быть информационным, предупреждающим или сообщением о критической ошибке. Каждому типу сообщения соответствует определенный значок. Тип сообщения задается именованной константой (табл. 2.13); кнопки — кнопки, отображаемые в окне сообщения. Задаются операцией включения в множество элементов — констант (табл. 2.14). контекстСправки — параметр, который определяет раздел справочной информации, который появится на экране, если пользователь нажмет клавишу <F1>. Если вывод справочной информации не предусмотрен, то значение параметра должно быть равно нулю.



После возникновения исключения и щелчка на кнопке ОК в диалоговом окне Debugger Exception Notification (Рисунок 2.35) выполнение программы можно прервать или, несмотря на возникшую ошибку, продолжить. Чтобы прервать выполнение программы, надо в меню Run выбрать команду Program Reset, чтобы продолжить — команду Step Over.
Обработку исключений берет на себя автоматически добавляемый в выполняемую программу код, который обеспечивает, в том числе, и вывод информационного сообщения. Вместе с тем C++ Builder дает возможность программе самой выполнить обработку исключения.
Инструкция обработки исключения выглядит так:
try { // здесь инструкции, выполнение которых может вызвать исключение } catch ( Тип &е) { // здесь инструкции обработки исключения }
где:
try — ключевое слово, обозначающее, что далее следуют инструкции, при выполнении которых возможно возникновение исключений, и что обработку этих исключений берет на себя программа; catch — ключевое слово, обозначающее начало секции обработки исключения. Инструкции этой секции будут выполнены, если в программе возникнет исключение указанного типа.
Основной характеристикой исключения является его тип. В табл. 2.12 перечислены наиболее часто возникающие исключения и указаны причины, которые могут привести к их возникновению.
Во время набора текста программы редактор кода автоматически выделяет элементы программы: полужирным шрифтом — ключевые слова языка программирования (if, else, int, float и др.), курсивом — комментарии. Это делает текст программы более выразительным, что облегчает восприятие структуры программы.
В процессе разработки программы часто возникает необходимость переключения между окном редактора кода и окном формы. Сделать это можно при помощи командной кнопки Toggle Form/Unit, которая находится на панели инструментов View (Рисунок 2.20), или нажав клавишу <F12>. На панели инструментов View находятся командные кнопки View Unit и View Form, используя которые можно выбрать нужный модуль или форму в случае, если проект состоит из нескольких модулей или форм.

Следует обратить внимание, что если список свойств и методов не появляется, то это значит, что в программе обнаружена ошибка (C++ Builder контролирует правильность набираемого программистом текста в "фоновом" режиме). Например, если в окне редактора кода набрать if Edit1->, то список свойств и методов объекта Edit1 не появится, т. к. инструкция if в данном случае записана с ошибкой (не поставлена открывающая скобка после if). C++ Builder информирует программиста об обнаруженной ошибке сообщением Unable to invoke Code Completion due to errors in source code, которое появляется в нижней части окна редактора кода.
После набора имени встроенной или объявленной программистом функции редактор кода также выводит подсказку: список параметров. Параметр, который в данный момент вводит программист, в подсказке выделен полужирным. Например, если набрать слово FloatToStrF, которое является именем функции преобразования дробного числа в строку символов, и открывающую скобку, то на экране появится окно, в котором будет указан список параметров функции (Рисунок 2.22).

Каждому добавленному компоненту автоматически присваивается имя, которое состоит из названия компонента и его порядкового номера. Например, если к форме добавить два компонента Edit, то их имена будут Edit1 и Edit2. Программист путем изменения значения свойства Name может изменить имя компонента. Однако в простых программах имена компонентов, как правило, не изменяют.
Основные свойства компонента Edit приведены в табл. 2.3.

В случае если компилятор обнаружит в программе ошибки и неточности, диалоговое окно Compiling будет содержать информацию о количестве синтаксических (Errors) и семантических (Warnings) ошибок, а также о числе подсказок (Hints). Сами сообщения об ошибках, предупреждения и подсказки находятся в нижней части окна редактора кода.
Чтобы перейти к фрагменту кода, который, по мнению компилятора, содержит ошибку, надо выбрать сообщение об ошибке (щелкнуть в строке сообщения левой кнопкой мыши) и из контекстного меню (Рисунок 2.32) выбрать команду Edit Source.

C++ Builder присваивает функции обработки события имя, которое состоит из двух частей. Первая часть имени идентифицирует форму, содержащую объект (компонент), для которого создана процедура обработки события. Вторая часть имени идентифицирует сам объект и событие. В нашем примере имя формы — Form1, имя командной кнопки — Button1, а имя события — Click.
В окне редактора кода между фигурными скобками можно набирать инструкции, реализующие функцию обработки события.
В листинге 2.1 приведен текст функции обработки события onclick для командной кнопки Вычислить. Обратите внимание на то, как представлена программа. Ее общий вид соответствует тому, как она выглядит в окне редактора кода: ключевые слова выделены полужирным шрифтом, комментарии — курсивом (выделение выполняет редактор кода). Кроме того, инструкции программы набраны с отступами в соответствии с принятыми в среде программистов правилами хорошего стиля.
В процессе набора текста удобно использовать шаблоны кода (Code Templates). Шаблон кода — это инструкция программы, записанная в общем виде. Например, шаблон для инструкции if выглядит так:
if () { } else { }
Редактор кода предоставляет программисту большой набор шаблонов: объявления классов, функций, инструкций выбора (if, switch), циклов (for, while). Для некоторых инструкций, например для if и while, есть несколько вариантов шаблонов.
Для того чтобы в процессе набора текста программы воспользоваться шаблоном кода и вставить его в текст программы, нужно нажать комбинацию клавиш <Ctrl>+<J> и из появившегося списка выбрать нужный шаблон (Рисунок 2.24). Выбрать шаблон можно обычным образом, прокручивая список, или вводом первых букв имени шаблона (имена шаблонов в списке выделены полужирным). Выбрав в списке шаблон, нужно нажать клавишу <Enter>, шаблон будет вставлен в текст программы.
Редактор кода поддерживает функцию контекстно-зависимой подсказки, которая во время набора текста программы автоматически выводит краткую справочную информацию о свойствах и методах объектов, о параметрах функций.
Например, после того как будет набрано имя объекта (компонента) и символы ->, редактор кода автоматически выведет список свойств и методов объекта (Рисунок 2.21). Программисту останется только выбрать из списка нужный элемент и нажать клавишу <Enter> (быстро перейти к нужному элементу списка или к области, где этот элемент находится, можно, нажав клавишу, соответствующую первому символу этого элемента).
Вид созданной формы подсказывает, как работает приложение. Очевидно, что пользователь должен ввести в поля редактирования исходные данные и щелкнуть мышью на кнопке Вычислить. Щелчок на изображении командной кнопки — это пример того, что в Windows называется событием.
Событие (Event) — это то, что происходит во время работы программы. В C++ Builder каждому событию присвоено имя. Например, щелчок кнопкой мыши — это событие Onclick, двойной щелчок мышью — событие OnDb1Click.
В табл. 2.9 приведены некоторые события Windows.

Проект — это набор файлов, используя которые компилятор создает выполняемый файл программы (ехе-файл). В простейшем случае проект составляют: файл описания проекта (bpr-файл), файл главного модуля (срр-файл), файл ресурсов (res-файл), файл описания формы (dfm-файл), заголовочный файл формы (h-файл) и файл описания функций формы (срр-файл).
Чтобы сохранить проект, нужно в меню File выбрать команду Save Project As. Если проект еще ни разу не был сохранен, то C++ Builder сначала предлагает сохранить модуль (содержимое окна редактора кода) и поэтому на экране появляется окно Save Unitl As. В этом окне (Рисунок 2.29) надо выбрать папку, предназначенную для проектов, создать в ней папку для сохраняемого проекта, открыть ее и ввести имя модуля. В результате щелчка на кнопке OK в указанной папке будут созданы три файла: срр, h и dfm, и на экране появится диалоговое окно Save Projectl As (Рисунок 2.30), в которое надо ввести имя проекта.

Обратите внимание, что имена файла модуля (срр) и файла проекта (bрr) должны быть разными, т. к. C++ Builder в момент сохранения файла проекта создает одноименный срр-файл (файл главного модуля). Кроме того, надо учесть, что имя генерируемого компилятором выполняемого файла совпадает с именем проекта. Поэтому файлу проекта следует присвоить такое имя, которое, по вашему мнению, должен иметь выполняемый файл программы, а файлу модуля — какое-либо другое имя, например, полученное путем добавления к имени проекта порядкового номера модуля.

Следует обратить внимание на то, что в заголовке окна сообщения, выводимого функцией ShowMessage, указывается название приложения. Название приложения задается на вкладке Application окна Project Options. Если название приложения не задано, то в заголовке будет имя исполняемого файла.
Для вывода сообщений можно использовать функцию MessageDig. Функция MessageDig позволяет поместить в окно с сообщением один из стандартных значков, например "Внимание", задать количество и тип командных кнопок и определить, какую из кнопок нажал пользователь. На Рисунок 2.37 приведено окно, выведенное в результате выполнения инструкции
MessageDig("Файл c:\Xtemp\\test.txt будет удален.", mtWarning, TMsgDlgButtons() « mbOK « mbCancel, 0);

В процессе набора текста программы можно получить справку о конструкции языка, типе данных, классе или функции. Для этого нужно в окне редактора кода набрать слово, о котором надо получить справку (например, имя функции), и нажать клавишу <F1>. Так как с запрашиваемой темой в справочной системе может быть связано несколько разделов, на экране, как правило, появляется окно Найденные разделы (Рисунок 2.27), в котором можно выбрать нужный раздел. Следует обратить внимание на то, что после имени функции может быть указано имя библиотеки, к которой эта функция относится: VCL или CLX (вспомните: библиотека VCL используется при разработке приложений для Windows, a CLX — при разработке кроссплатформенных приложений). Поэтому, выбирая раздел справочной системы, надо обращать внимание на то, к какой библиотеке он относится.

Проект представляет собой набор программных единиц — модулей.
Один из модулей, называемый главным, содержит инструкции, с которых начинается выполнение программы. Чтобы увидеть главный модуль, нужно в меню Project выбрать команду View Source. В качестве примера в листинге 2.5 приведен текст главного модуля программы "Сила тока".
| Свойство |
Описание |
| Name |
Имя формы. В программе имя формы используется для управления формой и доступа к компонентам формы |
| Caption |
Текст заголовка |
| Width |
Ширина формы |
| Height |
Высота формы |
| Top |
Расстояние от верхней границы формы до верхней границы экрана |
| Left |
Расстояние от левой границы формы до левой границы экрана |
| BorderStyle |
Вид границы. Граница может быть обычной (bssizeable), тонкой (bsSingle) или отсутствовать (bsNone). Если у окна обычная граница, то во время работы программы пользователь может при помощи мыши изменить размер окна. Изменить размер окна с тонкой границей нельзя. Если граница отсутствует, то на экран во время работы программы будет выведено окно без заголовка. Положение и размер такого окна во время работы программы изменить нельзя |
| Borderlcons |
Кнопки управления окном. Значение свойства определяет, какие кнопки управления окном будут доступны пользователю во время работы программы. Значение свойства задается путем присвоения значений уточняющим свойствам biSystemMenu, biMinimaze, biMaximaze и biHelp. Свойство biSystemMenu определяет доступность кнопки Свернуть и кнопки системного меню, biMinimaze — кнопки Свернуть, biMaximaze— кнопки Развернуть, biHelp — кнопки вывода справочной информации |
| Icon |
Значок в заголовке диалогового окна, обозначающий кнопку вывода системного меню |
| Color |
Цвет фона. Цвет можно задать, указав название цвета или привязку к текущей цветовой схеме операционной системы. Во втором случае цвет определяется текущей цветовой схемой, выбранным компонентом привязки и меняется при изменении цветовой схемы операционной системы |
| Font |
Шрифт. Шрифт, используемый "по умолчанию" компонентами, находящимися на поверхности формы. Изменение свойства Font формы приводит к автоматическому изменению свойства Font компонента, располагающегося на поверхности формы. То есть компоненты наследуют свойство Font от формы (имеется возможность запретить наследование) |
Для изменения значений свойств объектов, в том числе и формы, используется вкладка Properties (Свойства) диалогового окна Object Inspector. В левой колонке этой вкладки перечислены свойства выбранного объекта, в правой — указаны значения свойств.
При создании формы в первую очередь следует изменить значение свойства Caption (Заголовок). В нашем примере надо заменить текст Form1 на Сила тока. Чтобы это сделать, нужно в окне Object Inspector щелкнуть левой кнопкой мыши в строке Caption (в результате будет выделено значение свойства и появится курсор) и ввести текст: сила тока (Рисунок 2.2).
| Свойство |
Значение |
Комментарий |
| Caption |
Сила тока |
  |
| Height |
200 |
  |
| Width |
330 |
  |
| BorderStyle |
bsSingle |
Тонкая граница не позволяет изменить размер окна во время работы программы путем захвата и перемещения границы |
| Borderlcons.biMinimize |
False |
В заголовке окна нет кнопки Свернуть |
| Borderlcons.biMaximize |
False |
В заголовке окна нет кнопки Развернуть |
| Font . Name |
Tahoma |
  |
| Font. Size |
10 |
  |
| Свойство |
Определяет (задает) |
| Name |
Имя компонента. Используется в программе для доступа к компоненту и его свойствам, в том числе к тексту, который находится в поле редактирования |
| Text |
Текст, который находится в поле ввода/редактирования |
| Left |
Расстояние от левой границы компонента до левой границы формы |
| Top |
Расстояние от верхней границы компонента до верхней границы формы |
| Height |
Высоту поля |
| Width |
Ширину поля |
| Font |
Шрифт, используемый для отображения вводимого текста |
| ParentFont |
Признак |
На Рисунок 2.8 приведен вид формы после добавления двух полей редактирования. Один из компонентов выбран (выделен), окружен восемью маленькими квадратиками. Свойства выбранного компонента отображаются в окне Object Inspector. Чтобы увидеть и, если надо, изменить свойства другого компонента, надо этот компонент выбрать, щелкнув левой кнопкой мыши на изображении компонента, или выбрать имя компонента в раскрывающемся списке, который находится в верхней части окна Object Inspector (Рисунок 2.9). Компонент, свойства которого надо увидеть или изменить, можно выбрать и в окне Object TreeView (Рисунок 2.10).
|   Свойство | Компонент |
|
| Edit1 |
Edit2 |
|
| Text |
  |   |
| Тор |
48 |
72 |
| Left |
144 |
144 |
| Width |
65 |
65 |
| Свойство |
Определяет (задает) |
| Name |
Имя компонента. Используется в программе для доступа к свойствам компонента |
| Caption |
Отображаемый текст |
| Font |
Шрифт, используемый для отображения текста |
| ParentFont |
Признак наследования шрифта родительского компонента |
| AutoSize |
Признак того, что размер поля определяется его содержимым |
| Left |
Расстояние от левой границы поля вывода до левой границы формы |
| Top |
Расстояние от верхней границы поля вывода до верхней границы формы |
| Height |
Высоту поля вывода |
| Width |
Ширину поля вывода |
| Wordwrap |
Признак того, что слова, которые не помещаются в текущей строке, автоматически переносятся на следующую строку (значение свойства AutoSize должно быть false) |
Если поле Label должно содержать несколько строк текста, то перед тем как ввести в поле текст (изменить значение свойства Caption), нужно присвоить свойству AutoSize значение false, а свойству wordwrap — true. Затем надо установить требуемый размер поля (при помощи мыши или вводом значений свойств Height и width) и только после этого ввести значение свойства Caption.
В форму разрабатываемого приложения надо добавить четыре компонента Label. Поле Label1 предназначено для вывода информационного сообщения, поля Label2 и Labels — для вывода информации о назначении полей ввода, поле Label4 — для вывода результата расчета (величины тока в цепи). После добавления компонентов надо выполнить их настройку — установить значения свойств (табл. 2.6). Прочерк в таблице означает, что значение свойства оставлено без изменения или установлено автоматически — например, как результат изменения другого свойства. В результате форма разрабатываемого приложения должна выглядеть так, как показано на Рисунок 2.15.
| Свойство |   Компонент  | |||
| Label1 |
Label2 |
Label3 |
Label4 |
|
| AutoSize |
false |
true |
true |
fablse |
| Wordwrap |
true |
false |
false |
true |
| Caption | Введите напряжение и величину сопротивления, затем щелкните на кнопке Вычислить | Напряжение (вольт) | Сопротивление (Ом) | |
| Top | 8 | 56 | 80 | 112 |
| Left | 8 | 8 | 8 | 8 |
| Height | 33 | 16 | 16 | 16 |
| Width |
300 |
120 |
120 |
200 |
| Свойство |
Описание |
| Name |
Имя компонента. Используется в программе для доступа к компоненту и его свойствам |
| Caption |
Текст на кнопке |
| Enabled |
Признак доступности кнопки. Кнопка доступна, если значение свойства равно true, и недоступна, если значение свойства равно false |
| . Left |
Расстояние от левой границы кнопки до левой границы формы |
| Top |
Расстояние от верхней границы кнопки до верхней границы формы |
| Height |
Высота кнопки |
| Width |
Ширина кнопки |
После добавления к форме двух командных кнопок нужно установить значения их свойств в соответствии с табл. 2.8.
Окончательный вид формы разрабатываемого приложения приведен на Рисунок 2.17.
|   Свойство | Компонент |
|
| Button1 |
Button2 |
|
| Caption |
Вычислить |
Завершить |
| Top |
144 |
144 |
| Left |
16 |
104 |
| Height |
25 |
25 |
| Width |
75 |
75 |
| Событие |
Происходит |
| OnClick |
При щелчке кнопкой мыши |
| OnDb1Click |
При двойном щелчке кнопкой мыши |
| OnMouseDown |
При нажатии кнопки мыши |
| OnMouseUp |
При отпускании кнопки мыши |
| OnMouseMove |
При перемещении мыши |
| OnKeyPress |
При нажатии клавиши клавиатуры |
| OnKeyDown |
При нажатии клавиши клавиатуры. События OnKeyDown и OnKeyPress — это чередующиеся, повторяющиеся события, которые происходят до тех пор, пока не будет отпущена удерживаемая клавиша (в этот момент происходит событие OnKeyUp) |
| OnKeyUp |
При отпускании нажатой клавиши клавиатуры |
| OnCreate |
При создании объекта (формы, элемента управления). Процедура обработки этого события обычно используется для инициализации переменных, выполнения подготовительных действий |
| On Paint |
При появлении окна на экране в начале работы программы; во время работы программы после появления окна (или его части), которое было закрыто другим окном или свернуто |
| OnEnter |
При получении элементом управления фокуса |
| OnExit |
При потере элементом управления фокуса |
Реакцией на событие должно быть какое-либо действие. В C++ Builder реакция на событие реализуется как функция обработки события. Таким образом, для того чтобы программа выполняла некоторую работу в ответ на действия пользователя, программист должен написать функцию обработки соответствующего события. Следует обратить внимание на то, что значительную часть обработки событий берет на себя компонент. Поэтому программист должен разрабатывать функцию обработки события только в том случае, если реакция на событие отличается от стандартной или не определена. Например, если по условию задачи ограничений на символы, вводимые в поле Edit, нет, то процедуру обработки события onKeypress писать не надо, т. к. во время работы программы будет использована стандартная (скрытая от программиста) процедура обработки этого события.
Методику создания функций обработки событий рассмотрим на примере функции обработки события onclick для командной кнопки Вычислить.
Чтобы приступить к созданию функции обработки события, сначала надо выбрать компонент, для которого создается функция обработки события. Выбрать компонент можно в окне Object Inspector или щелчком на изображении компонента в форме. После этого в окне Object Inspector нужно выбрать вкладку Events (События).
В левой колонке вкладки Events (Рисунок 2.18) перечислены события, которые может воспринимать выбранный компонент (имя и тип компонента указаны в верхней части окна). Если для события определена функция обработки, то в правой колонке рядом с именем события будет выведено имя этой функции.
Для того чтобы создать функцию обработки события, нужно сделать двойной щелчок мышью в окне Object Inspector, в поле функции обработки соответствующего события (Рисунок 2.19). В результате этого откроется окно редактора кода, в которое будет добавлен шаблон функции обработки события, а в окне Object Inspector рядом с именем события появится сгенерированное C++ Builder имя функции обработки события (Рисунок 2.19).
| Сообщение |
Ошибка |
| Undefined symbol (неизвестный символ) |
Используется необъявленная переменная Имя переменной, функции или параметра записано неверно. Например, в программе объявлена переменная Summ, а в инструкциях используется sum |
| Statement missing ; (отсутствует точка с запятой) |
После инструкции не поставлена точка с запятой |
| Unterminated string or character constant (незаконченная строковая или символьная константа) |
В конце строковой константы, например, текста сообщения, нет двойных кавычек |
| ) expected (ожидается закрывающая скобка) |
При записи арифметического выражения, содержащего скобки, нарушен баланс открывающих и закрывающих скобок |
| if statement missing ( (в инструкции if нет открывающей скобки) |
В инструкции if условие не заключено в скобки |
| Compound statement missing } |
Нарушен баланс открывающих и закрывающих фигурных скобок. Вероятно, не поставлена закрывающая фигурная скобка отмечающая конец функции или группы инструкций, например, после условия или слова else в инструкции if |
| Extra parameter in call to (лишний параметр при вызове функции) |
Неверно записана инструкция вызова функции, указан лишний параметр |
Если компилятор обнаружил достаточно много ошибок, то просмотрите все сообщения и устраните сначала наиболее очевидные ошибки и выполните повторную компиляцию. Вполне вероятно, что после этого количество ошибок значительно уменьшится. Это объясняется особенностями синтаксиса языка, когда одна незначительная ошибка может "тащить" за собой довольно большое количество других.
| Предупреждение |
Вероятная причина |
| ... is declared but never used | |
| Possibly incorrect assignment. (вероятно, инструкция присваивания некорректная) |
В условии, например, инструкции if, вместо оператора сравнения (=) использован оператор присваивания (=) |
| Possibly use of ... before definition. (вероятно, используется неинициализированная переменная) |
Не присвоено начальное значение переменной |
| Исключение |
Возникает |
| EConvertError — ошибка преобразования |
При выполнении преобразования, если преобразуемая величина не может быть приведена к требуемому типу. Наиболее часто возникает при преобразовании строки символов в число |
| EDivByZero — целочисленное деление на ноль |
При выполнении операции целочисленного деления, если делитель равен нулю |
| EZeroDivide — деление на ноль |
При выполнении операции деления над дробными операндами, если делитель равен нулю |
| EInOutError — ошибка ввода/вывода |
При выполнении файловых операций. Наиболее частой причиной является отсутствие требуемого файла или, в случае использования сменного диска, отсутствие диска в накопителе |
В программе вычисления силы тока исключения могут возникнуть при выполнении преобразования строк, введенных в поля редактирования, в числа и при вычислении величины тока. Исключение EConvertError возникнет, если пользователь неправильно введет числа в поля редактирования: например, разделит целую и дробную части точкой. Исключение EZeroDivide возникнет, если пользователь задаст величину сопротивления равной нулю. В листинге 2.3 приведена функция обработки события Onclick на командной кнопке Вычислить. В функцию включены инструкции обработки исключений.
| Константа |
Тип сообщения |
Значок |
| mtWarning |
Внимание |

| Константа |
Кнопка |
Константа |
Кнопка |
| mbYes |
Yes |
mbAbort |
Abort |
| mbNo |
No |
mbRetry |
Retry |
| mbOK |
OK |
mblgnore |
Ignore |
| mbCancel |
Cancel |
mbAll |
All |
| mbHelp |
Help |
  |   |
Кроме приведенных констант можно использовать константы mbOkCancel, mbYesNoCancel и mbAbortRetryignore. Эти константы определяют наиболее часто используемые в диалоговых окнах комбинации командных кнопок.
Значение, возвращаемое функцией MessageDig (табл. 2.15), позволяет определить, какая из командных кнопок была нажата пользователем.
| Значение функции MessageDlg |
Диалог завершен нажатием кнопки |
| mr Abort |
Abort |
| mrYes |
Yes |
| mrOk |
Ok |
| mrRetry |
Retry |
| mrNo |
No |
| mrCancel |
Cancel |
| mrlgnore |
Ignore |
| mrAll |
All |


Справочную информацию можно получить также, выбрав из меню Help команду C++ Builder Help. В этом случае на экране появится стандартное окно справочной системы. В этом окне на вкладке Предметный указатель нужно ввести ключевое слово, определяющее тему, по которой нужна справка. В качестве ключевого слова можно ввести, например, первые несколько букв имени функции, свойства или метода (Рисунок 2.28).

Программист может создать свой собственный шаблон кода и использовать его точно так же, как и стандартный. Для того чтобы создать шаблон кода, нужно в меню Tools выбрать команду Editor Options и в окне Code Insight щелкнуть на кнопке Add. В появившемся окне Add Code Template (Рисунок 2.25) надо задать имя шаблона (Shortcut Name) и его краткое описание (Description). Затем, после щелчка на кнопке ОК, в поле Code надо ввести шаблон (Рисунок 2.26).

Последнее, что надо сделать на этапе создания формы — это добавить в форму две командные кнопки: Вычислить и Завершить. Назначение этих кнопок очевидно.
Командная кнопка — компонент Button — добавляется в форму точно так же, как и другие компоненты. Значок компонента Button находится на вкладке Standard (Рисунок 2.16). Основные свойства компонента Button приведены в табл. 2.7.
После нескольких запусков программы "Сила тока" возникает желание усовершенствовать программу, внести в нее изменения. Например, такие, чтобы после ввода напряжения в результате нажатия клавиши <Enter> курсор переходил в поле Сопротивление, а после ввода сопротивления в результате нажатия этой же клавиши выполнялся расчет. Кроме того, было бы неплохо, чтобы пользователь мог вводить в поля редактирования только числа. Чтобы внести изменения в программу, нужно запустить C++ Builder и открыть соответствующий проект. Сделать это можно обычным способом, выбрав в меню File команду Open Project. Можно также воспользоваться командой Reopen из меню File. При выборе команды Reopen открывается список проектов, над которыми работал программист в последнее время. В листинге 2.4 приведена программа "Сила тока", в которую внесены изменения: добавлены функции обработки событий onKeyPress для компонентов Edit1 и Edit2. Чтобы добавить в программу функцию обработки события, надо в окне Object Inspector выбрать компонент, для которого нужно создать функцию обработки события, на вкладке Events выбрать событие и сделать двойной щелчок в поле рядом с именем события. C++ Builder сформирует шаблон функции обработки события. После этого можно вводить инструкции, реализующие функцию.


Для того чтобы изменить положение компонента, необходимо установить курсор мыши на его изображение, нажать левую кнопку мыши и, удерживая ее нажатой, переместить контур компонента в нужную точку формы, а затем отпустить кнопку мыши. Во время перемещения компонента (Рисунок 2.11) отображаются текущие значения координат левого верхнего угла компонента (значения свойств Left и тор).
Пробный запуск программы можно выполнить непосредственно из среды разработки, не завершая работу с C++ Builder. Для этого нужно в меню Run выбрать команду Run или щелкнуть на командной кнопке Run (Рисунок 2.33).

Чтобы назначить приложению значок, отличный от стандартного, нужно в меню Project выбрать команду Options и в открывшемся окне на вкладке Application щелкнуть на кнопке Load Icon. В результате этих действий откроется стандартное окно, используя которое можно просмотреть каталоги и найти подходящий значок (значки хранятся в файлах с расширением ico).
В состав C++ Builder входит утилита Image Editor (Редактор изображений), при помощи которой программист может создать для своего приложения уникальный значок. Запустить Image Editor можно из C++ Builder, выбрав в меню Tools команду Image Editor, или из Windows — командой Пуск | Программы | Borland C++ Builder | Image Editor.
Чтобы начать работу по созданию нового значка, нужно в меню File выбрать команду New | Icon File (Рисунок 2.39).