Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
osnovy_programmirovanija_v_srede_lazarus.pdf
Скачиваний:
186
Добавлен:
18.03.2015
Размер:
6.53 Mб
Скачать

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

end;

end;

initialization

{$I unit1.lrs}

end.

6.3.8 Специальные компоненты для ввода чисел

Если необходимо вводить последовательность чисел с заранее определен-

ным шагом изменения значений, то бывает удобнее использовать специальные компоненты TSpinEdit и TFloatSpinEdit, расположенные на вкладке

Misc. Основные свойства этих компонентов:

Increment – шаг приращения числа. Разумеется, для TSpinEdit шаг мо-

жет быть только целым, а для TFloatSpinEdit может быть и дробным.

MaxValue – максимально возможное значение числа.

MinValue – минимально возможное значение числа.

ReadOnly – изменить значение пользователь не может, правда программно изменить значение можно.

Value – указывает текущее значение. Во время проектирования можно за-

дать начальное значение числа, с которого будет начинаться ввод.

DecimalPlaces – только для TFloatSpinEdit, указывает количество разрядов после запятой.

Вводить числа можно не только с помощью кнопок прокрутки, но и с кла-

виатуры. При этом обеспечивается контроль на ввод недопустимых символов.

В компоненте TSpinEdit нельзя ввести число вне установленного диапа-

зона как с помощью кнопок прокрутки, так и с клавиатуры. В компоненте

TFloatSpinEdit если ввод производится с помощью кнопок, то переход за пределы указанного при проектировании диапазона блокируется, т.е. например,

547

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

нажимая на кнопку увеличения нельзя ввести число больше MaxValue или нажимая на кнопку уменьшения, нельзя ввести число меньше MinValue. Но можно ввести числа вне этого диапазона с клавиатуры. Однако если после этого нажать на любую из кнопок прокрутки, то в окне ввода появится число, первое из возможных в установленном диапазоне! Например, вы установили MaxValue = 10.0, с клавиатуры ввели число 24.5. После этого нажали кнопку увели-

чения, в окне компонента появится число 10.0. Если нажать на кнопку умень-

шения, то появится число 9.5.

Упомяну еще об одном компоненте TUpDown из вкладки Common Controls, который позволяет вводить целые числа. Основные свойства у него практически такие же, как и у TSpinEdit, только по-другому названные. На-

пример, свойство MaxValue в TUpDown называется Max, MinValue в TUpDown называется Min, свойство Value называется Position. Если его ис-

пользовать "в одиночку", то текущее значение (Position) будет не видно пользователю. Поэтому его чаще всего используют совместно с TEdit. Для этого имеется свойство Associate. Используя раскрывающийся список, мож-

но указать нужный компонент. В этом случае TUpDown "прижимается" к вы-

бранному компоненту и оба компонента превращаются в один, но только визу-

ально! В программе обращаться к ним надо отдельно по своим именам. Свой-

ством AlignButton можно управлять расположением TUpDown вокруг ком-

понента (слева, справа, сверху, снизу). Также имеется свойство Orientation,

позволяющее управлять положением кнопок TUpDown (вертикально или гори-

зонтально). И, наконец, свойство Wrap определяет, что будет происходить, ес-

ли пользователь попытается ввести значение больше максимального или мень-

ше минимального. При Wrap=false ввод числа с помощью кнопок вне ука-

занного диапазона (Min..Max) блокируется, а при Wrap=true происходит автоматический переход с Min на Max при нажатии кнопки на уменьшение и с Max на Min при нажатии кнопки на увеличение. При вводе с клавиатуры сле-

548

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

дует помнить, что этот компонент абсолютно не защищен от ввода недопусти-

мых символов.

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

Итак, мы с вами рассмотрели способы организации ввода и контроля чи-

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

6.3.9 Тестирование и отладка программы

Какие бывают виды ошибок?

Ошибки можно разделить на три группы. К первой относятся так называе-

мые синтаксические ошибки. Это ошибки, допущенные непосредственно в мо-

мент кодирования, т.е. записи (набора в редакторе исходного кода) текста про-

граммы. Такие ошибки легче всего находить и исправлять, так как компилятор сам укажет на такие ошибки.

