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

_book4_part2_Deilphi

.pdf
Скачиваний:
14
Добавлен:
29.02.2016
Размер:
297.54 Кб
Скачать

Borland Delphi и FreePascal project Lazarus:

быстрый старт

Т. В. Гурьянова

Предисловие

Эта брошюра — краткое введение к обширной литературе по Delphi, FreePascal project

Lazarus и объектно-ориентированному программированию. В нее вошли теория и задания

30-часового курса по основам Delphi и FreePascal project Lazarus, который читался Т.В.

Гурьяновой школьникам 6-8 классов «Юни-центра XXI» ФПМИ БГУ в 2013/2014 учебном году.

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

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

но сильно хотите начать изучение С++, попробуйте тогда несколько дней поразобраться со средой scratch (визуальная объектно-ориентированная среда программирования для обучения школьников). Написать там несколько своих программок и изучить написанные другими. Инсталлятор можно скачать здесь:http://info.scratch.mit.edu/ru/Scratch_1.4_Download. Вводный урок можно посмотреть тут: https://www.youtube.com/watch?v=lqwuxs1lHhQ

Если Вам доступен электронный вариант книги, то, отлаживая соответствующие программы, часть кода можно не набирать, а копировать прямо из текста и вставлять в *.pas-файл. Нужно учитывать при этом, что электронный вариант кавычек кода может не совпадать с

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

Введение

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

Код, который предлагается в ставлять в программы (в обработчик щелчка кнопки и т.п.) можно

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

лабораторной отлаженный проект (ссылка на проект приводится в конце лабораторной).

Установите на компьютере Delphi или Lazarus. По пунктом выполняйте задания лабораторных

работ (Возможно, вам придется заменять кавычки с полиграфических «“» на обычные «'»).

Пример выполнения первой лабораторной работы можно посмотреть тут: https://www.youtube.com/watch?v=l_lHUd7F8fQ

Лабораторная работа 1

Видео с выполнением лабораторной: https://www.youtube.com/watch?v=l_lHUd7F8fQ

1.Перетащите на Form1 с палитры стандартных (Standart) компонентов:

Label1 (метка)

Button1 (кнопка)

2.Выделите Button1, кликнув кнопкой мышки на самой форме.

3.Откройте вкладку Events (События) Object Inspector (Инстпектора Объектов:

выделите поле OnClik

кликните дважды по образовавшейся справа пустой ячейке — откроется окно с

кодом.

4.В окне кода, в месте, где окажется курсор,наберите:

Label1.Caption:=’Это мое первое приложение на Lazarus’;

5.Сохраните проект.

6.Откомпелируйте его (В меню Run можно выбрать режим быстрой компиляции — Quick Compile), исправьте ошибки и еще раз сохраните.

7.Запустите приложени, нажав на зеленый флажок (или Run F9). И посмотрите, как оно

работает. Если все выполнено правильно, появится Form1 в немного измененном виде (Без

маленьких точечек Grid-сетки).

8.Кликните кнопкой мышки по кнопке на форме — у Вас в поле Label1 изменится надпись: “Это мое первое приложение на Lazarus” ('This is my first application in Delphi').

Исходники лабораторной можно найти здесь: https://drive.google.com/folderview?id=0B1Nl3PHlshctV2VBbEdJQmYwLTQ&usp= sharing

Лабораторная работа 2 Заготовка к программе «Калькулятор»

Видео с выполнением лабораторной: https://www.youtube.com/watch?v=1hhDlaU2BeY

1.Измените название формы с Form1 на, например, “Калькулятор”. Для этого:

выделите форму (кликните кнопкой мышки на самой форме)

напротив свойства Caption замените значение, заданное по умолчанию (Form1) на

“Калькулятор”

2.Перетащите на Form1 с палитры стандартных (Standart) компонентов:

два окна редактирования Edit1 и Edit2

Panel1 (панел)

Button1 (кнопка)

Подсказка: если по-держать курсор мыши над компонентом, высветится подсказка

“TEdit...”, “TButton...”, “TPanel...”

3.Тот же, что в предыдущей лабораторной.

4.В окне кода, в месте, где окажется курсор,наберите:

Panel1.Caption:=Edit1.Text+'+'+Edit2.Text+' = '

+FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit.Text));

5.6.7. Те же, что в предыдущей лабораторной.

