- •Предисловие
- •Основы программирования
- •Понятие алгоритма.
- •Алгоритм Евклида.
- •Задача о поездах и мухе
- •Вместо лирического отступления
- •Этапы подготовки задачи для решения на компьютере
- •Примеры разработки алгоритмов
- •Решение квадратного уравнения.
- •Вычисление интегралов
- •Обработка результатов эксперимента
- •Решение системы линейных алгебраических уравнений
- •Введение в язык программирования 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
____________________________________________________________________
procedure TForm1.Button1Click(Sender: TObject); begin
if ComboBox1.ItemIndex = - 1 then ComboBox1.Items[oldItemIndex]:= ComboBox1.Text;
end;
procedure TForm1.Button2Click(Sender: TObject); begin
if ComboBox1.ItemIndex = - 1 then ComboBox1.Items.Add(ComboBox1.Text);
end; initialization
{$I unit1.lrs} end.
Компоненты выбора – переключатели
Эта группа компонентов реализуют такие элементы графического интер-
фейса, как флажки и переключатели. Как было сказано в 6.1. с помощью таких элементов можно осуществлять выбор и установку каких-либо опций, режимов,
состояний и т.д. Таким образом, в этих компонентах, в отличие от таких ком-
понентов как TListBox и TComboBox, производится выбор не данных как та-
ковых, а каких-то свойств и характеристик объектов, используемых в приложе-
нии. Выбор пользователя в этих компонентах подразумевает ответ пользовате-
ля типа "Да", "Нет". Рассмотрим компонент TCheckBox.
Этот компонент реализует элемент графического интерфейса флажок.
Применяется также термин индикатор. Многие программисты говорят также просто "чек бокс". Обычно в диалоговом окне присутствуют несколько флаж-
ков. Состояние каждого флажка не зависит от других флажков, поэтому часто употребляется термин группа независимых переключателей, рис. 6.68.
638
Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
Рис. 6.68. Вид компонента TCheckBox
Основные свойства компонента:
State – компонент TCheckBox может находиться в общем случае в трех состояниях:
1.Флажок выбран, в окошке компонента стоит галочка. Этому состоянию соответствует значение State=cbChecked;
2.Флажок не выбран, в окошке компонента галочка отсутствует. Этому со-
стоянию соответствует значение State=cbUnchecked;
3. Флажок выбран, в окошке компонента стоит галочка. Но само окошко и галочка серого цвета. Этому состоянию соответствует значение
State=cbGrayed; Это, так называемое, промежуточное состояние. Чаще всего применяется в тех случаях, когда тот или иной режим, та или иная оп-
ция должна быть обязательно выбрана (задействована), но так, чтобы поль-
зователь был проинформирован об этом. Очень часто это состояние исполь-
зуется в комбинации со свойством Enabled=false, т.е. данная опция ав-
томатически установлена, пользователь об этом знает, но менять эту опцию нельзя.
AllowGrayed – разрешает или не разрешает применение состояния
State=cbGrayed. Если AllowGrayed= false (значение по умолчанию), то возможны только два состояния, флажок выбран и флажок не выбран;
Checked – если Checked = true, то флажок выбран. Значение State= cbChecked. Если же Checked = false, то State равен либо cbUnchecked, либо cbGrayed;
639
6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
Caption – задает текст, связанный с флажком;
Для того чтобы определить выбран флажок или нет достаточно записать
оператор
if CheckBox1.Checked then <действия, если флажок выбран> else <действия, если флажок не выбран>;
или
case CheckBox1.State of
cbChecked: < соответствующие действия >; cbUnchecked: < соответствующие действия >; cbGrayed: < соответствующие действия >;
end;
Рассмотрим компонент, реализующий переключатель TRadioButton,
рис. 6.69. Говорят также радиокнопка или зависимый переключатель.
Рис. 6.69. Вид компонента TRadioButton
Следует заметить, что использование одного переключателя не имеет смысла, поскольку механизм переключателей предназначен для организации выбора пользователем только одного из нескольких возможных режимов (оп-
ций, свойств и т.д.). Поэтому необходимо использование как минимум двух компонентов TRadioButton. Свойства компонента:
640
Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
Checked – определяет включен или не включен переключатель. Если переключатель включен, то он отмечается точкой внутри кружочка, а
Checked= true;
Caption – задает текст надписи рядом с кнопкой.
Обычно компоненты TRadioButton размещаются в специальном компо-
ненте-контейнере (об этом чуть позже), но можно положить их и на форму. Как только вы разместите несколько компонентов TRadioButton на форму, они начинают функционировать как единая группа переключателей. Т.е. даже на этапе проектирования вы не сможете установить Checked= true одновре-
менно нескольким радиокнопкам, а можете установить это свойство равным true только у одного переключателя!
Для удобной работы с группами компонентов TCheckBox и TRadioButton существуют специальные контейнеры TCheckGroup и TRadioGroup. Контейнер это такой компонент, на котором можно размещать другие компоненты. Иначе их еще называют панелями, рис. 6.70.
Рис. 6.70. Компоненты-контейнеры TCheckGroup и TRadioGroup
Общие свойства контейнеров TCheckGroup и TRadioGroup:
Caption – текст заголовка панели;
641
6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
Columns – задает количество столбцов. На рис. 6.70. панель CheckGroup1
содержит два столбца, а панель RadioGroup1 состоит из одного столбца;
ColumnLayout – задает способ размещения дочерних компонентов в столбцах. Имеет значения: clHorizontalThenVertical – компоненты размещаются по горизонтали, clVerticalThenHorizontal – компоненты размещаются по вертикали. На рисунке флажки размещены по горизонтали;
Items – содержит список строк типа TStrings с текстами заголовков со-
ответствующих компонентов. Строки можно формировать как при проектиро-
вании, так и программно. При проектировании необходимо раскрыть редактор строк Items и ввести необходимые строки. Сколько было введено строк,
столько и будет создано переключателей или флажков. Доступ к тексту флажка или переключателя осуществляется по индексу Items[k], индексы как обыч-
но начинаются с нуля.
Определение того, какой элемент пользователь выбрал в компонентах
TCheckGroup и TRadioGroup различаются. Так в TCheckGroup использу-
ется свойство Checked[k], где k индекс флажка. Например:
if CheckGroup1.Checked[k]
then ShowMessage('Выбран флажок ' + IntToStr(k + 1));
В TRadioGroup для этих же целей можно использовать свойство ItemIndex, которое указывает индекс выбранного переключателя, например:
with RadioGroup1 do begin
k:= ItemIndex + 1; case ItemIndex of
0:ShowMessage('Выбран переключатель ' + IntToStr(k));
1:ShowMessage('Выбран переключатель ' + IntToStr(k));
642
Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
2: ShowMessage('Выбран переключатель ' + IntToStr(k));
else
ShowMessage('Не выбран ни один переключатель');
end;
end;
По умолчанию ItemIndex= -1. Это означает, что ни один переключа-
тель не выбран. Чтобы программно или при проектировании указать выбран-
ный переключатель достаточно ItemIndex присвоить значение из допусти-
мого диапазона.
В рассмотренных нами контейнерах TCheckGroup, TRadioGroup рас-
положение переключателей и флажков формируется автоматически самим кон-
тейнером. Иногда бывает удобнее применить другой контейнер, а именно
TGroupBox, где можно более рационально использовать площадь контейнера.
Кроме того, в TGroupBox можно размещать любые компоненты. Разница от рассмотренных ранее специальных контейнеров TCheckGroup,
TRadioGroup заключается в том, что необходимо использовать компоненты
TCheckBox и TRadioButton.
Внешний вид рассмотренных компонентов приведен на рис. 6.71.
Рис. 6.71. Компонент-контейнер TGroupBox
643