Компиляция программы выполняется командой Project > Compile Project (Проект > Компилировать проект) или нажатием комбинации клавиш CTRU-F9. При этом на экране появляется диалоговое окно, в котором отображаются:
- название главного файла проекта — в строке Project (Проект);
- имя компилируемого файла — в строке Compiling (Компиляция) ;
- номер текущей строки компилируемого исходного текста — в строке Current Line (Текущая строка);
- общее число строк с учетом других откомпилированных модулей — в строке
Total lines (Всего арок);
- число советов, генерируемых компилятором для подскачки разработчику о двусмысленных местах в исходном тексте, например когда переменная перед ее первым использованием не имеет значения — в строке Hints (Подсказки);
- число предупреждений, выдаваемых компилятором при обнаружении мест в программе, которые могут служить потенциальным источником ошибок - в строке Warnings (Предупреждения);
- число ошибок, возникающих, когда компилятор не может определить, что означает некоторая строка исходного текста, — в строке Errors (Ошибки)
Если в процессе компиляции встретились подсказки и предупреждения, работоспособная программа все равно будет создана. Если же встретились ошибки, этого не произойдет, а система Delphi 7 во второй строке информационного окна сообщит об их обнаружении Done: There are errors (Готово: Найдены ошибки) . Ошибки надо исправить и выполнить процесс компиляции заново.
Компонент Меню (TMainMenu)
Компонент TMainMenu предназначен для добавления к программе главного меню, без которого не обходится практически ни одно из приложений
Windows.Способ создания
Чтобы добавить к разрабатываемой программе меню, надо выбрать на панели компонентов Standard (Стандартные) компонент TMainMenu и поместить его на форме в
•f. MyForm.MainMemi!
Компонент TMainMenu — нееизуалъпый, в отличие от визуальных компонентов TEdit и TLabel, в точности соответствующих своему внешнему виду в работающей про-грамме. Это означает, что хотя он виден на форме как небольшой квадрат, в окне созданной программы в таком виде компонент не появится. Представление его на форме в миниатюрном виде просто указывает на наличие в программе объекта, ответственного за меню. А создается меню с помощью специального редактора. Некоторые компоненты называются невизуальными потому, что, во-первых, ряд элементов управления невозможно разместить на форме без специальной подготовительной работы, а во-вторых, в системе Delphi 7 имеется ряд компонентов, которые не предназначены для отображения на экране, хотя их свойства можно настраивать с помощью Инспектора объектов. Подобные компоненты используются, например, для обращения к базам данных, для установки связи с Интернетом и прочего.
Редактор меню вызывается двойным щелчком на объекте MainMenul . Первоначально меню пустое.
В Инспекторе объектов надо открыть категорию Localizable (Настраиваемые) и в свойстве Caption (Заголовок) ввести название первого пункта, например стандартную команду &Файл с указанной горячей клавишей, а затем нажать клавишу ENTER. Редактор меню переключится обратно в проектируемое меню, где уже появится первый пункт. Теперь надо опять нажать клавишу ENTER, и система Delphi 7 переключится к заголовку Caption для нового пункта. В него вводится очередное название (например, &Сложить), опять нажимается клавиша ENTER, и цикл формирования меню повторяется.
Компонент Флажок (TCheckBox)
Данный компонент используется для фиксации включенного или выключенного состояния (одного из двух). После размещения компонента Флажок на форме подпись к этому элементу управления можно задать в свойстве Caption. Расположение этой подписи определяется свойством Alignment: значение taRightHustify означает расположение подписи справа, а значение taLeftJustify — слева. Главное свойство флажка называется Checked. Оно доступно для изменения и на этапе проектирования, и на этапе работы программы. Это свойство принимает значение True, если флажок включен, и False, если он сброшен. Некоторые флажки могут находиться в третьем, «частично установленном» состоянии, когда признак установки флажка отображается приглушенным цветом. Такая возможность нужна, когда требуется сообщить пользователю о неполном соответствии указанному статусу (например, в ходе установки программ таким образом сообщается, что для установки выбраны не все доступные средства). Если для свойства AllowGrayed задано значение True, то флажок при последовательных щелчках на нем будет поочередно принимать состояния «сброшен», «установлен частично», «установлен». Определить текущее состояние или задать новое из числа доступных можно, проверив или изменив свойство State. Чтобы реагировать на изменение состояния флажка, надо создать обработчик события OnCLkk (При щелчке).
Форма в режиме дизайна при выполнении задания представлена на Рис. 11, а в режиме выполнения на Рис. 12- Рис. 14.
Листинг программы приведен в Приложении Б.
4.Отладка программы
Программ без ошибок не существует. Синтаксические ошибки, связанные с неверным вводом команд в редакторе, неверной записью идентификаторов и другими некорректными действиями, можно обнаружить простым анализом исходного текста, и они почти всегда фиксируются компилятором Delphi 7.
В некоторых случаях выдаются предупреждения или подсказки. Желательно устранять их источники, руководствуясь принципом «дыма без огня не бывает». Однако ошибки, связанные с неверной реализацией алгоритма (например, когда вместо символа > ошибочно введен символ <, что не является синтаксической ошибкой), могут привести к возникновению ошибок уже во время работы программы. Кроме того, неверная реализация исходного алгоритма не обязательно приводит к нарушению работоспособности приложения, но может повлечь за собой выдачу неверных результатов или выполнение ошибочных действий.
Рассмотрим следующий фрагмент исходного текста, выполняющий инициализацию массива А гг.
var Arr : array[1..10] of integer;
N := 11;
for i := 1 to N do
Arrfi ] := 0;
Он неверен, потому что в конце цикла произойдет обращение к одиннадцатому элементу массива, что приведет к выходу за границу массива и возникновению ошибки. Подобные вещи компилятор отследить и обнаружить не в силах, и процесс поиска и устранения ошибок такого рода, называемый отладкой, полностью возлагается на программиста.
Синтаксические ошибки
Синтаксические ошибки обнаруживаются компилятором автоматически. Сообщения о найденных ошибках отображаются в нижней части редактора, в небольшом окне:
При двойном щелчке на строке с сообщением об ошибке система Delphi 7 переключится в редактор, где подсветит строку, в которой эта ошибка обнаружена. Само сообщение (на английском языке) описывает ошибку достаточно подробно, чтобы можно было понять ее причину.
Например:Undeclared identifier: 'X '
В данном случае указано, что идентификатор X не объявлен.
Логические ошибки
Существует несколько способов предотвращения, выявления и устранения логических ошибок. Все они используются программистами, как правило, в комбинации друг с другом. За наиболее часто встречающимися ошибками можно заставить следить саму программу. Для этого в настройках проекта — соответствующее диалоговое окно вызывается командой Project > Options (Проект > • Настройки) — на вкладке Compiler (Компилятор) надо выполнить следующие действия (рис. 16).
На панели Code generation (Генерация машинного кода) сбросьте флажок Optimization (Оптимизация). Когда компилятор создает оптимизированный код, он нередко вносит существенные улучшения в детали алгоритма, реализованного на Паскале. Например, если программист вводит в процедуре локальную переменную X для хранения промежуточных результатов:
Выполнение по шагам
Обычно разработчику приблизительно известно, в какой подпрограмме возникает ошибка, однако обнаружить ее быстро, просто рассматривая исходный текст, не всегда удается, особенно новичкам в программировании (хотя просмотр исходных тестов признан наиболее эффективным средством обнаружения ошибок). Поэтому возникает необходимость выполнить эту подпрограмму по шагам: каждый оператор по очереди, с возможностью контроля значений используемых переменных.
Рассмотрим пример, связанный с проектом Projectl (предварительно в Менеджере проектов его надо сделать активным).
Точки прерывания можно ставить не в любой строке исходного теста, а только там, где выполняются какие-то действия. Такие строки помечены на левом поле в редакторе синими круглыми маркерами, которые появляются после успешно выполненной компиляции. В нашем случае точку прерывания можно поставить в строке с оператором цикла. Это делается нажатием клавиши F5 или щелчком мыши на синем маркере. При этом соответствующая строка выделяется красным цветом (рис. 18). Снимается точка прерывания аналогичным способом.
Если теперь запустить программу и выполнить операцию сложения (щелкнув на кнопке Сложить или выбрав соответствующий пункт в строке меню или в контекстном меню), то программа остановится и управление будет передано в систему Delphi 7, где строка с точкой прерывания помечается зеленой стрелкой на левом поле.
В заголовке главного окна системы Delphi 7 появится информационное сообщение Projectl [Stopped] (Выполнение проекта Projectl остановлено).Далее выполнение метода AddActionExecute можно продолжить по шагам.
Для этого используются команда Run > Step Over (Запуск > • Перешагнуть), клавиша F8 или кнопка Step Over (Перешагнуть). Если выполнить очередной шаг, то в редакторе подсвечивается голубым цветом и помечается зеленой стрелкой следующий оператор, ожидающий выполнения.Просмотр и изменение значений
Помимо простого просмотра различных значений во время работы программы иногда требуется какое-нибудь значение изменить. Пусть, например, в процессе отладки по тагам обнаружена ошибка, но выполнение программы желательно продолжить. Чтобы обойти ошибку, неверное значение можно исправить вручную. Это делается в окне быстрого просмотра значений, которое открывается командой Run > Evaluate/ Modufy (Запуск > Определить/Изменить) или комбинацией клавиш CTRL+F7 (рис. 20).