8. Введите в поля редактирования Edit1 и Edit2 числа (можно десятичные).

Назовите Button: введите в поле свойства (Propaties) name знак сложения (”+”). Кликните по

кнопке.

Если все было сделано правильно, на панеле Panel1 будет выведен результат сложения

введенных Вами чисел.

9.Рассмотрите какую-нибудь программу-калькулятор (например, из вкладки “Accesories” Start-up-меню Windows ).

10.Усовершенствуйте калькулятор: добавьте кнопки для каждого арифметического действия

(+,-,/,sin,...).

В качестве примера можете рассмотреть калькулятор, который сделал Сергей Анищенко в 14 лет:

https://drive.google.com/folderview?id=0B4icNOfw8DwUcmNFSzlpajlBbGM&usp= sharing

10*. Напишите программу-калькулятор, умножающую и делящую числа “столбиком” и сконвертируйте на свой мобильный телефон.

Вот код примерный код на паскале для умножения чисел “столбиком”: program Example_multiply;

uses crt; var

a,b,c,d,e,f,g,h,i,j,k :longint; a1,b1,c1 :string;

begin clrscr; readln(a,b); clrscr;

str(a,a1);str(b,b1);

c:=length(a1);

d:=length(b1);

TextColor(15); gotoxy(44-c,5); writeln(a); gotoxy(44-d,6); writeln(b); gotoxy(35,5); TextColor(14); writeln('x'); gotoxy(34,7); writeln('-------------'); gotoxy(44-c,8);

g:=8;

textcolor(10);

for h:=d downto 1 do begin

k:=0;

for i:=c downto 1 do

begin gotoxy(48+i-g,g);

f:= (Ord(a1[i])-48)* (Ord(b1[h])-48); e:=f+k;

if i<>1 then begin

if e>9 then begin

write(e mod 10); k:=(e div 10);

end;

if e<10 then write(e); end;

end;

if i=1 then begin

if e<10 then write(e) else begin

gotoxy(47-g+i,g); write(e);

end;

end;

g:=g+1;

end;

for i:=30 to 50-c do begin gotoxy(i,g+1); textcolor(14); writeln('Ґ'); end;

textcolor(13);

str(a*b,c1); gotoxy(44-length(c1),g+2); writeln(c1); gotoxy(80,25);

end.

Лабораторная работа 3 Работаем с фреймами

Видео с выполнением лабораторной: https://www.youtube.com/watch?v=MzJd3WGSnL4

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

Windows: пользователь может написать имя файла или нажать кнопку «Обзор», которая

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

1.Начните новое приложение и выполните команду File/New Frame.

2.Перенесите на фрейм групповую панель GroupBox стандартных компонентов.

3.Перенесите внутрь GroupBox окно редактирования Edit, кнопку Button, диалог OpenDialog из копмонентов-диалогов (Dialogs), а также компонент ApplicarionEvents — перехватчик

событий приложения из Additional

4.Задайте в свройстве Filter диалога OpenDialog фильтр файлов, например, «все файлы» —

*.*. Свойство ShowHint (показать ярлычок подсказки) в компонентах Edit и Button установите

в true. В кнопке Button кроме того можете написать текст подстказки Hint, например, «Выбор

файла/Выбор файла из

каталога».

5. В обработчик события OnShowHint компонента ApplicationEvents занесите оператор

if HintInfo.HintControl=Edit1 then begin

HintStr:=Edit1.Text;

ApplicationEvents1.CancelDispatch;

end;

Этот оператор в момент, когда должен отображаться ярлычок, проверяет, не является ли

источником события HintInfo.HintControl окно редактирования Edit1.

6. Введите в модуль фрейма глобальную переменную FileName типа string (строка), в которой

будет отображаться выбранный файл.

var FileName:string;

(вставить перед implementation в unit2)

7. В обработчик щелчка кнопки введите:

if OpenDialog.Execute then begin

Edit1.Text:=OpenDialog1.FileName;

FileName:=OpenDialog1.FileName;

end;

8. В обработчик события OnExit компонента Edit1 поместите оператор:

FileName:=Edit1.Text;

Перейдите в основной модуль Вашего приложения и разместите на форме объект

(или два) описанного вами фрейма. Для этого перетяните значок Frames из стандартной

палитры компонентов (Standard) и выберите в ниспадающем меню название вновьсозданного (пп. 1-8 фрейма) — по умолчанию Frame1.

