Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2942.pdf
Скачиваний:
3
Добавлен:
15.11.2022
Размер:
2.65 Mб
Скачать

Л.В. Хливненко В.В. Васильев

ПРОГРАММИРОВАНИЕ НА FREE PASCAL В LAZARUS

Часть I

Учебное пособие

Воронеж 2013

ФГБОУ ВПО «Воронежский государственный технический университет»

Л.В. Хливненко В.В. Васильев

ПРОГРАММИРОВАНИЕ НА FREE PASCAL В LAZARUS

Часть I

Утверждено Редакционно-издательским советом университета в качестве учебного пособия

Воронеж 2013

1

УДК 002 (075.8)

Хливненко Л.В. Программирование на Free Pascal в Lazarus: учеб. пособие / Л.В. Хливненко, В.В. Васильев. – Воронеж: ФГБОУ ВПО «Воронежский государственный технический университет», 2013. Ч. 1. – 146 с.

В учебном пособии рассмотрены принципы объектноориентированного программирования, основные алгоритмические конструкции и их реализация на языке программирования Free Pascal в приложении Lazarus. Приведено большое количество примеров решения задач и оформления оконных приложений.

Издание соответствует требованиям Федерального государственного образовательного стандарта высшего профессионального образования по направлению подготовки бакалавров 151900 «Конструкторско-технологическое обеспечение машиностроительных производств», профилю «Металлообрабатывающие станки и комплексы», дисциплине «Основы математического моделирования».

Учебное пособие подготовлено в электронном виде в текстовом редакторе Ms Word и содержится в файле

“freepascal_lazarus.pdf”.

Ил. 34. Библиогр.: 9 назв.

Рецензенты: кафедра функционального анализа Воронежского государственного университета (зав. кафедрой д-р физ.-мат. наук, проф. М.Е. Каменский); д-р физ.-мат. наук, проф. В.Д. Репников

©Хливненко Л.В., Васильев В.В., 2013

©Оформление. ФГБОУ ВПО

"Воронежский государственный технический университет", 2013

2

ВВЕДЕНИЕ

Курсы по методам программирования входят в учебные планы многих специальностей. Рассматриваемый в пособии учебный материал по основам программирования носит пропедевтический характер для курсов, базирующихся на применении методов вычислительной математики, в том числе для курса «Основы математического моделирования». Владение навыками составления программ необходимо для изучения имитационного моделирования.

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

Программы, выполненные в виде оконных приложений со стандартным дружественным интерфейсом, имеют привлекательный вид. Такие программы можно создавать в среде программирования Delphi.

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

Параллельное изучение Паскаля и Delphi является непростой задачей. Поскольку среда программирования Delphi базируется на языке Object Pascal, который является диалектом классического Паскаля. Идеология Delphi подразумевает, что конструкции и понятия языка Паскаль начинающему программисту уже знакомы. Получается круговая порука: чтобы работать в Delphi, необходимо знать Паскаль, а чтобы писать красивые программы на Паскале, нужно знать Delphi.

3

Заметим также, что Delphi является коммерческим продуктом. Лицензионные версии программы стоят достаточно дорого, а ознакомительные часто оказываются «слегка работающими».

Несколько лет назад авторы остановили свой выбор на визуальной среде программирования Lazarus, которая разрабатывалась как свободно-распространяемый аналог Delphi. Lazarus базируется на языке программирования FreePascal, который также является диалектом традиционного Паскаля.

Lazarus и FreePascal – развивающиеся проекты, которые совершенствуются благодаря совместному труду программистов из разных стран по примеру успешного проекта разработки операционной системы Linux.

Lazarus в отличие от Delphi является кроссплатформенной технологией программирования, предназначенной для совместного использования созданных программ с разными операционными системами.

Основным недостатком Lazarus является новизна. Многие разработчики компонент и программных средств ещё не адаптировали свои решения под данную среду. На полках книжных магазинов Вы не встретите литературу по FreePascal и Lazarus. Рекламную кампанию просто некому оплачивать.

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

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

Авторы сделали все возможное, чтобы как можно быстрее научить читателя составлять красиво оформленные про-

4

граммы. Расплатой за «быстроту» в данном случае является необходимость беглого обсуждения некоторых понятий.

Если Вы хотите извлечь максимальную пользу из чтения книги, рекомендуем скачать из Интернет Lazarus (например, по адресу www.freepascal.ru), установить программу на свой компьютер и выполнять примеры работы, описанные в пособии. Если у Вас есть стремление научиться решать задачи самостоятельно, то у Вас обязательно всё получится.

Бернард Шоу сказал: «Если Вы чему-нибудь учите человека, он никогда ничего не выучит». Учение – активный процесс. Авторы уверены, что вдумчивый читатель, двигаясь шаг за шагом по страницам пособия, со временем научиться сам составлять программы в Lazarus. Основа этой уверенности – многолетний опыт использования наших методических разработок на учебных занятиях в вузе.

Авторский подход к изложению учебного материала предполагает ёмкость и целостность подачи материала. Поскольку именно на этом фундаменте строится алгоритмическая культура, дающая основу для собственного творчества.

Учитывая тенденции настоящего времени, авторы стремились создать «дружественное» учебное пособие, которое осваивается согласно принципу «видеть и делать», а не «знать и помнить».

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

Авторы будут благодарны читателям за отзывы о пособии, вопросы и рекомендации по его улучшению. Связаться с авторами можно по электронной почте, написав письмо по адресу: hlivnenko_lv@mail.ru

5

Глава 1. БЫСТРЫЙ СТАРТ

§ 1.1. Введение в объектно-ориентированное программирование

