Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Студентам_программирование / Интегрированная среда разработки приложений LAZARUS

.pdf
Скачиваний:
198
Добавлен:
18.03.2015
Размер:
997.53 Кб
Скачать

Файлы с расширениями .pas и .lfm имеют одинаковое имя (по умолчанию Unit1). У файлов с расширениями .lpr, .Exe, lpi

– также одинаковое имя (по умолчанию Project1).

Замечание. В Lazarus файл проекта и файлы проекта разные вещи. Файл проекта – это файл головной программы с расширением .lpr, файлы проекта – это набор всех файлов приложения.

На рис. 13 приведен пример файлов проекта, состоящего из трех форм. В этом проекте все имена (Project1, Unit1, Unit2, Unit3) сохранены по умолчанию.

Головной

модуль

Project1

Файлы

Form1

Файлы

Form2

Файлы

Form3

Рис. 13. Файлы проекта, состоящего из трех форм

Задание 2. Сохраните ранее созданный в Задании 1 проект.

23

Следуйте рекомендациям, описанным ниже.

1.Выберите пункт меню Проект Сохранить проект как... для сохранения проекта (рис. 14).

Рис. 14. Команда Сохранить проект как

2.В первом появившемся окне (рис. 15) задайте имя модуля формы. Для простых приложений имя модуля формы можно оставить по умолчанию unit1. Если папка для проекта не была создана ранее, создайте ее в открывшемся окне с помощью кнопки или используя контекстное меню), после чего откройте ее.

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

project1.

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

Unit1.pas, файл Unit1.lfm со сведениями о форме Form1,

файлы Project1.lpr, Project1.lpi и другие файлы проекта.

24

Рис. 15. Сохранить имя модуля формы

Рис. 16. Сохранить имя проекта

Замечание. После компиляции создается исполняемый файл с расширением

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

25

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

Рис. 17. Сохранение проекта

Замечание. Копирование файлов проекта в другую папку или на внешний носитель выполняется только с помощью файлового менеджера Windows (например, проводника). В среде Lazarus это делать запрещается. Файл с расширением .еxe можно не копировать.

3.Далее приступаем к визуальному программированию. Ранее на форму Form1 были помещены компоненты Button1, Edit1, Label1. Выделяя каждый объект, изменим некоторые их свойства с помощью инспектора объектов:

 

Объект

 

Свойство

Значение

 

 

 

 

 

 

 

 

 

 

Caption

ПРИМЕР

 

Form1

 

 

 

 

Position

poScreenCenter

 

 

 

 

 

 

 

 

 

 

 

Button1

 

 

Caption

Щелкни мышкой

 

 

 

 

 

 

 

 

Font

Arial 16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Caption

Мой первый проект

 

Label

 

 

 

 

 

Font

Arial 14

 

 

 

 

 

 

 

 

 

 

Edit1

 

 

Text

Очистите это поле

 

 

 

 

 

 

26

4.Нажмите на кнопку Запуск . После сообщения «Проект Project1 успешно собран» появится окно вашего проекта

(рис. 18).

Рис. 18. Окно первого проекта

5.Теперь щелкните по кнопке и убедитесь, что ничего не произойдет. В этом нет ничего удивительного, ведь пока мы не написали ни одной строчки программного кода. Мы разработали только интерфейс.

Закройте пока окно обычным способом (щелкните на крестик). Выделите объект Button1, и выберем событие OnClick во вкладке События. Дважды щелкните в поле справа от названия. В результате описанных действий в окне редактора кода появится пока пустая процедура обработки события OnClick:

procedure TForm1.Button1Click(Sender:TObject);

begin

end;

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

Edit1.Text:='Ура! Я – студент УГАТУ';

Оно читается так: присвоить свойству Text объекта Edit1 значение 'Ура! Я – студент УГАТУ'.Так как присваиваемое значение – строка, оно заключено в одинарные кавычки.

27

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

В результате откроется окно

Редактора

исходного кода, в кото-

ром

вы

увидите

пустую

процедуру

procedure

TForm1.Button1Click(Sender:TObject).

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

7.Закройте окно, щелкнув на крестик. Далее добавьте на форму еще одну кнопку Button2. Задайте свойству Caption значение Выход. Она будет предназначена для выхода из проекта. Щелкните дважды по ней, откроется Редактор исходного кода. Наберите в месте курсора Close (этот оператор закрывает проект).

Замечание. Перейти из Окна формы в Окно редактора исходного кода и обратно можно с помощью клавиши F12

8.Сохраните проект, запустите его на выполнение и убедитесь, что кнопка Выход работает.

9.Измените свойство ShowHint объекта Button2 на значение True. Если это свойство имеет значение True, то всплывает посказка – текст, содержащийся в свойстве Hint.Поэтому найдите

свойство Hint и наберите в открывшемся окне фразу ’Кнопка завершает работу программы’.

10.Запустите проект и убедитесь, что подсказка работает при наведении указателя мыши на кнопку Bыход. Свойство ShowHint можно использовать и для любых других объектов.

11.Закройте проект командой Проект Закрыть проект.

4.2. СТРУКТУРА МОДУЛЯ ПРИЛОЖЕНИЯ *.PAS

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