Лабораторная работа 4

Создаем текстовый редактор. Работаем с палитрой компонентов ActiveX

Видео с выполнением лабораторной: https://www.youtube.com/watch?v=yfsZofdumFY

1.Запустите программу Delphi, например, через кнопку «Пуск» (в левом нижнем углу).

2.В меню File выберите New Items (новые элементы), откройте вкладку Projects (проекты) и

выберите пиктограмму «Win95/98 Logo Application».

3.Сохраните проект.

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

5.Создайте новое приложение. На новую форму перенесите компонент F1Book из палитры компонентов страницыActiveX. Можете также расположить рядом компонент Chartfx (и Graph

в Lazarus) .

6.Откомпилируйте проект и запустите на выполнение.

7.Попробуйтепоменятьнекоторыесвойстваэтихкомпонентовипосмотреть,какэтиизменения

отразятся при перезапуске.

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

запрограммировать викторину.

Проект Викторина «Мир животных»

1. Скачайте программы *.pas: https://drive.google.com/folderview?id=0B1Nl3PHlshctZ3pPc1VYdk5tSk0&usp= sharing

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

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

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

4.Попробуйте переделать часть кода под Ваши требования (мин. 10 вопросов).

и оформить свой проект, используя возможности Delphi (Lazarus).

5. Модернизируйте свой проект, добавив в него учет отвечающих на вопросы викторины,

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

