- •Методическое пособие для самостоятельных работ «Основы интегрированной среды программирования delphi6»
- •6.100301 "Судовождение",
- •6.100302 "Эксплуатация судовых энергетических установок"
- •6.092201 "Электрические системы и комплексы транспортных средств",
- •Введение
- •Глава 1. Интегрированная среда Delphi. Принципы работы
- •1.1. Интегрированная среда Delphi
- •1.2. Принципы визуального программирования
- •Val(Edit1.Text,k1,sign);
- •Val(Edit2.Text,k2,sign);
- •Val(MaskEdit1.Text,r1,sig);
- •Val(МaskEdit2.Text,r2,sig);
- •1.3. Событийно-управляемые программы
- •1.4. Составление программ обработки массивов
- •I :integer;
- •I, j :integer;
- •1.5. Вывод на печать
- •Глава 2. Общие свойства компонентов
- •2.1. Иерархия компонентов
- •2.2. Имена и собственники компонентов
- •2.3. Родительские и дочерние компоненты
- •2.4. Положение, размеры и оформление компонентов
- •2.5.Указатели мыши
- •2.3. Окно редактора с готовым изображением указателя
- •2.6. Реакция на события от мыши и клавиатуры
- •2.6.1. События от мыши
- •2.6.2. События от клавиатуры
- •2.6.3. Клавиатура в ms-dos и Windows
- •2.6.4. Фокус ввода
- •2.7. Механизм действий Action
- •2.8. Иинтерфейс Drag&Drop
- •2.9. Иинтерфейс Drag&Dock
- •2.10. Поддержка справочной службы
- •2.11. Поддержка Сом
- •2.12. Свойства разного назначения
- •Глава 3. Использование компонентов общего назначения
- •3.1. Компоненты страницы Standard
- •3.1.1. TFrame - рама и шаблоны компонентов
- •6) Окно регистрации рамы в палитре компонентов
- •3.1.2. Создание шаблонов без рам
- •3.1.3. TMainMenu - главное меню формы (программы)
- •3.1.4. TPopupMenu - вспомогательное (локальное) меню
- •3.1.5. TLabel - метка для отображения текста
- •3.1.6. TEdit - ввод и отображение строки
- •3.1.7. TMemo - ввод и отображение текста
- •3.1.8. TButton - кнопка
- •3.1.9. TCheckBox - независимый переключатель
- •3.11. Компонент tCheckBox - независимый переключатель
- •3.1.10. TRadioButton - зависимые переключатели
- •3.1.11. TListBox - список выбора
- •3.1.12. TComboBox – комбинированный или раскрывающийся список выбора
- •3.1.13. TScrollBar - управление значением величины
- •3.1.14. TGroupBox - панель группирования
- •3.1.15. TRadioGroup - группа зависимых переключателей
- •3.1.16. TPanel - панель
- •3.1.17. TActionList - механизм действий
- •3.2. Компоненты страницы Аdditional
- •3.2.1. TBitBtn - кнопка с изображением
- •3.2.2. TSpeedButton - кнопка для инструментальных панелей
- •3.2.3. TMaskEdit - специальный редактор
- •3.2.4. TStringGrid - таблица строк
- •3.2.5. TDrawGrid - произвольная таблица
- •3.2.6. TImage - отображение картинок
- •3.2.7. TShape - стандартная фигура
- •3.2.8. TBevel - кромка
- •3.2.9. TScrollBox - панель с прокруткой
- •3.2.10. TСheckListBox - группа независимых переключателей
- •3.2.11. TSplitter - компонент для изменения размеров
- •3.2.12. TStaticText - метка для отображения текста
- •3.2.13. TControlBar - инструментальная панель
- •3.2.14. TApplicationEvents - обработчик сообщений Windows
- •3.2.15. TValueListEditor - специализированный редактор строк
- •3.2.16. TLabelEdit - однострочный редактор с меткой
- •3.2.17. TColorBox - список выбора цвета
- •3.2.18. TChart - построитель графиков
- •3.2.19. TActionManager - менеджер действий
- •3.2.20. TActionMainMenuBar - полоса меню для действий
- •3.2.21. TActionTollBar - полоса кнопок для действий
- •3.2.22. TCustomizeDIg - диалог настройки интерфейса
- •Глава 4. Многодокументный и однодокументный интерфейсы (mdi и sdi)
- •4.1. Mdi и sdi: сравнение
- •4.2. Разработка mdi—приложений
- •4.2.1. Разработка главного и информационного окон
- •4.2.2. Использование стандартных диалоговых окон
- •If OpenDialog1.Execute then
- •4.2.3. Разработка диалогового окна
- •Var dlg6:tokRightDlg;
- •X1,x2,x3:String;
- •If b1 or b2 then
- •4.2.4. Управление окнами
- •I:integer;
- •I:integer;
- •4.2.5. Работа с меню
- •Var tf5:tForm2;
- •4.3. Разработка sdi–приложения
- •4.3.1. Простое sdi–приложение
- •I,j :byte;
- •I,j :byte;
- •I,j :byte;
- •4.3.2. Управление окнами в sdi–приложениях
- •I :byte;
- •Var I :byte; ptr6 :tForm2;
- •I :byte;
- •Глава 5. Реализация алгоритмов решаемых задач на Delphi
- •5.1. Традиционный подход реализации алгоритмов на Delphi
- •5.2. Объектно-ориентированный подход
- •Val(Edit1.Text,k,sig);
- •Val(Edit2.Text,l,sig);
- •I,j :byte;
- •I,j :integer;
- •Inherited Create (Ni,Nj);
- •Val(Edit1.Text, p, sig1);
- •Val(Edit2.Text, q, sig2);
- •Val(Edit3.Text, r, sig3);
- •Vas :real;
- •Val(Edit4.Text,n,sig);
- •Глава 6. Тестирование и отладка приложений
- •6.1. Виды ошибок
- •6.2. Отладочные средства Delphi
- •6.3. Составление тестов
- •Глава 7. Исключительные ситуации
- •7.1. Обработка исключительных ситуаций
- •I, j, k : integer;
- •I:integer;
- •I, j, k : integer;
- •7.2. Обработка определенных исключительных ситуаций
- •Var I,j,k :shortint; p,q :real;
- •Заключение
- •Литература
- •Методическое пособие для самостоятельных работ «Основы интегрированной среды программирования delphi6»
- •6.100301 "Судовождение",
- •6.100302 "Эксплуатация судовых энергетических установок"
- •6.092201 "Электрические системы и комплексы транспортных средств",
Глава 6. Тестирование и отладка приложений
6.1. Виды ошибок
Как показывает программистская практика, ни одну программу реальной степени сложности не удается с первого раза написать без ошибок. Наиболее простыми и поэтому самыми безобидными являются синтаксические ошибки. Синтаксическая ошибка – это нарушение формальных правил написания конструкций языка программирования. Синтаксические ошибки вызывают появление диагностических сообщений. Если причина ошибки не ясна, то нажатием функциональной клавиши F1 можно получать контекстную подсказку и с ее помощью легко разобраться.
Следующей разновидностью можно назвать ошибки, связанные с неправильным применением различных конструкций Delphi. Приложение работает, но делает “не то, что надо” (окна открываются не так или не там, где хотелось бы, отдельные компоненты не работают и т.д.). В таком случае придется просто более внимательно изучать свойства применяемых объектов и разобраться в правилах их использования в своих разработках.
Как и в других языках программирования, так и при работе в Delphi могут встречаться логические ошибки, когда результаты выполнения не соответствуют ожидаемым. Для проверки приложений всегда необходимо проводить тестирование и отладку. Тестирование – это запуск программы на разных наборах исходных данных и анализ полученных результатов. Отладка – это выявление и устранение причин ошибок, если их наличие установлено тестированием. Иногда встречается термин испытание программы, под этим обычно подразумевают определение эксплуатационных характеристик и оценка их соответствия техническому заданию (по времени выполнения, скорости реакции, объему требуемой памяти . . .).
6.2. Отладочные средства Delphi
Рассмотрим следующие отладочные средства:
трассировка;
окна просмотра;
точки прерывания (Breakpoints; иногда в литературе их называют контрольными точками).
Трассировка – это выполнение программы по строкам с наблюдением за операторами циклов и разветвлений и промежуточными результатами. Для выполнения трассировки используют следующие функциональные клавиши:
F7 выполнение программы по строкам, в том числе внутри процедур и функций;
F8 выполнение программы по строкам, но без входа в процедуры и функции, строка с их вызовом рассматривается как один оператор;
F4 выполнение программы до курсора.
Трассировка, как правило, бессмысленна без окон просмотра: в них видны значения переменных. Для включения переменной в окно просмотра необходимо поставить курсор на нее и нажать комбинацию клавиш Ctrl+F5. Внешний вид окна просмотра показан на рис. 6.1. В нем имеется две переменных per и s1 до запуска программы, поэтому их значения не определены.
Рис. 6.1. Окно просмотра
Для трассировки программы вместо ее обычного запуска нажимаем на клавишу F7: выполняется трансляция и приложение останавливается на первом исполняемом операторе. При каждом нажатии на F7 выполняется только одна строка программы и изменения значений переменных отражаются в окне просмотра. Во время трассировки текущая строка выделена синей полосой (строка, на которой находится полоса еще не выполнена!). Для наглядности трассировки целесообразно разместить не более одного оператора в строке, а оператор if . . .then . . .else разместить на трех строках, чтобы был виден результат проверки условия. Если программа не содержит процедур и функций, то клавиши F7 и F8 ничем не отличаются. Клавишей F8 лучше пользоваться, если вызываемые процедуры уже отлажены и их построчное выполнение лишь затруднит слежение за логикой программы в целом.
На практике трассировку целесообразно выполнять следующим образом. Определить, какую часть программы необходимо проверять. В качестве такой части можно выбрать процедуру, выполняемую при выборе пункта меню или при нажатии кнопки. Перед первым исполняемым оператором этой процедуры поставим курсор и нажмем на клавишу F4. Приложение запускается и остановится на курсоре. Дальнейшую трассировку выполняем клавишами F7 или F8. Если установим курсор в процедуре, которая соответствует пункту меню, то приложение запускается как обычно и остановится в ожидании выбора из меню. После выбора того пункта, реализацию которого необходимо проверить, происходит остановка на курсоре и можно приступать к трассировке. Если с самого начала пользоваться клавишей F7 (или F8), то приложение остановится в ожидании выбора из меню, а после выбора будет работать до конца, потому что в вызываемой из меню процедуре нет причин, заставляющих ее остановиться. Таким образом, по очереди можно проверять процедуры всех пунктов меню и кнопок. Трассировка особенно полезна для проверки разветвлений и циклов. В разветвлениях можно установить, почему она выполнена неправильно: неправильно написано условие или неправильные данные. В циклах можно следить за постепенным формированием результата, за промежуточными данными, за используемыми и получаемыми на каждом шагу значениями, а также обнаружить причину зацикливания, если такое имеет место. Если в ходе пошагового выполнения ошибку удалось обнаружить, то процесс можно в любой момент остановить выбором подпункта Reset из меню Run.
Точки прерываний предоставляют аналогичный способ проверки приложения. Сначала надо определить, в каких местах программы целесообразно анализировать промежуточные результаты и расставить по ним точки прерываний. Для установки точки прерывания поставим курсор на нужную строку, войдем в меню Delphi, выберем пункт Run и подпункт Add Breakpoint. Точка прерывания выделяется красной полосой. Количество точек прерывания в принципе не ограничено. Можно установить и условные точки прерывания. После выбора пункта меню Add Breakpoint появляется диалоговое окно, в котором имеется строка Condition, в эту строку можно писать условия останова на точке прерывания. Конечно, значения всех переменных, участвующих в этом условии, должны быть определены.
При запуске приложения оно выполняется до первой точки прерывания, при повторном запуске до второй точки и т.д. до конца. Естественно, что если точка прерывания не оказалась на данном пути выполнения программы, то она игнорируется. После остановки программы на точке прерывания можно дальше выполнять ее по строкам, можно добавить переменные в окно просмотра. Имейте в виду, что если точка прерывания установлена внутри цикла, то прерывания происходят на каждом шаге выполнения цикла. Когда отладка закончена, то для удаления точек прерываний войдите в пункт меню View, выберите подпункт View Breakpoints: откроется окно Breakpoints List, в котором перечислены все точки прерывания. Нажатием правой клавиши мыши на этом окне откроется меню, с помощью которого можно их удалить.
В Delphi имеются и другие, более сложные в применении отладочные средства.