При создании разных программах часто приходится сталкиваться с однотипными с точки зрения программирования ситуациями. Например, выводить окно с предупреждением о невозможности отмены какого-либо действия. Естественным в таких случаях является использование библиотек, содержащих подпрограммы (процедуры) для выполнения стандартных действий. Такие “заготовки” можно использовать в качестве строительных “кубиков” при создании программ.

В Паскале эта идея была реализована в виде возможности подключения к программе модулей - библиотек готовых подпрограмм.

Для того чтобы подключить к программе модуль, ниже служебного слова Program нужно написать:

Uses <список модулей через запятую>;

Программист может не только использовать стандартные библиотеки процедур, но и создавать свои собственные модули. Текст модуля хранится в отдельном файле

<File’s_Name>.pas.

Модуль имеет следующую структуру:

UNIT <имя_модуля>; INTERFACE <интерфейсная часть>

IMPLEMENTATION <исполняемая часть> {BEGIN <инициирующая часть>}

END.

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

6

Исполняемая часть состоит из подпрограмм. В исполняемой части могут объявляться локальные для модуля типы, константы, переменные и метки.

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

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

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

В диалекте языка Free Pascal класс описывается так:

Type <Имя_класса> = Class

<Список полей, методов и свойств класса>

End;

Класс служит заготовкой (шаблоном, образцом) для создания конкретных экземпляров класса (объектов) и классов-потомков. Например, командная кнопка Button1, добавленная на форму, принадлежит описанному в Lazarus классу кнопок TButton.

В основу идеи классов и объектно-ориентированного программирования положены три основных принципа – инкапсуляция, наследование и полиморфизм.

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

7

ню приложения. Библиотека классов Lazarus – это стандартный набор шаблонов, из которых можно строить программы.

Шаблоны можно дополнять новыми возможностями и получать новые «поколения» классов.

Наследование – создание новых классов на базе имеющихся с возможностью использования их составляющих. Класс-потомок объявляется так:

Type <Имя_класса_потомка> = Class(<Имя_класса_родителя>) <Список новых полей, методов и свойств класса>

End;

Объект, принадлежащий классу потомку, может использовать поля, свойства и методы класса-родителя. Может использовать также и новые уникальные составляющие. Если в классе-потомке описан новый метод, одноименный с методом класса-родителя, то «говорят», что в потомке «перекрыт» метод родителя.

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

Поля - инкапсулированные в классе данные (величины объявленного в описании типа). Например,

Type TMy_Class = Class

ASymField: Char; …

End;

Согласно принципу инкапсуляции обращаться к полям класса можно с помощью свойств и методов класса.

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

Рассмотрим пример описания и составления методов

My_Method1 (процедура) и My_Method2 (функция).

Type TMy_Class = Class (* описание класса *)

8

aSymField: Char; procedure My_Method1; function My_Method2: Byte;

End;

procedure TMy_Class.My_Method1;

(* описание поля *) (* описание метода *) (* описание метода *)

(* реализация метода - процедуры *) begin блок операторов

end;

function TMy_Class.My_Method2: Byte;

(* реализация метода - функции *) begin блок операторов

end;

Подпрограммы-функции всегда возвращают в вызывающую их программу одно значение объявленного после заголовка функции типа.

Всостав любого класса входят два специальных метода

конструктор и деструктор.

Конструктор создает объект, т.е. конкретный представитель данного класса. При создании объекта для него выделяется область в динамической памяти.

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

тела программы.

Деструктор удаляет объект. При удалении объекта освобождается занимаемая этим объектом область динамической памяти.

Конструктор объявляется в классе с помощью специального слова Constructor. Деструктор – с помощью слова

Destructor.

9

Свойства – способы доступа к полям. В свойстве указаны методы, с помощью которых читается и выводится значение поля, связанного с данным свойством. Свойства в классе объявляются с помощью специального слова – property. Например,

property SymValue: Char read GetField write SetField;