6*. Добавьте в свой проект (перепешите его) зрелищный интерфейс (анимация, видео, звук,...

Можно,например,сделатьнаоснованиивопросов-ответовобучающийроликсиспользованием среды Scratch.

Инсталятор можно скачать здесь: http://info.scratch.mit.edu/ru/Scratch_1.4_Download

Вводный урок можно посмотреть тут: https://www.youtube.com/watch?v=lqwuxs1lHhQ

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

Лабораторная работа 5 Вставка картинок

Видео с выполнением лабораторной: https://www.youtube.com/watch?v=ETpIJfJk5aI

1.Создайте новое приложение,и перетяните на Form1 компоненты:

-OpenPictureDialog из Dialogs;

-MainManue из Standard;

-Image из Additional;

2.В меню создайте единственный раздел Файл (Картинка),

в обработчик щелчка этого раздела вставьте всего один оператор:

if OpenPictureDialog1.Execute then Image1.Picture.LoadFromFile (OpenPictureDialog1.FileName);

3. Запустите приложение и попробуйте открыть с помощью меню несколько картинок.

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

на форме или будет несимметричным, или они вовсе не будут помещаться в окне. Это можно

изменить, заставив форму автоматически настраиваться на размеры изображения.

4. Установите в компоненте Image1 свойство AutoSize равным true, а оператор пункта 2 допишите:

if OpenPictureDialog1.Execute then begin Image1.Picture.LoadFromFile (OpenPictureDialog1.FileName); Form1.ClientHeight:=Image1.Height+10;

Image1.Top:=Form1.ClientRect.Top+(Form1.ClientHeight-Image1.Height) div 2;

Form1.ClientWidth:=Image1.Width+10; Image1.Left:=Form1.ClientRect.Left+(Form1.ClientWidth-Image1.Width)

div 2; end;

Лабораторная работа 6 Перемещение отдельных компонентов

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

и Top.

Рассмотрим это на примере перемещения частей картинки по площади формы в среде разработки Delphi.

Для этого:

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

2.В описании переменных добавьте картинку Pict: Pict:TImage; (Добавляем в var после

автоматечески созданного Form1: TForm1;)

3.На форму перенесите 4 компонента Image, в которые будут загружаться 4 части этого

изображения Pict (Image1,Image2,Image3,Image4).

4.В коде при создании формы OnCreate вставьте следующий код:

Pict:=TImage.Create(Self);

Pict.AutoSize:=true;

Pict.Picture.LoadFromFile(‘C:\Temp\contrstrike.bmp’);

image1.Canvas.CopyRect(image1.ClientRect,Pict.Canvas,Rect(0,0,Pict. Width div 2,Pict.Height div 2));

image2.Canvas.CopyRect(image2.ClientRect,PIct.Canvas,Rect(Pict.Width div 2,0,Pict.Width,Pict.Height div 2));

image3.Canvas.CopyRect(image3.ClientRect,PIct.Canvas,Rect(0,Pict.

Height div 2,Pict.Width div 2,Pict.Height)); image4.Canvas.CopyRect(image4.ClientRect,Pict.Canvas,Rect(Pict.Width

div 2,Pict.Height div 2,Pict.Width,Pict.Height)); Pict.Free;

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

5. Убедитесь, что в C:\Temp есть файл contrstrike.bmp

Либо укажите путь к какой-нибудь картинке (Выберите, например, одну из

заставок Windows и перенесите в C:\Temp\), либо измените путь в строке

Pict.Picture.LoadFromFile(‘C:\Temp\contrstrike.bmp’);

6.ПослеimplementationдобавтепеременныеXO,YO,вкоторыхбудутзаписыватьсякоордиатЫ, а также перенную move (“перемещение”, “переместить”), которая может принимать одно из

двух значений: либо true (“правда”, “да”), либо false (“ложь”, “нет”)

var move:boolean; XO,YO:integer;

7. Для каждого из компонентов Image (Image1,...) вставьте соответствующий код в обработчик событий OnMouseMove, OnMouseDown,OnMouseUp.

Так, выбрав на форме компонент Image1, откройте закладку в инспекторе объектов OnMouseDown OnMouseMove, справа двойной щелчек перенесет курсор в соответствующее место программы, где нужно будет дописать:

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

if button <> mbLeft then exit; XO:=X;

YO:=Y;

move:=true;

(sender as Tcontrol).BringToFront; end;

В код для OnMouseMove допишите:

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin

if move then with (sender as Tcontrol) do SetBounds(Left + X - XO,Top + Y - YO, Width,Height) end;

В код для OnMouseUp допишите:

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin move:=false; end;

На этом этапе код у Вас должен быть примерно такой: unit Unit1;

interface uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;

type

TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage;

procedure FormCreate(Sender: TObject);

procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

private

{Private declarations } public

{Public declarations }

end;

var

Form1: TForm1; Pict:TImage;

implementation var move:boolean; XO,YO:integer;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin Pict:=TImage.Create(Self); Pict.AutoSize:=true;

Pict.Picture.LoadFromFile(‘C:\Temp\contrstrike.bmp’);

image1.Canvas.CopyRect(image1.ClientRect,Pict.Canvas,Rect(0,0,Pict. Width div 2,Pict.Height div 2));

image2.Canvas.CopyRect(image2.ClientRect,PIct.Canvas,Rect(Pict.Width div 2,0,Pict.Width,Pict.Height div 2));

image3.Canvas.CopyRect(image3.ClientRect,PIct.Canvas,Rect(0,Pict. Height div 2,Pict.Width div 2,Pict.Height div 2));

image4.Canvas.CopyRect(image4.ClientRect,Pict.Canvas,Rect(Pict.Width div 2,Pict.Height div 2,Pict.Width,Pict.Height));

Pict.Free;

end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

if button <> mbLeft then exit; XO:=X;

YO:=Y;

move:=true;

(sender as Tcontrol).BringToFront; end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin

if move then with (sender as Tcontrol) do SetBounds(Left + X - XO,Top + Y - YO, Width,Height) end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin move:=false; end;

end.

8. Соответствующий код должен быть вставлен также в обработчик событий OnMouseDown, OnMouseMove, и OnMouseUp для каждого из компонентов Image (Image1,...). Код везде одинаковый, отличее только в части названия заголовка процедуры: так в коде программы должны быть четыре одинаковых процедуры:

procedure TForm1.Image1MouseDown, procedure TForm1.Image2MouseDown, procedure TForm1.Image3MouseDown, procedure TForm1.Image4MouseDown,

четыре одинаковых процедуры: procedure TForm1.Image1MouseMove, procedure TForm1.Image2MouseMove, procedure TForm1.Image3MouseMove, procedure TForm1.Image4MouseMove

и четыре одинаковых процедуры: procedure TForm1.Image1MouseUp, procedure TForm1.Image2MouseUp, procedure TForm1.Image3MouseUp, procedure TForm1.Image4MouseUp

Код у всех, как написано в пункте 6 + обязательная ссылка на соответствующее место кода из Object Inspector!

Это позволит в готовом приложении перетаскивать с помощью курсора мыши каждую из

четырех частей загруженной картинки (Как в детской игре “кубики”).

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