28

unit имя_модуля; {заголовок модуля}

interface

{раздел описаний}

implementation

{раздел реализаций}

end. {конец модуля}

Заголовок модуля – это зарезервированное слово unit, за которым следует имя модуля и точка с запятой.

Раздел описаний (интерфейса) открывается служебным словом interface:

interface

uses {список подключаемых модулей (библиотек)}; type {список_типов};

const {список_констант}; var {список_переменных}; procedure имя_процедуры;

function имя_функции;

Здесь размещаются списки подключаемых модулей, объявления типов, констант, переменных, заголовки функций и процедур, к которым будет доступ из других модулей, в том числе и автоматически созданные Lazarus объявления класса Form1. Иными словами, в этом разделе перечисляется, все то, что должно быть видимым из тех модулей, которые его используют.

Раздел реализации начинается ключевым словом implementation. Он содержит программный код, реализующий механизм работы описанных на форме программных элементов – тексты процедур обработки событий, а также процедуры и функции, созданные пользователем.

29

Здесь располагаются объявления типов, констант, переменных, доступных только для данной формы, т.е. те, к которым из других модулей доступа не будет. Здесь же располагаются все тексты процедур и функций, объявленных в разделе Interface. Заголовки процедур и функций могут полностью совпадать с заголовками из интерфейсной части или могут отличаться от них полным отсутствием параметров. Если в этой части набран текст функции или процедуры, не представленной в Interface, то данная функция или процедура будет локальной.

Все процедуры и функции (событийные и пользовательские) в Lazarus также построены по модульному принципу.

На рис. 19 приведен пример модуля

Unit1.pas.

 

 

 

 

 

 

Название

unit Unit1;

 

модуля

{$mode objfpc}{$H+}

 

формы

 

 

 

interface

 

 

uses

 

 

Classes, SysUtils, FileUtil, LResources, Forms,

 

Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;

 

type

 

 

{ TForm1 }

 

 

TForm1 = class(TForm)

 

интерфейса

Label1: TLabel;

 

Button1: TButton;

 

 

Edit1: TEdit;

 

 

Edit2: TEdit;

 

 

Edit3: TEdit;

 

Раздел

Label2: TLabel;

 

 

 

RadioGroup1: TRadioGroup;

 

 

procedure Button1Click(Sender: TObject);

 

private

 

 

{ private declarations }

 

 

public

 

 

{ public declarations }

 

 

end;

 

 

var

 

 

Form1: TForm1;

 

 

 

 

 

30

implementation

 

{ TForm1 }

 

procedure TForm1.Button1Click(Sender: TObject);

 

var a,b,c:real;

 

begin

 

a:=StrToFloat(Edit1.Text);

Раздел реализации

b:=StrToFloat(Edit2.Text);

 

Case RadioGroup1.ItemIndex of

 

0: c:=a+b;

 

1: c:=a-b;

 

2: c:=a*b;

 

3: if b=0 then ShowMessage('На ноль делить

 

нельзя') else c:=a/b; end;

 

Edit3.Text:=FloatToStr(c);

 

end;

 

initialization

 

{$I unit1.lrs}

 

 

 

end.

Конец

модуля

 

 

 

Рис. 19. Пример модуля Unit1 формы Form1

 

4.3. СТРУКТУРА СОБЫТИЙНОЙ ПРОЦЕДУРЫ

На рис. 20 изображена структура событийной процедуры. Синтаксис заголовка событийной процедуры, написанной для объекта на форме, имеет вид

Procedure Имя_класса_формы.ОбъектСобытие(параметры);

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

Procеdure TForm1.Button1Click(Sender: TObject);

Текст программы начинается с раздела описания, в котором объявляются все константы, переменные и типы, используемые в данной процедуре. Раздел описания констант начинается со слова Сonst, раздел описания типов – со слова Type, раздел описания переменных

– со слова Var.

31

 

 

 

Заголовок процедуры. Назва-

Procedure <название процедуры>;

 

 

ние процедуры: названия объ-

 

 

 

екта + название события

Const

 

 

 

<имя константы> = <значение константы>;

 

Раздел описания констант

...

 

 

 

 

<имя константы> = <значение константы>;

 

 

 

Type

 

 

 

<имя типа> = <тип>;

 

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

 

...

 

 

 

 

 

 

 

<имя типа> = <тип>;

 

 

 

Var

 

 

 

<имя переменной>:<тип>;

 

Раздел описания переменных

...

 

 

 

 

 

 

<имя переменной>:<тип>;

 

 

 

<Тексты локальных процедур и функций с

 

 

Раздел описания процедур и

 

заголовками>

 

 

функций

 

Begin

 

Раздел инструкций

<операторы>

 

End;

 

 

 

 

 

 

 

 

Рис. 20. Структура событийной процедуры

За разделом описания следует раздел инструкций (операторов), который начинается со слова Begin и заканчивается словом End. В разделе инструкций записываются исполняемые операторы. В конце каждого оператора ставится символ «;».

5.ОШИБКИ ВЫПОЛНЕНИЯ ПРИЛОЖЕНИЯ

5.1.ОШИБКИ ВРЕМЕНИ КОМПИЛЯЦИИ

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

32