- •Предисловие
- •Основы программирования
- •Понятие алгоритма.
- •Алгоритм Евклида.
- •Задача о поездах и мухе
- •Вместо лирического отступления
- •Этапы подготовки задачи для решения на компьютере
- •Примеры разработки алгоритмов
- •Решение квадратного уравнения.
- •Вычисление интегралов
- •Обработка результатов эксперимента
- •Решение системы линейных алгебраических уравнений
- •Введение в язык программирования 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.1
№ п/п |
Событие |
|
Когда возникает |
|||
|
|
|
|
|
||
1. |
OnCreate |
Событие |
возникает |
при |
||
|
|
создании |
окна |
и только |
||
|
|
один раз. |
|
|
|
|
2. |
OnShow |
Это событие генерируется |
||||
|
|
непосредственно |
|
перед |
||
|
|
тем, когда окно станет ви- |
||||
|
|
димым. |
|
|
|
|
3. |
OnActivate |
Это событие генерируется, |
||||
|
|
когда окно становится ак- |
||||
|
|
тивным, то есть когда по- |
||||
|
|
лучает фокус ввода. |
|
|||
4. |
OnPaint |
Это |
событие |
возникает |
||
|
|
каждый раз при перери- |
||||
|
|
совке окна. |
|
|
||
5. |
OnReSize |
Это |
событие |
возникает |
||
|
|
каждый раз при изменении |
||||
|
|
размеров окна. |
|
|
||
6. |
OnClose |
Событие возникает при за- |
||||
|
|
крытии окна. |
|
|
||
7. |
OnKeyDown |
Событие |
наступает |
при |
||
|
|
нажатии любой клавиши. |
||||
8. |
OnKeyPress |
Событие |
наступает |
при |
||
|
|
нажатии клавиши символа. |
||||
9. |
OnKeyUp |
Событие |
возникает |
при |
||
|
|
отпускании любой клави- |
||||
|
|
ши. |
|
|
|
|
6.3. Визуальное программирование в среде Lazarus
6.3.1 Создание графического приложения
Для создания графического приложения можно в главном меню открыть пункт Файл-> Создать. Во вкладке Проект выберите пункт Приложение, рис.
6.7.
468
Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
Рис. 6.7. Создание графического приложения
Нажмите ОК.
Второй способ. Выберите пункт меню Проект, Создать проект… (рис. 6.8).
Рис. 6.8. Меню "Проект"
Выберите Приложение и нажмите ОК, рис. 6.9
469
6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
Рис. 6.9. Другой способ создания графического приложения
Кроме того, если в настройках окружения (Окружение-> Настройки ок-
ружения-> Файлы) снять галочку "Открывать последний проект при запуске" (рис. 6.10.), то Lazarus автоматически будет создавать новый проект GUI-
приложения при каждом запуске.
Рис. 6.10. Окно "Параметры IDE"
470
Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
На экране появится пустая форма, рис. 6.11.
Рис. 6.11. Форма нового проекта
Если формы не видно, нажмите клавишу F12.
В окне редактора исходного кода Lazarus автоматически создаст следую-
щий код:
unit Unit1;
{$mode objfpc}{$H+} interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs;
type
TForm1 = class(TForm) private
{private declarations } public
{public declarations }
end;
var
471
6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
Form1: TForm1;
implementation
initialization {$I unit1.lrs}
end.
Мы видим, что Lazarus создал для нас модуль со стандартным именем
Unit1. А в теле модуля создается класс TForm1 основанный на базовом классе
TForm и описывает объект – стандартное графическое окно.
Сразу же сохраните свой проект в нужной папке. Если необходимо, то соз-
дайте новую папку. При сохранении помните, что имена модуля и проекта не должны совпадать, то есть файл проекта (lpr) и файл модуля (pas) должны иметь разные имена, потому что Lazarus присваивает имя модулю (в исходном коде) такое же, какое и имя файла модуля, а программе по имени файла проек-
та. Это необходимо сделать, иначе компилятор может впоследствии не найти модуль по ссылке на него в файле проекта.
Исходный код основной программы (проекта) будет сохранен в файле с именем <Имя проекта>.lpr и имеет вид:
program project1; {$mode objfpc}{$H+} uses
{$IFDEF UNIX}{$IFDEF UseCThreads} cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset Forms, Unit1, LResources
{ you can add units after this };
472
Глава 6 Программирование приложений с графическим интерфейсом
____________________________________________________________________
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}
begin
{$I project1.lrs} Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run;
end.
Здесь в объявлении uses перечисляются модули, подключаемые в проект по умолчанию. Кроме того, Lazarus автоматически включил имя только что созданного модуля. По умолчанию это Unit1. Далее директивой
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}
для операционной системы Windows включается файл описания ресурсов. Под ресурсами понимаются ресурсы приложения: пиктограммы, курсоры, битовые образы и пр.
В исполняемой части программы содержится еще одна директива
{$I project1.lrs}
с помощью которой подключается автоматически генерируемый файл ресурсов
Lazarus. Заметьте, что это не файл ресурсов Windows.
Последние три оператора
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
473
6.3 Визуальное программирование в среде Lazarus
____________________________________________________________________
реализуют обращение к методам объекта Application. В объекте
Application собраны данные и подпрограммы, необходимые для нормаль-
ного функционирования программы в среде операционной системы. Lazarus
автоматически создает объект-программу Application для каждого нового проекта. Метод Initialize отвечает за инициализацию (первоначальную настройку) приложения. Метод CreateForm создает главную форму прило-
жения Form1 (окно приложения). После вызова метода Run осуществляется запуск нашего приложения.
Без особой необходимости не следует редактировать код проекта. Поэтому при создании проекта этот код не виден. Lazarus "скрывает" этот код от из-
лишне любопытных. Но, если "очень хочется", то можно посмотреть его в ме-
ню Проект->Просмотреть исходный код проекта или открыть файл проекта с расширением .lpr любым текстовым редактором.
А исходный код нашего приложения будет сохранен в файле <имя моду-
ля>.pas (по умолчанию Unit1.pas).
Откомпилируйте и выполните свое приложение. Вы увидите пустое окно.
Ну и что тут такого, скажете вы. По большому счету вы правы, ничего особен-
ного. Но если вдуматься, то мы с вами только что, без видимых усилий, создали полноценное приложение с графическим интерфейсом! Окно вашей программы обладает всеми свойствами стандартных графических окон. Его можно свер-
нуть, можно развернуть во весь экран, можно менять размеры. Окно можно пе-
ремещать в любое место экрана. Так же как и любое другое окно, оно имеет строку заголовка и системное меню. Не так уж и мало! И все это на основе стандартного класса TForm. В Lazarus имеется немало таких стандартных клас-
сов, на основе которых можно создавать приложения практически любой слож-
ности!
Как уже отмечалось, класс описывает некоторый объект. Чтобы иметь возможность обращаться в программе к этому объекту, необходимо создать эк-
474