Описание класса может содержать четыре секции, предваряемые служебными словами published (декларирован-

ные), private (личные), protected (защищенные), public (дос-

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

В секции published перечисляются поля, методы и свойства, которые должны быть доступны (видны в Инспекторе объектов) на этапе конструирования программы. Составляющие класса из секции published можно вызывать в любом другом модуле программы. Секция используется при разработке проекта.

Секция private максимально сужает зону видимости. Описанные в ней поля, методы и свойства доступны только в методах данного класса и в подпрограммах, находящихся в том же модуле.

Составляющие класса, описанные в секции protected, доступны в методах самого класса, а также в методах потомков, находящихся даже в других модулях.

Секция public максимально открывает зону видимости. Описанные в ней составляющие класса доступны в любом модуле программы. Любая из секций может быть пустой и может отсутствовать.

Если метод класса-родителя будет перекрыт в классепотомке, то при описании метода в классе-родителе за ним ставят директиву virtual (виртуальный), а при описании метода в классе-потомке - директиву override (перекрытый).

10

Динамически перекрываемые методы, которые не производят никаких действий, называются абстрактными. После описания таких методов ставятся две директивы – virtual; abstract; Такие методы обязаны перекрываться в потомках. Вызов абстрактного метода приводит к сообщению об ошибке. Абстрактные методы служат заготовками для настоящих методов.

Классы, содержащие абстрактные методы, называются абстрактными. В таких классах собраны общие свойства их неабстрактных потомков. Объекты абстрактных классов никогда не создаются. Абстрактные классы служат для создания на их базе новых классов, обладающих общими свойствами.

Рис. 1.1.1. Фрагмент иерархии классов в Lazarus.

Абстрактный класс TObject служит основой - родителем начинающегося с него дерева классов. В классе TObject описаны общие для всех классов методы.

11

Например, потомками класса TObject являются классы

Exeption (Исключения), TStream (Потоки) и TPersistent. На рис. 1.1.1 показан небольшой фрагмент имеющейся объектной модели, принятой в Lazarus.

Класс Exeption используется для обработки исключительных ситуаций, возникающих при нештатной работе программы. Например, при попытке открыть несуществующий файл или при делении на ноль. При появлении исключительной ситуации среда перехватывает управление программой и выдает (или отмечает) сообщение об ошибке.

Класс TStream используется для работы с потоками. Основные свойства потока данных – размер в байтах (свойство Size) и текущая позиция (свойство Position). В потомках класса TStream описаны необходимые методы для чтения объектов из потока и их записи в поток. При сохранении объекта, в поток записывается, в том числе и уникальный идентификатор класса, к которому принадлежит объект. При чтении объекта из потока по идентификатору класса определяется количество байт, отведенное под объект в потоке. В способности хранить в одном потоке объекты разных классов реализуется полиморфизм потоков.

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

TComponent (предок всех компонент, в том числе самого при-

ложения TApplication и формы TForm), TCanvas (содержит набор примитив для рисования).

Большинство потомком класса TComponent (компоненты) могут размещены на форме. Различают невизуальные и визуальные компоненты.

Невизуальные компоненты (например, экземпляры классов TMenu, TTimer) могут быть добавлены на макет формы и использованы при работе приложения, но во время работы программы они будут невидны (как, например, таймер)

12

или преобразованы (например, в главное или контекстное меню).

Визуальные компоненты, происходящие от класса

TControl, делятся на графические и оконные компоненты. Графические компоненты происходят от класса TGraphicControl и не имеют фокуса ввода (например, классы TLabel – надписи, TImage - картинки). Оконные компоненты происходят от класса TWinControl и имеют фокуса ввода (на-

пример, классы TButton – кнопки, TEdit - поля). TCustom-

классы предназначены для создания оригинальных пользова-

тельских компонент (например, круглых форм).

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

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

После того, как интерфейс формы готов и настроены через удобного мастера под названием Инспектор объектов свойства компонент формы, возникает следущая важная задача автоматизации работы приложения – написания программ, которые и определяют его работу.

С каждым объектом связан набор событий, «понимаемых» этим объектом. Событие – это пакет информации, воспринимаемый объектом. Например, компонент класса TButton - «командная кнопка» понимает события от мыши

(OnClick – левый клик, OnMouseMove – перемещение курсора мыши и др.) и события от клавиатуры (OnKeyPress – нажата клавиша, OnKeyUp – отпущена клавиша и др.).

Сами по себе события не производят никаких действий в программе. Реакцию приложения на появление события

13

нужно программировать. Для этого программисту нужно написать программу - обработчик, которая будет запускаться при появлении события, связанного с конкретным объектом. Например, при нажатии кнопки, выбора пункта меню, ввода данных в поле и т.д.

Понятно, что унифицировать такие обработчики также бессмысленно, как создавать машину, которая будет за когото делать утреннюю зарядку. Программы-обработчики пишутся на одном из существующих языков программирования. Любая визуальная среда программирования строиться на базе одного (или нескольких) из известных языков. Среда визуального программирования Lazarus построена на базе языка Free Pascal, являющегося диалектом языка Object Pascal, используемого в Delphi.

Таким образом, разработка программы состоит в создании всех окон, настройке свойств их визуальных и невизуальных компонент, программировании обработчиков собы-

тий (щелчков мыши, кликов по кнопкам, изменений значения полей и т.д.).

При запуске программы на исполнение встроенный в Lazarus компилятор автоматически преобразует всю описанную программистом информацию в исполняемый код программы.

Интегрированная среда разработки

IDE (Integrated Development Environment) или интегри-

рованная среда разработки – это среда, в которой проек-

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

Дистрибутив Lazarus в виде единственного установочного файла можно скачать из Интернет (например, по адресу www.freepascal.ru). Размер варианта lazarus-0.9.28.2-fpc-2.2.4- win32.exe составляет всего 61,5 Mb.

14

При установке среды программирования Lazarus нужно просто следовать по шагам Мастера установки. На первом шаге выбирается – русский язык. Затем следует согласиться с условиями лицензионного соглашения. Выбрать папку для установки. По умолчанию: C:\lazarus. Выбрать папку в меню Пуск и подождать несколько минут, пока программа установится на компьютер.

Рис. 1.1.2. Окно завершения установки Lazarus.

Запустить Lazarus можно по команде Пуск|Программы| Lazarus|Lazarus или с помощью созданного на рабочем столе ярлыка.

Окно среды программирования Lazarus внешне очень похоже на Delphi (сильнее, чем бюджетная версия Delphi под названием TurboDelphi).

15

Окно Lazarus содержит строку заголовка с названием и версией программы и названием открытого проекта (по умол-

чанию project1).

Рис. 1.1.3. Основное окно среды программирования Lazarus.

Ниже расположена строка меню Файл, Правка, Поиск,

Просмотр, Проект, Запуск, Компоненты, Инструменты, Окружение, Окна, Справка.

Справа от панели быстрых кнопок находятся страницы компонентов. На каждой из них находится пиктограммы компонентов. Это и есть те самые “строительные кубики” - классы, из экземпляров которых собирается проект. Названия компонентов можно узнать по подсказке, всплывающей при наведении указателя мыши на пиктограмму компонента.

Попробуйте!

Страница компонентов Standard (Стандартные) включает основные элементы оконного интерфейса. К ним относят TMainMenu (главное меню), TPopupMenu (всплываю-

16

щее меню), TLabel (надписи), TEdit (поля), TMemo (многострочные поля), TButton (кнопки) и др.

Компоненты страницы Additional (Дополнительные)

включают TImage (рисунки), TSpeedButton (быстрые кнопки),

TShape (фигуры) и т.д.

Набор классов большей частью пересекается с классами Delphi. Существенные отличия касаются разработки баз данных. Свободная среда программирования Lazarus ориентирована на интеграцию со свободными СУБД, такими как MySQL.

Поместить компонент на форму можно, выбрав компонент на палитре, а затем кликнув по форме (либо дважды кликнув по пиктограмме компонента). Попробуйте!

Окно формы с заголовком Form1 и окно Редактора исходного кода модуля формы перекрывают друг друга. Переключаться между ними можно по нажатию клавиши F12.

Шаблон модуля формы создается автоматически.

unit Unit1;

Заголовок модуля

{$mode objfpc}{$H+}

Директива компилятору о том, что

 

текст программы написана на Object

interface

FreePascal

Интерфейсная часть модуля

uses Classes, SysUtils,

Подключение к пользовательскому

LResources, Forms, Con-

модулю стандартных библиотечных

trols, Graphics, Dialogs;

модулей

type

Описание класса TForm1 – потомка

TForm1 = class(TForm)

класса TForm

private

Раздел описания скрытых объек-

{ Private declarations }

тов, доступных только в модуле

public

Раздел описания объектов, доступ-

{ Public declarations }

ных как в данном модуле, так и из

end;

других модулей

var

Описание экземпляра Form1 класса

Form1: TForm1;

TForm1

implementation

Исполняемая часть модуля

17

initialization

Инициирующая часть модуля

{$I unit1.lrs}

Подключение ресурсного файла

end.

Конец кода модуля

Шаблон модуля формы будет пополняться в процессе разработки компонента проекта. При добавлении нового компонента на форму в модуль автоматически подключаются необходимые стандартные библиотеки. Сам объект при этом регистрируется в классе формы.

Слева от формы размещается Инспектор Объектов, с помощью которого задаются значения свойствам компонентов и назначаются обработчики событиям.

Вновь созданный проект содержит только один объект - саму форму. Создать новое приложение можно по команде

Проект|Создать проект... Ниже заголовка Инспектора объектов

выделен единственный пока объект - Form1:TForm1.

Здесь Form1 - имя объекта, а TForm1 - название класса, которому этот объект принадлежит. При добавлении объектов на форму в Инспекторе объектов формируется дерево объектов.

В Инспекторе объектов отображаются свойства и события только выделенного в дереве или на форме объекта!

Инспектор объектов имеет две основные закладки -

Свойства и События.

Страница Свойства Инспектора объектов содержит многочисленные свойства выделенного объекта и часто списки возможных их значений.

Например, для формы свойство Name (имя) имеет значение по умолчанию Form1. Названия компонентов можно менять. Однако их именами могут быть только правильные идентификаторы, составленные из латинских букв, цифр, знаков подчеркивания.

18

Заголовок формы задается как значение свойства Caption (заглавие). Здесь тоже можно видеть стандартный заголовок Form1. Название формы может быть произвольным.

Поменяйте значение свойства Caption формы со стандартного значения Form1 на фразу Моя форма. Для этого наберите новое название справа от свойства Caption в Инспекторе объектов. Нажмите Enter. Обратите внимание на изменение заголовка формы.

Значения некоторых свойств не набираются на клавиатуре, а выбираются из готового списка возможных значений. Такие списки значений есть у свойств Align (выравнивание),

AutoScroll (автоматическая прокрутка), Color (цвет) и др. Попробуйте изменить стандартный серый цвет формы.

Плюс перед свойством означает, что это группа свойств, полный список которых можно просмотреть, дважды кликнув на имени группы или кликнув по плюсу. Откройте группу свойств Font (шрифт): Charset (раскладка клавиатуры), Color (цвет символов), Name (вид шрифта), Size (размер шрифта). Измените установленные по умолчанию свойства группы

Font.

В программе также можно изменять значения свойств. Для этого нужно указать имена всех объектов, в которые вложен данный объект, разделяя имена точками, затем указать название самого объекта, точка, название свойства!

Тот факт, что свойство AutoScroll формы Form1 установлено в True (истина) означает следующее

Form1.AutoScroll:=True.

Вернемся к Инспектору объектов и откроем закладку События. Для того чтобы открыть список событий для формы, нужно кликнуть в свободном от компонент месте формы.

Попробуйте!

Ниже имени объекта Form1 появился список событий формы. Щелкнув сначала по любой строке (выбрав событие), а затем дважды правее названия события, Вы откроете окно

19

модуля формы с автоматически созданным заголовком процедуры обработки выбранного события.

Найдите событие OnClose (Закрытие) и дважды щелк-

ните в строке справа от него. При этом созданный заголовок процедуры должен иметь вид:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin end;

Между begin и end можно вписать код процедурыобработчика.

Обратите внимание на то, что в Инспекторе объектов напротив события OnClose появилась строка FormClose - признак того, что создана процедура обработки события.

Компиляция программы, запись соответствующего exe- файла на диск и запуск ее на исполнение осуществляется на-

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

Добавим на форму новый компонент - кнопку BitBtn1, клик по которой будет закрывать окно работающей программы. После выполнения примера работы 1 кнопка будет иметь

вид

.

 

 

План примера 1.

1-4. Добавление кнопки и изменение надписи на ней.

5-6. Добавление гравировки.

7-10. Написание обработчика события OnClick для кнопки.

11. Запуск программы на исполнение.

Пример работы 1:

Подсказка

1. Добавьте на форму кноп-

Страница Additional

ку BitBtn1

 

 

2. Откройте свойства объек-

Выделите кнопку BitBtn1 на

та BitBtn1

 

макете формы

20

3. Измените название кноп-

Измените значение свойства

ки с BitBtn1 на Выход

Caption

4. Увеличьте размер кнопки

Потяните за черные маркеры,

 

расположенные вокруг кнопки

На компонент BitBtn1 можно положить гравировку. Набор стандартных гравировок доступен в каталоге

C:\lazarus\images.

5. Измените

кар-

Свойство Gliph. Клик по кнопке с тремя

тинку на кнопке

точками. В окне Изображение с помо-

BitBtn1

 

щью кнопки Загрузить. Выберите файл

 

 

C:\lazarus\images\menu\menu_close.png.

 

 

Открыть. ОК.

6. Проверьте

ра-

Кликните по быстрой кнопке запуска

боту программы

или нажмите быструю клавишу F9

Попробуйте закрыть форму нажатием на кнопку Выход. Клик по кнопке пока не дает желаемого результата. Необходимо написать пользовательский обработчик события OnClick для кнопки BitBtn1, который будет состоять из единственной команды Halt (прекратить выполнение программы).

Закройте окно работающей программы обычным образом.

7. Откройте свойства

Выделите кнопку BitBtn1 на макете

объекта BitBtn1

формы

 

8. Откройте вкладку

Левый клик по ярлыку в Инспекторе

События

Объектов

 

9. Создайте процеду-

Дважды кликните в поле правее на-

ру - обработчик со-

звания события - OnClick

бытия OnClick

 

 

10. Напишите коман-

procedure Form1.BitBtn1Click (Sender:

ду Halt между begin

TObject);

halt

и end процедуры

begin

 

end;

 

11. Протестируйте ра-

или F9. Закройте форму кликом по

боту кнопки

кнопке Выход

21

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

Рис. 1.1.4. Интерфейс приложения Простой калькулятор.

План примера 2.

1-2. Создание и сохранение нового приложения.

3-4. Изменение названия и цвета формы.

5-10. Оформление надписей на форме.

11-15. Оформление полей для ввода и вывода чисел. 16-26. Оформление командных кнопок.

27-32. Написание программ – обработчиков.

 

33-34. Подключение математического модуля.

 

35-36. Тестирование и сохранение программы.

 

Пример работы 2:

Подсказка

1. Создайте новое приложе-

Проект|Создать

проект…

ние

Приложение

 

2. Сохраните модуль формы

Проект|Сохранить проект…

в новую папку под именем

 

 

unit1, а проект – под име-

 

 

нем project1

 

 

22

3. Измените название фор-

Свойство Caption в Инспек-

мы на Простой калькуля-

торе объектов

тор

 

4. Измените цвет формы

Свойство Color. Кликните по

 

 

кнопке с тремя точками и

 

 

выберите цвет

5. Создайте на форме над-

Страница Standard

пись Label1

 

6.

Измените текст надписи

Выделите Label1. Измените

на Числа:

значение свойства Caption

7. Создайте на форме над-

Страница Standard

пись Label2

 

8.

Измените текст надписи

Выделите Label2. Измените

на Операции:

значение свойства Caption

9. Создайте на форме над-

Страница Standard

пись Label3

 

10.

Измените текст надписи

Выделите Label3. Измените

на Ответ:

значение свойства Caption

11.

Добавьте поле для ввода

Страница Standard

числа Edit1

 

12.

Удалите стандартную

Выделите Edit1. Очистите

надпись Edit1

свойство Text

13.

Оформите параметры

Свойство Font. Кликните по

шрифта для поля Edit1

кнопке с тремя точками

14.

Добавьте поле для ввода

Правый клик по Edit1. Копи-

второго аргумента Edit2

ровать. Правый клик по сво-

 

 

бодному месту на форме.

 

 

Вставить

15.

Добавьте поле для выво-

Правый клик по свободному

да ответа Edit3

месту на форме. Вставить

16.

Создайте командную

Страница Standard

кнопку Button1

 

17.

Измените текст на кноп-

Выделите Button1. Измените

ке с Button1 на знак +

значение свойства Caption

23

ке с Button1 на знак +

 

18. Оформите параметры

Свойство Font. Кликните по

шрифта для кнопки Button1

кнопке с тремя точками

19.

Добавьте

командную

Правый клик по Button1. Ко-

кнопку Button2

 

пировать. Правый клик по

 

 

 

свободному месту на форме.

 

 

 

Вставить

20.

Измените текст на кноп-

Выделите Button2. Измените

ке с Button2 на знак -

значение свойства Caption

21.

Добавьте

командную

Правый клик по свободному

кнопку Button3

 

месту на форме. Вставить

22.

Измените текст на кноп-

Выделите Button3. Измените

ке с Button3 на знак *

значение свойства Caption

23.

Добавьте

командную

Правый клик по свободному

кнопку Button4

 

месту на форме. Вставить

24.

Измените текст на кноп-

Выделите Button4. Измените

ке с Button4 на знак /

значение свойства Caption

25.

Добавьте

командную

Правый клик по свободному

кнопку Button5

 

месту на форме. Вставить

26.

Измените текст на кноп-

Выделите Button5. Измените

ке с Button5 на знак ^

значение свойства Caption

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

раций (сложение, вычитание, умножение, деление или возве-

дение в степень). Результат операции над числами выводится в поле Ответ.

Программа для решения многих задач состоит из трех этапов: 1. ввод исходных данных через свойства компонент формы в память; 2. получение ответа; 3. вывод результата на экран через свойства компонент формы.

Для запоминания чисел в памяти необходимо связать их с переменными, под значения которых выделяется память в

24

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

27.

Напи-

Дважды кликните по Button1 на форме.

шите код

procedure TForm1.Button1Click(Sender:TObject);

обработки

var a, b, c : real;

события

begin

OnClick

a := StrToFloat(Edit1.Text);

компонен-

b := StrToFloat(Edit2.Text);

та

Button1

c := a + b;

операции

Edit3.Text := FloatToStr(c);

сложения +

end;

В программе все команды отделяются друг от друга точкой с запятой.

Запись var a, b, c : real используется для описания переменных с именами a, b, c, значениями которых могут быть вещественные числа.

В командах a := StrToFloat (Edit1.Text); b := StrToFloat (Edit2.Text) – производится ввод исходных данных через свойства текстовых полей Edit1 и Edit2 в переменные a и b.

Функция StrToFloat() используется для согласования типов данных, преобразуя символьную запись числа в собственно вещественное число.

В строке c := a + b происходит получение ответа как значения переменной c, расположенного в памяти.

По команде Edit3.Text := FloatToStr(c) происходит вы-

вод результата через свойство текстового поля Edit3 из переменной c.

Функция FloatToStr() преобразует вещественное число в его символьную запись.

28. Проверьте работу программы Запуск|Запуск (F9)

25

29.

Напи-

Дважды кликните по Button2 на форме.

шите код

procedure TForm1.Button2Click(Sender:TObject);

обработки

var a, b, c : real;

события

begin

OnClick

a := StrToFloat(Edit1.Text);

компонен-

b := StrToFloat(Edit2.Text);

та

Button2

c := a - b;

операции

Edit3.Text := FloatToStr(c);

вычитания -

end;

В окне редактора исходного кода Lazarus фрагменты программ можно копировать через Буфер обмена. Попробуйте скопировать обработчики и поменять знаки операций!

30.

Напи-

Дважды кликните по Button3 на форме.

шите

код

procedure TForm1.Button3Click(Sender:TObject);

обработки

var a, b, c : real;

события

 

begin

OnClick

 

a := StrToFloat(Edit1.Text);

компонен-

b := StrToFloat(Edit2.Text);

та

Button3

c := a * b;

операции

Edit3.Text := FloatToStr(c);

умножения

end;

*

 

 

 

 

31.

Напи-

Дважды кликните по Button4 на форме.

шите

код

procedure TForm1.Button4Click(Sender:TObject);

обработки

var a, b, c : real;

события

 

begin

OnClick

 

a := StrToFloat(Edit1.Text);

компонен-

b := StrToFloat(Edit2.Text);

та

Button4

c := a / b;

операции

Edit3.Text := FloatToStr(c);

деления /

end;

32. Проверьте

работу программы

Запуск|Запуск (F9)

Для программирования операции возведения в степень ab воспользуемся функцией Power(a,b) из библиотечного

26

модуля Math (математический).

33. Подключи-

В окне редактора исходного кода пополните

те модуль

список модулей:

Math к моду-

uses

лю формы

Classes, SysUtils, LResources, Forms,

 

Controls, Graphics, Dialogs, StdCtrls, Math;

34. Напишите

Дважды кликните по Button5 на форме.

код обработки

procedure TForm1.Button5Click(Sender:TOb-

события On-

ject);

Click компо-

var a, b, c : real;

нента Button5

begin

операции a := StrToFloat(Edit1.Text);

возведения в

b := StrToFloat(Edit2.Text);

степень ^

c:=Power(a,b);

 

 

 

Edit3.Text := FloatToStr(c);

 

 

end;

 

35.

Проверьте работу программы

Запуск|Запуск (F9)

36.

Сохраните результаты работы

Файл|Сохранить все

Для вычисления корней в приложении Простой калькулятор в поле Edit2 нужно вводить дробные числа как это сде-

лано на рис.1.1.4. При вводе вещественного числа в окне

формы целая часть отделяется от дробной запятой.

Следующие два параграфа написаны так, чтобы удовлетворить любознательность внимательных читателей. Здесь будет рассмотрено создание более содержательных по сравнению с простым калькулятором приложений. В новых учебных проектах будут собраны основные компоненты страниц Standard и Additional, рассмотрены их наиболее значимые свойства. Выполнив примеры работы из § 1.2 и 1.3 можно быстро научиться красиво оформлять собственные прикладные программы.

27

§ 1.2. Компоненты закладки Standard

Рассмотрим назначение основных компонент страницы

Standard:

Label - Метка (используется для создания надписей на форме).

Edit – Однострочный текстовый редактор (поле предна-

значено для ввода и отображения текста, расположенного в одной строке).

Memo - Многострочный текстовый редактор (позволяет вводить и отображать текст в несколько строк). ListBox - Список выбора (состоит из нескольких пунктов и позволяет выбирать один или несколько из них).

ComboBox - Комбинированный список выбора (гибрид списка выбора и однострочного текстового редактора).

Button - Командная кнопка (наличие события OnClick

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

Panel - Панель (служит для объединения компонент и создания панелей инструментов с пиктограммами для быстрого совершения действий).

GroupBox - Группа компонент (блок с рамкой, кото-

рый используется для объединения компонент, связанных по смыслу).

RadioButton - Радиокнопка (зависимый переключатель, способный находится в одном из двух состояний).

RadioGroup - Группа зависимых переключателей (воз-

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

CheckBox- Флажок (независимый переключатель, способный находится в одном из трех состояний: включено, неопределенно, выключено).

28

ScrollBar – Полоса прокрутки (полоса управления, позволяющая подключать программы, реагирующие на месторасположение бегунка).

MainMenu - Главное меню формы (используется для создания иерархических меню приложения). PopupMenu - Контекстное меню (вспомогательное меню, вызываемое по нажатию правой кнопки мыши).

Свойства и приемы работы с основными компонентами страницы Standard рассмотрим в процессе выполнения учебного проекта. После выполнения всех примеров работы из данной части получится приложение, окно которого представлено на рис.1.2.1. В следующей части книги рассматривается развитие данного проекта. При этом в проект добавляется новая форма, на которой будут собраны основные компоненты страницы Additional.

Описание учебного проекта:

1.Содержимое полей ввода Должность, Отдел и Филиал можно изменять. Можно набрать текст в однострочном текстовом редакторе Должность, выбрать пункт из списка Отдел, выбрать пункт из комбинированного поля со списком Филиал. После нажатия на кнопку Отразить текст в группе Сервис, содержимое всех полей ввода появится в многострочном текстовом редакторе Контроль ввода данных. После нажатия на кнопку Очистка текста, текст в поле Кон-

троль ввода данных будет удален.

2.Выбор одной из радиокнопок в группе Фон формы изменит цвет фона формы. То же произойдет, если перемещать указатель (бегунок) на полосе прокрутки.

3.В группе компонент Сервис выбор радиокнопки Белый фон поля или Салатовый фон поля позволяет выбрать цвет фона для многострочного текстового редактора Контроль ввода данных. Установка флажков Жирный шрифт и Фио-

летовый цвет определяет соответствующие параметры шрифта при отображении текста в поле Контроль ввода

29

данных. Установки из группы Сервис вступают в силу после нажатия на кнопку Обновить данные.

Рис. 1.2.1. Окно учебного приложения.

4. В приложение есть главное и контекстное меню. Главное меню включает два подменю –Файл и Настройки. В пункте Файл имеется одна команда – Выход, при выборе которой работа программы заканчивается. То же происходит при нажатии на кнопку Выход в группе элементов Сервис. В пункте Настройки главного меню доступны команды Отразить текст и Обновить данные. Они же включены в контекстное меню, которое появляется при нажатии на правую кнопку мыши в любом свободном от компонент месте формы.

30

Создание учебного проекта разбито на четыре примера рабо-

ты (что соответствует пунктам описания учебного проекта).

Компоненты Label, Edit, Memo, ListBox, ComboBox, Button, Panel, GroupBox.

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

Рис. 1.2.2. Макет формы после выполнения примера 1.

План примера 1.

1-4. Создание проекта и работа со свойствами формы. 5-10. Оформление заголовка формы на компоненте Panel1. 11-14. Работа с компонентом Label1.

31

15-17. Изменение свойств однострочного текстового поля

Edit1.

18-25. Работа со свойствами списков ListBox1 и ComboBox1. 26-28. Добавление многострочного текстового поля Memo1. 29-30. Размещение группы компонент GroupBox1.

31-34. Добавление в GroupBox1 дочерних командных кнопок

Button1-4.

35-37. Написание программ - обработчиков событий OnClick

кнопок Button1,3,4.

38-39. Проверка работы программы.

Пример работы 1:

Подсказка

1. Откройте Lazarus

Пуск|Программы|Lazarus|

 

Lazarus

При запуске Lazarus открывается последний из ранее созданных или загруженных проектов. При создании нового приложения открытая программа автоматически закрывается.

2. Создайте новое приложение.

Проект|Создать проект…

 

Приложение

3. Сохраните модуль формы в

Проект|Сохранить проект…

новую папку под именем unit1,

 

а проект – под именем project1

 

4. Измените название формы на

Свойство Caption в

Компоненты закладки

Инспекторе объектов

Standard

 

Заголовок «Ввод информации о новом сотруднике» будет оформлен через свойства компонента Panel.

5.

Положите на форму компо-

Страница Standard

нент Panel1

 

6.

Введите текст заголовка Ввод

Свойство Caption

информации о новом сотруднике

(элемент Panel должен

 

 

быть выделен!)

7.

Измените выравнивание па-

Свойство Align, значение

нели на форме

AlTop (всегда наверху)

8.

Подберите подходящий цвет

Группа свойств Font

32

и размер шрифта

 

9. Подберите подходящее на-

Группа свойств Style в

чертание для подписи на пане-

группе свойств Font (для

ли (полужирное, курсивное,…)

открытия группы нужно

 

кликнуть по плюсу)

Объект класса TPanel не имеет заголовка, как объект класса TGroupBox, и является объемным блоком общего назначения, на который можно помещать как текст, так и другие компоненты.

Некоторые свойства объекта класса TPanel:

BevelInner

Стиль внутренней рамки (обрамления

 

BevelOuter

панели).

Стиль внешней рамки (обрамления па-

 

 

нели толщиной в 1 пиксель).

Указанные два свойства могут иметь одно из четырех значений: bvLowered (вдавленный бордюр), bvNone (нет бордюра), bvRaised (выпуклый бордюр) и bvSpace (стиль по умолчанию).

BevelWidth

Толщина рамок в пикселях.

BorderStyle Стиль границы (bsNone – нет границы,

 

 

bsSingle – граница толщиной в 1 пик-

 

BorderWidth

сель).

Расстояние между внешней и внутрен-

 

FullRepaint

ней рамками в пикселях.

Разрешение либо запрет перерисовки

 

 

панели и находящихся на ней компо-

 

 

нентов при изменении ее размеров.

10. Познакомьтесь со См. список выше свойствами компонента

Panel

Добавим на форму объекты класса TLabel, предназначенные для создания текстовых надписей .

11. Создайте на форме Свойство Caption компонента

33

Alignment
LayOut
Transparent
WordWrap

надпись Должность

Label1 (компонент Label1 дол-

 

жен быть выделен!)

12. Создайте на форме

Свойство Caption компонента

надпись Отдел

Label2

13. Создайте на форме

Свойство Caption компонента

надпись Филиал

Label3

Некоторые свойства объекта класса TLabel:

AutoSize Разрешение (либо запрет) изменения размеров метки в зависимости от помещенного в нее текста.

Выравнивание текста в метке по горизонтали.

Выравнивание текста в метке по вертикали.

Разрешение прозрачности, либо закрашивание фона метки цветом Color. Разрешение (либо запрет) переноса слов на другую строку.

Чтобы написать в метке текст из нескольких строк нужно указать WordWrap=True, а AutoSize=False. Затем необ-

ходимо указать новые размеры метки.

14. Создайте на форме над-

WordWrap: True, AutoSize:

пись Контроль ввода дан-

False. Уменьшите ширину и

ных из двух строк

увеличьте длину метки

15. Ниже метки Должность

 

добавьте компонент Edit1

 

16. Удалите стандартную

Свойство Text (компонент

надпись Edit1

Edit1 выделен!)

Компонент класса TEdit позволяет вводить и отображать текст в одной строке.

В Инспекторе Объектов присутствуют только те свойства, значения которых можно изменять при разработке интерфейса проекта.

34

Некоторые свойства объекта класса TEdit:

CharCase

Автоматическое преобразование букв

 

 

(ecNormal – нет преобразования,

 

 

ecUpperCase – заглавные буквы,

 

MaxLength

ecLowerCase – строчные буквы).

Максимальное количество символов в

 

 

строке (при значении 0 количество не

 

 

ограничено).

PasswordChar Символ, заменяющий набираемые

 

ReadOnly

символы в строке ввода.

Разрешение (либо запрет) изменения

 

SetText

текста.

 

Содержит выделенный текст.

17. Познакомьтесь со свойст-

См. список выше

вами компонента Edit1

 

18. Ниже метки Отдел до-

Страница Standard

бавьте компонент ListBox1

 

Компонент класса TListBox

предоставляет пользователю спи-

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

19. Задайте элементы списка –

В свойстве Items щелкните

Бухгалтерия

 

по кнопке с тремя точками

Дирекция

 

и в появившемся диалоговом

Отдел кадров

 

окне запишите в столбик

Отдел маркетинга

 

пункты списка. Для сохране-

Отдел сбыта

 

ния введенных данных на-

Отдел снабжения

 

жмите на кнопку Оk

 

Некоторые свойства компонента класса TListBox:

ItemIndex

Номер выбранного пункта (нумерация

 

MultiSelect

пунктов с нуля).

Разрешение (либо запрет) множествен-

 

SelCount

ного выбора.

Количество выбранных пунктов.

35

Selected(n)

Выбор (либо его отсутствие) для n-го

 

Sorted

элемента списка.

Сортировка слов по алфавиту.

TopIndex

Номер первого видимого в окне пункта.

20.

Ниже метки Филиал до-

Страница Standard

бавьте компонент ComboBox1

 

 

Компонент класса ComboBox представляет собой ком-

бинацию поля Edit со списком ListBox. Выбранный из списка пункт отображается в однострочном текстовом поле.

21.

В поле списка укажите по-

Свойство

Text (компонент

ясняющий текст - Список го-

ComboBox1 должен быть

родов

 

выделен!)

 

 

22.

Укажите пункты списка –

В свойстве Items

щелкните

Воронеж

 

по кнопке с тремя точками

Белгород

 

и в появившемся окне запи-

Курск

 

шите в столбик варианты

23.

Выполните сортировку по

Значение

True

свойства

алфавиту

 

Sorted

 

 

24.

Сохраните результаты ра-

Файл|Сохранить все

боты

 

 

 

 

25.

Проверьте работу

про-

Запуск|Запуск (F9)

граммы

 

 

 

 

 

Познакомимся со свойствами многострочного текстово-

го поля.

 

 

 

 

26.

Ниже метки Контроль

 

 

 

ввода данных добавьте ком-

Страница Standard

понент Memo1

 

 

 

 

 

Компонент класса TMemo используют для ввода или для

отображения текста из нескольких строк.

 

 

27.

Очистите текст внут-

В свойстве Lines щелкните по

ри компонента Memo1

кнопке с тремя точками и в поя-

 

 

вившемся диалоговом окне удали-

 

 

те текст Memo1

 

36

 

28.

Установите

наличие

Выберите любое из значений –

 

полос прокрутки у мно-

ssBoth, ssHorizontal, ssVertical

 

гострочного поля

свойства ScrollBar

 

 

Большинство свойств класса TComboBox аналогично

 

свойствам классов TEdit и TListBox.

 

29.

Поместите на форму

Страница Standard

 

компонент GroupBox1

 

30.

Укажите

подпись

Свойство Caption (компонент

 

Сервис блока

Group-

GroupBox1 должен быть выде-

 

Box1

 

лен!)

Экземпляр класса TGroupBox представляет собой прямоугольную рамку с надписью. Компонент обычно содержит дочерние элементы, объединенные по смыслу работы приложения. Добавим в группу Сервис четыре командные кнопки.

31.

Добавьте в группу

Выделите компонент GroupBox1.

кнопку Отразить текст

Добавьте компонент Button1. Из-

 

 

 

мените текст на кнопке через свой-

 

 

 

ство Caption элемента Button1

32.

Добавьте в группу

Выделите компонент GroupBox1.

кнопку Обновить дан-

Добавьте компонент Button2. Из-

ные

 

мените надпись на Button2

33.

Добавьте в группу

Скопируйте через контекстное ме-

кнопку Очистить текст

ню Button2. Вставьте в свободном

 

 

 

месте формы Button3

34.

Добавьте в группу

Вставьте в свободном месте фор-

кнопку Выход

 

мы Button4. Измените надпись

 

Экземпляры класса

TButton используются для запуска

пользовательских программ кликом по командной кнопке.

 

Некоторые свойства объекта класса TButton:

Cancel

При значении True событие OnClick возника-

 

 

ет при нажатии клавиши Esc.

37

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