_book4_part2_Deilphi
.pdfBorland 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!
Это позволит в готовом приложении перетаскивать с помощью курсора мыши каждую из
четырех частей загруженной картинки (Как в детской игре “кубики”).