Ко второй группе ошибок относятся так называемые логические ошибки или их еще называют ошибками времени исполнения. Иностранные програм-

мисты их называют bugs – жучки. Логические ошибки проявляются во время запуска приложения. В большинстве случаев, логические ошибки приводят к получению неверных результатов. Очень часто приложение завершается ава-

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

ется ошибка. Однако бывают ошибки, которые находятся с большим трудом.

549

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

Третья группа ошибок – это алгоритмические ошибки. Это такие ошибки,

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

На практике довольно трудно сразу определить, к какой группе относится та или иная ошибка – к логической или алгоритмической. Если программа вы-

дает неправильные результаты (но работает!), то следует, прежде всего, прове-

рить сам алгоритм решения задачи. И если обнаруживается ошибка в алгорит-

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

Процесс обнаружения алгоритмических ошибок называется тестировани-

ем. При тестировании задается некоторый ряд входных данных, называемых модельными данными, для которых заранее известен результат (вспомните за-

дачу вычисления значений синуса, разд. 2.1.26) или для которых можно "вруч-

ную" вычислить требуемый результат. Например, если это программа начисле-

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

если программа сортирует какие-то данные, можно просто посмотреть на полу-

ченные результаты и определить, правильно программа работает или нет.

Процесс поиска, обнаружения и исправления логических ошибок называ-

ется отладкой. В основном процесс отладки сводится к определению в коде программы того места, где "сидит" ошибка (жучок!). Для отладки программы в

Lazarus имеются несколько полезных инструментов.

Точки останова (Breakpoints). Выполнение программы приостанавливает-

ся по достижению некоторого места (строки кода). Точку останова задает сам программист. Для этого надо в редакторе исходного кода просто щелкнуть мышью по полю, где показаны номера строк кода напротив нужной строки.

Точка останова будет выделена красным цветом и помечена галочкой, рис. 6.35.

При запуске программы отладчик выполнит все операторы до точки останова и остановит выполнение программы. Далее вы можете продолжить выполнение

550

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

программы пошагово.

Пошаговое выполнение с входом. При нажатии клавиши F7 будут выпол-

нены все операторы текущей строки (поэтому рекомендуется располагать в строке строго по одному оператору, чтобы иметь возможность контролировать выполнение каждого оператора в отдельности). Каждое последующее нажатие клавиши F7 вызовет выполнение оператора в следующей строке. Выполняемый в данный момент оператор будет выделен серым цветом, а ее номер помечен зеленой стрелкой, рис. 6.35. Если в коде встречается вызов процедуры или функции, то будут выполнены все операторы тела этой процедуры (функции)

также в пошаговом режиме.

Пошаговое выполнение в обход. При каждом нажатии клавиши F8 также будут выполнены все операторы текущей строки. Если в коде встречается вы-

зов процедуры или функции, то будут выполнены все операторы тела процеду-

ры (функции) без входа, т.е. "сразу" и указатель будет установлен на следую-

щей после вызова подпрограммы строке.

Окно наблюдений. Пожалуй, самый главный и полезный инструмент от-

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

ще открыть комбинацией клавиш <Ctrl+Alt+W>. Вид окна наблюдений пока-

зан на рисунке 6.36. Чтобы добавить новую переменную щелкните правой кла-

вишей в окне наблюдений, в открывшемся диалоговом окне введите имя пере-

менной или выражение, рис. 6.37. Можно назначить постоянное местоположе-

ние окна наблюдений в настройках окружения, например, так как показано на рис. 6.35. Окно наблюдений имеет такую же ширину, что и инспектор объектов и частично его перекрывает. Это логично, так как в момент отладки инспектор объектов нам не нужен и окно наблюдений не мешает нам работать в редакторе

551

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

исходного кода. Увидеть значение переменной можно также просто наведя мышь на эту переменную в редакторе исходного кода. На рисунке 6.37. показан момент, когда мышь была наведена на переменную n в 56 строке редактора ко-

да.

Рис. 6.35. Пошаговое выполнение приложения

Рис. 6.36. Окно списка наблюдений

Рис. 6.37. Окно добавления новой переменной в список наблюдения

Принято считать, что отладка предшествует тестированию. То есть про-

552

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]