- •Предисловие
- •Основы программирования
- •Понятие алгоритма.
- •Алгоритм Евклида.
- •Задача о поездах и мухе
- •Вместо лирического отступления
- •Этапы подготовки задачи для решения на компьютере
- •Примеры разработки алгоритмов
- •Решение квадратного уравнения.
- •Вычисление интегралов
- •Обработка результатов эксперимента
- •Решение системы линейных алгебраических уравнений
- •Введение в язык программирования Pascal
- •Основные элементы языка
- •Переменные. Стандартные типы.
- •Операции отношения
- •Раздел описаний переменных
- •Выражения. Порядок выполнения операций.
- •Константы
- •Комментарии в программе
- •Операторы
- •2.1.7.1. Оператор присваивания
- •2.1.7.2. Операторы ввода/вывода
- •2.1.7.3. Операторы инкремента и декремента
- •Среда разработки Lazarus
- •Русский язык в консольных приложениях
- •Первая программа
- •Открытие существующего проекта
- •Другие способы создания консольных приложений
- •Типовой пустой проект
- •Операции с целыми числами
- •Вместо лирического отступления 2
- •Стандартные функции с целыми аргументами
- •Операции с вещественными числами (тип real).
- •Форматирование вывода
- •Одновременное использование вещественных и целых чисел.
- •Другие стандартные функции с вещественными аргументами
- •Булевы переменные
- •Условные операторы.
- •2.1.22.1 Оператор if …. then
- •2.1.22.2. Оператор if …then ... else
- •Операторы цикла
- •2.1.23.1. Оператор цикла с предусловием
- •2.1.23.2. Оператор цикла с постусловием
- •2.1.23.3. Оператор цикла с параметром.
- •2.1.23.4. Второй вариант оператора цикла с параметром
- •Оператор выбора case
- •Организация простейшего контроля ввода данных.
- •Вычисление сумм сходящихся рядов
- •Реализация некоторых алгоритмов главы 1.
- •Программа решения задачи о поездах и мухе
- •Программа вычисления определенного интеграла
- •Более сложные элементы языка
- •Общая структура Паскаль – программы
- •Процедуры и функции
- •3.1.1.1 Структура процедуры
- •3.1.1.2. Структура функции
- •3.1.1.3 Глобальные и локальные переменные
- •3.1.1.4 Способы передачи параметров
- •3.1.1.5 Процедуры завершения
- •Еще раз о типах данных
- •Классификация типов данных
- •3.2.1.1 Целый тип
- •3.2.1.2. Интервальный тип
- •3.2.1.3. Перечислимый тип
- •3.2.1.4. Множества
- •3.2.1.5. Логический тип
- •3.2.1.6. Вещественный тип
- •3.2.1.7. Указатели
- •Обработка символьной информации в Паскале
- •Символьные и строковые типы данных.
- •3.3.1.1. Тип Char
- •3.3.1.2. Функции для работы с символами
- •3.3.1.3. Тип String
- •3.3.1.4. Строковые процедуры и функции
- •Массивы
- •Динамические массивы
- •Программа решения системы линейных алгебраических уравнений методом Гаусса
- •3.4.1.1. Вариант 1 – с goto
- •3.4.1.2. Вариант 2 – без goto
- •3.4.1.3. Вариант 3 – наилучшая реализация
- •Модули в Паскале
- •Структура модуля
- •Системные модули
- •3.5.2.1. Модуль CRT
- •Файлы
- •Тип данных – запись
- •Файловые типы
- •Процедуры для работы с файлами
- •3.6.3.1. Общие процедуры для работы с файлами всех типов
- •3.6.3.2. Процедуры для работы с текстовыми файлами
- •3.6.3.3. Процедуры для работы с типизированными файлами
- •3.6.3.4. Процедуры для работы с нетипизированными файлами
- •3.6.3.5. Организация контроля ввода/вывода при работе файлами
- •3.6.3.6. Создание простой базы данных с типизированными файлами.
- •Алгоритмы сортировки
- •Обменная сортировка (метод "пузырька")
- •Сортировка выбором
- •Сортировка вставками
- •Метод быстрой сортировки
- •Алгоритмы поиска
- •Поиск в массивах
- •Вставка и удаление элементов в упорядоченном массиве
- •Динамические структуры данных
- •Представление в памяти компьютера динамических структур.
- •Реализация стека с помощью массивов
- •Указатели
- •Стандартные операции с линейными списками
- •Реализация динамических структур линейными списками
- •4.3.6.1. Реализация стека
- •4.3.6.2. Реализация очереди с помощью линейного списка
- •4.3.6.3. Реализация двоичного дерева с помощью линейного списка
- •Сортировка и поиск с помощью двоичного дерева
- •Три источника и три составные части ООП.
- •Классы и объекты.
- •Обращение к членам класса.
- •Инкапсуляция
- •Спецификаторы доступа.
- •Свойства.
- •Наследование
- •Полиморфизм
- •Раннее связывание.
- •Позднее связывание.
- •Конструкторы и деструкторы.
- •Элементы графического интерфейса
- •Различия между консольными и графическими приложениями
- •Визуальное программирование в среде Lazarus
- •Создание графического приложения
- •Форма и ее основные свойства
- •Компоненты
- •Обработчики событий
- •Простейшие компоненты
- •6.3.5.1. Компонент TLabel
- •6.3.5.2. Кнопки TButton, TBitBtn и TSpeedButton
- •6.3.6.1. Компонент TEdit
- •6.3.6.2. Компонент TLabeledEdit
- •6.3.7.1. Компонент TMaskEdit
- •Специальные компоненты для ввода чисел
- •Тестирование и отладка программы
- •Компоненты отображения и выбора данных
- •6.3.10.1. Компонент TMemo
- •6.3.10.2. Компонент TStringGrid
- •6.3.10.3. Компоненты выбора
- •Компонент TListBox
- •Компонент TComboBox
- •Компоненты выбора – переключатели
- •6.3.10.4. Компоненты отображения структурированных данных
- •Компонент TTreeView
- •Компонент TListView
- •Организация меню. Механизм действий - Actions
- •6.3.11.1. Компонент TMainMenu
- •6.3.11.2. Компонент TToolBar
- •6.3.11.3. Компонент TActionList
- •6.3.11.4. Создание приложений с изменяемыми размерами окон
- •Послесловие
- •Литература
- •Алфавитный указатель
6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
файла, пункт меню "Вычислить" надо сделать доступным, а пункты "График экспериментальных точек" и "Подобранная кривая" по-прежнему недоступны-
ми. Только после того, как будут выполнены необходимые вычисления, пункты
"График экспериментальных точек" и "Подобранная кривая" становятся дос-
тупными.
6.3.11.2. Компонент TToolBar
Если в вашей программе имеется достаточно большое и разветвленное ме-
ню, то почти всегда имеет смысл добавить в программу так называемые кнопки быстрого доступа. Эти кнопки будут дублировать наиболее часто используемые пункты меню. Например, если в программе открывается много файлов, то од-
ним из удобств, предоставляемых пользователю, будет наличие кнопки для бы-
строго доступа к этой операции. В сколько-нибудь больших программах обыч-
но требуется разместить несколько кнопок быстрого доступа. Однако если они разбросаны по разным местам, то это затрудняет работу пользователя. Чаще всего кнопки быстрого доступа объединяют в виде инструментальной панели.
Компонент TToolBar представляет собой как раз панель для размещения кнопок быстрого доступа. В принципе в этот компонент можно вставлять лю-
бые компоненты, но поскольку он предназначен, прежде всего, для создания инструментальных панелей, в него и помещают кнопки. Причем TToolBar со-
держит в себе специальный компонент TToolButton – инструментальная кнопка. Для того чтобы поместить инструментальную кнопку в TToolBar на-
жмите правую клавишу мыши и выберите пункт NewButton, рис. 6.94.
Рис. 6.94. Добавление новой кнопки
736
Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
Изображение на кнопке задается свойством ImageIndex и определяет индекс изображения в компоненте TImageList. В момент выполнения при-
ложения некоторые кнопки на инструментальной панели по тем или иным при-
чинам могут быть недоступны, например, до выполнения определенных усло-
вий. Программист может для этих кнопок указать другие изображения. Для этого нужно поместить на форму еще один компонент TImageList и в свой-
стве DisabledImages указать его имя. Точно так же свойство HotImages
позволяет указать контейнер изображений для кнопок, когда над ними прохо-
дит указатель мыши. На практике, чаще всего, предпочитают все же иметь один контейнер изображений для всех случаев.
New Checkbutton задает разновидность кнопки, которая после нажатия на нее остается в нажатом состоянии. Это так называемая западающая кнопка.
Чтобы отжать ее необходимо нажать на нее еще раз.
New Separator задает разделитель (сепаратор). Позволяет разделить группы кнопок по функциональному назначению. Во время выполнения при-
ложения на этом месте появляются две вертикальные линии.
New Divider тоже разделитель, но в момент выполнения появляется од-
на вертикальная линия.
Этим четырем разновидностям кнопок соответствуют следующие значения свойства Style:
tbsButton – обычная инструментальная кнопка;
tbsCheck – западающая кнопка;
tbsSeparator – двойной разделитель;
tbsDivider – одинарный разделитель.
Кроме того, свойство Style имеет еще одно значение tbsDropDown.
При нажатии на кнопку появляется выпадающее меню. Но для этого надо в свойстве MenuItem указать имя соответствующего пункта меню. Если при проектировании этого пункта меню были заданы такие свойства, как
737
6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
ImageIndex, Hint, Enabled, Visible, то все эти свойства автоматически присвоятся и данной кнопке.
Свойство Caption позволяет вывести рядом с кнопкой некоторый текст,
при этом текст будет виден, если свойство ShowCaptions компонента
TToolBar установлено в true. Обычно в инструментальных панелях тексты кнопок не показывают, но тогда важное значение приобретает свойство Hint
(подсказка). Ведь даже если рисунок кнопки достаточно информативен, поль-
зователю иногда бывает трудно определить, для чего предназначена эта кнопка.
Свойство Hint: string позволяет вывести всплывающую подсказку при наведении на кнопку указателя мыши. Подсказка будет показана при условии,
что свойство ShowHint= true.
Свойство Wrap позволяет управлять размещением кнопок в несколько ря-
дов. Если вам необходимо, чтобы после текущей кнопки следующая кнопка располагалась в новом ряду, вам нужно установить свойство Wrap текущей кнопки в true.
Давайте доработаем предыдущую программу. Поместите на форму компо-
нент и спроектируйте вид инструментальной панели как показано на рис. 6.95.
Рис. 6.95. Вид инструментальной панели приложения
Очень важно иметь в виду, что панель инструментов мы создали для того чтобы продублировать некоторые пункты меню (в нашем случае все). Обработ-
чики событий OnClick для этих пунктов уже существуют и, поэтому, нет ни-
какой необходимости писать новые обработчики! Для каждой кнопки просто укажите имена уже готовых обработчиков. Например, выделите первую инст-
рументальную кнопку. Она будет дублировать пункт меню Файл->Открыть.
738
Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
В инспекторе объектов во вкладке События в строке OnClick нажмите на кнопку с треугольником и выберите необходимый обработчик, рис. 6.96.
Рис. 6.96. Выбор нужного обработчика
В коде программы произойдут минимальные изменения. В обработчике
OnCreate формы добавьте операторы:
TB_Calculate.Enabled:= false;
TB_Graf_Exp.Enabled:= false;
TB_Graf_Curve.Enabled:= false;
Чтобы три последние кнопки были недоступны. В обработчике
Menu_OpenClick после оператора
MCalculate.Enabled:= true;
добавьте оператор
TB_Calculate.Enabled:= true;
А в обработчике MCalculateClick после оператора
Menu_Curve.Enabled:= true;
739