Событие
|
Происходит
|
OnClick
|
При щелчке
кнопкой мыши
|
OnDblClick
|
При двойном
щелчке кнопкой мыши
|
OnMouseDown
|
При нажатии
кнопки мыши
|
OnMouseUp
|
При отпускании
кнопки мыши
|
OnMouseMove
|
При перемещении
мыши
|
OnKeyPress
|
При нажатии
клавиши клавиатуры
|
OnKeyDown
|
При нажатии
клавиши клавиатуры. События OnKeyDown и OnKeyPress - это чередующиеся,
повторяющиеся события, которые происходят до тех пор, пока не будет отпущена
удерживаемая клавиша (в этот момент происходит событие OnKeyUp)
|
OnKeyUp
|
При отпускании
нажатой клавиши клавиатуры
|
OnCreate
|
При создании
объекта (формы, элемента управления). Процедура обработки этого события
обычно используется для инициализации переменных, выполнения подготовительных
действий
|
OnPaint
|
При появлении
окна на экране в начале работы программы, после появления части окна,
которая, например, была закрыта другим окном, и в других случаях
|
OnEnter
|
При получении
элементом управления фокуса
|
OnExit
|
При потере
элементом управления фокуса
|
Листинг 1. Процедура обработки события OnClick на
кнопке Button1 (Вычислить)
// нажатие кнопки Вычислить
procedure TForm1. ButtonlClick
(Sender: TObject);
var: integer; // дистанция, метров: real; // время
как дробное число: integer; // время, минуты
sek: integer; // время, секунды
v: real; // скорость
// получить исходные данные из полей ввода
dist: = StrToint (Edit1. Text); t: = StrToFloat
(Edit2. Text);
// предварительные преобразования: = Trunc (t); // кол-во
минут - это целая часть числа t: = Trunc (t*100) mod 100;
// кол-во секунд - это дробная часть
// числа t
// вычисление: = (dist/1000) / ( (min*60 + sek) /3600);
// вывод результата. Caption: = 'Дистанция: '+ Edit1.
Text
+ ' м' + #13 + 'Время: ' + IntToStr (min)
+ ' мин ' + IntToStr (sek) + ' сек ' + #13 +
'Скорость: ' + FloatToStrF (v,ffFixed,4,2) + ' км/час';
end;
Листинг 2. Процедура обработки события Onclick на
кнопке Button2 (Завершить)
// нажатие кнопки Завершить
procedure TForm1. Button2Click
(Sender: TObject);
begin. Close; // закрыть главное окно программы
end;
Глава 3. Описание
структуры программы
Скриншоты
program kubik;
uses,in 'Main. pas',in 'About. pas' {Form2},in
'Rules. pas' {Form3},in 'Resul. pas' {Form4},in 'OpenF. pas' {Form1};
{$R *. RES}. Initialize;. CreateForm (TMainF,
MainF);. CreateForm (TForm2, Form2);. CreateForm (TForm3, Form3);. CreateForm
(TForm4, Form4);. CreateForm (TForm1, Form1);.run;.
unit About;
interface, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,;= class (TForm): TMemo;
{ Private declarations }
{ Public declarations };: TForm2;
{$R *. DFM}.
{$A+,B-,C+,D+,E-,F-,G+,H+,
I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y-,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
unit Main;
interface, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,, Buttons, ToolWin, Menus, Grids,About,Rules,Resul,
ExtCtrls,OpenF;= class (TForm): TDrawGrid;: TMainMenu;: TStatusBar;: TToolBar;:
TToolButton;: TSpeedButton;: TToolButton;: TSpeedButton;: TToolButton;:
TSpeedButton;: TToolButton;: TSpeedButton;: TToolButton;: TSpeedButton;:
TToolButton;: TSpeedButton;: TToolButton;: TSpeedButton;: TToolButton;:
TSpeedButton;: TToolButton;: TSpeedButton;: TMenuItem;: TMenuItem;: TMenuItem;:
TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;:
TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;:
TSpeedButton;: TMenuItem;: TMenuItem;: TMenuItem;: TImage;: TTimer;Exit1Click
(Sender: TObject);SpeedButton10Click (Sender: TObject);About1Click (Sender:
TObject);SpeedButton9Click (Sender: TObject);Rules1Click (Sender:
TObject);DrawGrid1DrawCell (Sender: TObject; Col, Row: Integer;: TRect; State:
TGridDrawState);DrawGrid1MouseDown (Sender: TObject; Button: TMouseButton;:
TShiftState; X, Y: Integer);SpeedButton5Click (Sender: TObject);Easy1Click
(Sender: TObject);Normal1Click (Sender: TObject);Hard1Click (Sender:
TObject);DrawGrid1MouseMove (Sender: TObject; Shift: TShiftState; X,:
Integer);SpeedButton4Click (Sender: TObject);Restart1Click (Sender:
TObject);SpeedButton7Click (Sender: TObject);Redo1Click (Sender:
TObject);SpeedButton6Click (Sender: TObject);Undo1Click (Sender:
TObject);FormCreate (Sender: TObject);SpeedButton11Click (Sender:
TObject);Results1Click (Sender: TObject);SpeedButton8Click (Sender:
TObject);Timer1Timer (Sender: TObject);Pause1Click (Sender:
TObject);SpeedButton3Click (Sender: TObject);Save1Click (Sender:
TObject);SpeedButton2Click (Sender: TObject);Load1Click (Sender: TObject);
{ Private declarations }
{ Public declarations };= 'Amounts of steps: ';=
'Time: ';= record: string [16];: integer;: integer;;= record: string [10];:
integer;: integer;: array [0.3,0.3] of boolean;;= array [1.10] of TBestResult;:
TSav;: string;: file of TSav;: TMainF;,fi,un,re,ka: array [0.3,0.3] of
boolean;,aRow: integer;,moz,mog: boolean;: Trect;,g,tep: integer;,nam: string;:
file of TBestforlevel;: TBestForLevel;: TBestForLevel;,m,clok,rest: boolean; //
for Pause: integer;,st: string;: boolean;
{$R *. DFM}
{запись лучшего результата в файл}
procedure Perebor (n: string);,k,j:
integer;(Fileb,'Best. res');(FileB);(FileB,g-2);(FileB,BestForLevel);: =
BestForLevel;i: = 10 downto 1 do beginstep <= BestForLevel [i]. Step then: =
i;j: = k + 1 to 10 do begin[j]. Name: = Bfl [j-1]. Name;[j]. Step: = Bfl [j-1].
Step;[j]. Time: = Bfl [j-1]. Time;;j: = 1 to k - 1 do begin[j]. Name: = Bfl
[j]. Name;[j]. Step: = Bfl [j]. Step;[j]. Time: = Bfl [j]. Time;;[k]. Name: =
n;[k]. Step: = step;[k]. Time: =
ctime;(FileB,g-2);(FileB,BestForLevel);;;(FileB);;
{проверка состояния игры - т. е нет ли выигрыша}
procedure Manipulate (x,y: integer);,j,kol:
integer;: = 0;i: = 0 to 3 do[x, i]: = not ar [x, i];i: = 0 to 3 do[i,y]: = not
ar [i,y];[x,y]: = not ar [x,y];i: = 0 to 3 do beginj: = 0 to 3 do begin[i,j]: =
ar [i,j];;;i: = 0 to 3 do beginj: = 0 to 3 do beginnot ar [i,j] then kol: = kol
+ 1;;;kol = 16 then beginstep = 0 then exit;: = false;. DrawGrid1. Enabled: =
false;. StatusBar1. Panels [0]. Text: =st0+' 0';. StatusBar1. Panels [1]. text:
=st1+IntToStr (0);MessageDlg ('Congratulation!!! You finish the Game!!! Will
you save your result? ',mtCustom, [mbYes,mbNo],0) =mrYes then. DrawGrid1.
Repaint;: = false;(Fileb,'Best. res');(FileB);(FileB,g-2);(FileB,BestForLevel);(FileB);step
> BestForLevel [10]. Step then MessageDlg ('Sorry! But your result very
small for saving! ',mtCustom, [mbYes],0)begin('Please. ','. Input your Name!!!
',nam);(nam);;begin
exit;;;;
{создание новой игры; к - сложность, она выражается в том
сколько оперций запутывания игрового поля произойдет при его создании}
procedure NewGame (k: integer);, i,r,c:
integer;MainF. SpeedButton8. ParentFont then begin: = true;: = 0;: = true;: =
00;: = false;: = false;. DrawGrid1. Enabled: = true;. DrawGrid1. Color: =
clBlue;. DrawGrid1. Repaint;. StatusBar1. Panels [0]. Text: =st0+' 0';i: =1 to
3*k do: =random (3);: =random (3);(c,r);. DrawGrid1. Repaint;;i: =0 to 3 doj:
=0 to 3 do[i,j]: =ar [i,j];;
end;;;
{выход из приложения}
procedure TMainF. Exit1Click (Sender: TObject);;;
{выход из приложения}TMainF.
SpeedButton10Click (Sender: TObject);
begin;;
{показывает форму информации о приложении}
procedure TMainF. About1Click (Sender: TObject);.
Form2. ShowModal;;
{показывает форму информации о приложении}
procedure TMainF. SpeedButton9Click (Sender:
TObject);. Form2. ShowModal;;
{показывает форму правил игры}TMainF.rules1Click
(Sender: TObject);. Form3. ShowModal;;
{перерисовка клетки на игровом поле}
procedure TMainF. DrawGrid1DrawCell (Sender:
TObject; Col, Row: Integer;: TRect; State: TGridDrawState);DrawGrid1. Canvas
doar [col,row] then Brush. Color: = clTealBrush. Color: = clBlue;(Rect);
end;;
{перерисовка клетки на игровом поле по клику на ней мышкой}
procedure TMainF. DrawGrid1MouseDown (Sender:
TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);,b: integer;,j:
integer;: = true;: = step + 1;: = step;(step: 3,ster);. StatusBar1. Panels [0].
Text: =st0+ster;: = true;: = false;. MouseToCell (x,y,A,B);i: = 0 to 3 do
beginj: = 0 to 3 do begin[i,j]: =ar [i,j];;;(A,B);. DrawGrid1. Repaint;
end;
{показывет форму с лучшими результатами}
procedure TMainF. SpeedButton5Click (Sender:
TObject);: integer;g = 0 then g: = 2;g = 2 then Form4. Label1. Caption: = '
Easy';g = 3 then Form4. Label1. Caption: = ' Normal';g = 4 then Form4. Label1.
Caption: = ' Hard ';. StrGrid. Cells [0,0]: ='The Name: ';. StrGrid. Cells
[1,0]: ='Steps: ';. StrGrid. Cells [2,0]: ='Time: ';(Fileb,'Best.
res');(FileB);(FileB,g - 2);(FileB,BestForLevel);i: = 1 to 10 do begin.
StrGrid. Cells [0, i]: = BestForLevel [i]. Name; // // // // . StrGrid. Cells
[1, i]: = IntToStr (BestForLevel [i]. Step);. StrGrid. Cells [2, i]: = IntToStr
(BestForLevel [i]. Time);;(FileB);. Form4. ShowModal;
end;
{создание новой игры с минимальной сложностью}
procedure TMainF. Easy1Click (Sender: TObject);:
= 2;(g);;
{создание новой игры со средней сложностью}
procedure TMainF. Normal1Click (Sender:
TObject);: = 3;(g);;
{создание новой игры с максимальной сложностью}
procedure TMainF. Hard1Click (Sender: TObject);:
= 4;(g);;
procedure TMainF. DrawGrid1MouseMove (Sender:
TObject; Shift: TShiftState; X,: Integer);. Cursor: =crHandPoint;
end;
{сбрасывает игровое поле в состояние при начале игры}
procedure Restartf;,j: integer;rest then begin:
=0;(step: 3,ster);. StatusBar1. Panels [0]. Text: =st0+ster;: = false;: =
false;MainF. DrawGrid1. Canvas doi: =0 to 3 doj: =0 to 3 do[i,j]: = fi
[i,j];;;. DrawGrid1. Repaint;
end;;;
{сбрасывает игровое поле в состояние при начале игры}
procedure TMainF. SpeedButton4Click (Sender:
TObject);
begin;;
{сбрасывает игровое поле в состояние при начале игры}
procedure TMainF. Restart1Click (Sender:
TObject);
begin;;
{возвращает отмененный с помощью undo ход}
procedure RedoN;,j: integer;: = true;: = step -
1;: = step;(step: 3,ster);. StatusBar1. Panels [0]. Text: =st0+ster;i: =0 to 3
do beginj: =0 to 3 do begin[i,j]: = fi [i,j];;;i: =0 to 3 do beginj: =0 to 3 do
begin[i,j]: = un [i,j];;;;i: =0 to 3 do beginj: =0 to 3 do begin[i,j]: = re
[i,j];;;: = true;: = tep;(step: 3,ster);. StatusBar1. Panels [0]. Text:
=st0+ster;
end;
{отменяет последний ход}UndoF;
var,j: integer;: = step + 1;: = step;(step:
3,ster);. StatusBar1. Panels [0]. Text: =st0+ster;i: =0 to 3 do beginj: =0 to 3
do begin[i,j]: = fi [i,j];;;i: =0 to 3 do beginj: =0 to 3 do begin[i,j]: = ka
[i,j];;;;i: =0 to 3 do beginj: =0 to 3 do begin[i,j]: = re [i,j];;;: = true;: =
tep;(step: 3,ster);. StatusBar1. Panels [0]. Text: =st0+ster;
end;
{возвращает отмененный с помощью undo ход}
procedure TMainF. SpeedButton7Click (Sender:
TObject);moz then;
end;
{возвращает отмененный с помощью undo ход}
procedure TMainF. Redo1Click (Sender:
TObject);moz then;;
{отменяет последний ход}TMainF.
SpeedButton6Click (Sender: TObject);mog then;;
{отменяет последний ход}TMainF.
Undo1Click (Sender: TObject);mog then;;TMainF. FormCreate (Sender: TObject);:
integer;: = 2;: = false;not FileExists ('best. res') then begin(FileB,'best.
res');(FileB);i: = 1 to 10 do begin[i]. name: = 'UnKnown';[i]. time: = 0;[i].
step: = 9999;;i: = 1 to 3 do(FileB,Bestforlevel);(FileB);;not FileExists
('saving. sav') then begin(Fild,'saving. sav');(Fild);(FilD);;;;
{начинает новую игру}TMainF.
SpeedButton11Click (Sender: TObject);
begin(g);;
{показывет лучшие результаты}
procedure TMainF. Results1Click (Sender:
TObject);i: integer;g = 0 then g: = 2;g = 2 then Form4. Label1. Caption: = '
Easy';g = 3 then Form4. Label1. Caption: = ' Normal';g = 4 then Form4. Label1.
Caption: = ' Hard ';. StrGrid. Cells [0,0]: ='The Name: ';. StrGrid. Cells
[1,0]: ='Steps: ';. StrGrid. Cells [2,0]: ='Time: ';(Fileb,'Best.
res');(FileB);(FileB,g - 2);(FileB,BestForLevel);i: = 1 to 10 do begin.
StrGrid. Cells [0, i]: = BestForLevel [i]. Name; // // // // . StrGrid. Cells
[1, i]: = IntToStr (BestForLevel [i]. Step);. StrGrid. Cells [2, i]: = IntToStr
(BestForLevel [i]. Time);;(FileB);. Form4. ShowModal;
end;
{ставит игру на паузу - т. е перекрывет игровое поле картинкой
и останавливает время}
procedure Pause;MainF. SpeedButton8. ParentFont
then begin. DrawGrid1. Visible: = false;. Image1. Visible: = true;.
SpeedButton8. ParentFont: = false;: = moz;: = mog;: = false;: = false;: =
false;: = False;begin. DrawGrid1. Visible: = true;. Image1. Visible: = false;.
SpeedButton8. ParentFont: = true;: = k;: = m;: = true;: = true;
end;;
{ставит игру на паузу - т. е перекрывет игровое поле
картинкой и останавливает время}
procedure TMainF. SpeedButton8Click (Sender:
TObject);
begin;;
{считает время с начала текщуей партии}
procedure TMainF. Timer1Timer (Sender:
TObject);clok then begin(ctime);. Panels [1]. text: =st1+IntToStr (ctime);
end;;
{ствит игру на паузу - т. е перекрывет игровое поле картинкой
и останавливает время}
procedure TMainF. Pause1Click (Sender: TObject);
begin;;
{сохраняет текущее состояние игры в файл}
procedure savve;,j,n: integer;: Tsav;seve then
begin: = false;. StringGrid1. RowCount: = Form1. StringGrid1. RowCount +
1;('Enter the name for your save: ',' Please!!! ',named);(Fild,'Saving.
sav');(Fild);: = FileSize (Fild);: = n;(Fild,0);not n = 0 then begini: =0 to n
do begin: = i;(FilD, i);(Fild,sa);sa. neme = named then begin('The save with
this name already exist! ','Input another name: ',named);sa. neme = named then
j: = n+1;;;;;i = n then seek (Fild,FileSize (Fild));j = n + 1 then seek (Fild,
i);. neme: = named;. stepd: = step;. timed: = ctime;i: = 0 to 3 do beginj: = 0
to 3 do begin. mas [i,j]: = ar [i,j];;;(Fild,asa);(Fild);: = true;;
end;
{загружает игру из файла}
procedure lodde;,n,j: integer;,b,k: integer;:
string;(Fild,'saving. sav');(Fild);: = FileSize (Fild);. StringGrid1. RowCount:
= k;(Fild);: = false;(Fild,'saving. sav');(Fild);: = FileSize (Fild);n = 0 then
exit;(Fild,0);i: = 0 to n-1 do begin(Fild,sa);. StringGrid1. Cells [0, i]: =
sa. neme;;. ShowModal;(Fild,y1);(FilD,sa);sa. neme <> '' then begin: =
sa. stepd;: = sa. timed;i: = 0 to 3 do beginj: = 0 to 3 do begin[i,j]: = sa.
mas [i,j];[i,j]: = ar [i,j];;;: = true;. StatusBar1. Panels [0]. Text: = st0+'
'+ IntToStr (step);. DrawGrid1. Repaint;. DrawGrid1. Enabled: = true;;(Fild);:
= true;
end;
{сохраняет текущее состояние игры в файл}
procedure TMainF. SpeedButton3Click (Sender:
TObject);
begin;;
{сохраняет текущее состояние игры в файл}
procedure TMainF. Save1Click (Sender: TObject);;;
{загружает игру из файла}TMainF.
SpeedButton2Click (Sender: TObject);;;
{загружает игру из файла}TMainF.
Load1Click (Sender: TObject);;;.
unit OpenF;
interface, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,, Grids;= class (TForm): TStringGrid;: TLabel;:
TLabel;StringGrid1MouseDown (Sender: TObject; Button: TMouseButton;:
TShiftState; X, Y: Integer);StringGrid1Click (Sender: TObject);
{ Private declarations }
{ Public declarations };: TForm1;,y1: integer;
{$R *. DFM}TForm1. StringGrid1MouseDown (Sender:
TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);. MouseToCell
(x,y,x1,y1);;TForm1. StringGrid1Click (Sender: TObject);;;.
unit Resul;
interface, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,, StdCtrls;= class (TForm): TStringGrid;: TLabel;
{ Private declarations }
{ Public declarations };: TForm4;
{$R *. DFM}.
unit Rules;
interface, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,;= class (TForm): TMemo;
{ Private declarations }
{ Public declarations };: TForm3;
{$R *. DFM}.
[Compiler]
[Linker]=0=0=1=0=16384=1048576=4194304=
[Directories]====VCLX30; VCL30; VCLDB30;
VCLDBX30; INETDB30; INET30; VCLSMP30; QRPT30; TEEUI30; TEEDB30; TEE30; DSS30;
IBEVNT30===0
[Parameters]==
[Version Info]=0=0=1=0=0=0=0=0=0=0=0=1049=1251
[Version Info Keys]===1.0.0.0======1.0.0.0
Comments=
Заключение
Я считаю, что при выполнении своей работы я достигла
поставленной цели по разработке и введению в действие программы, написанной
на языке Delphi.
Все задачи мною решены:
ü разработана структура моей
программы.
ü в необходимом объеме
самостоятельно освоены нужные программы: Delphi.
ü оформление удовлетворяет
основным требованиям;
Программа протестирована.
В дальнейшем я хотела бы более подробно изучить язык
программирования Delphi и еще какие-нибудь интересные языки, как Java, C++, и
создать более интересные программы, а если быть более точным - игру для
мобильного телефона.
Список
используемой литературы
1. Самоучитель Delphi,
Максим Кузнецов, Игорь Симдянов <http://oz.by/books/more.phtml?id=1011462&partner=w3partoz&isw=1024&ish=768>.560
стр., 2004 г. Издательство: BHV <http://oz.by/producer/more1203.html>.
. Самоучитель Delphi
4, Д. Котеров. Издательство - БХВ-Петербург Год издпния - 1/1/2001
. Самоучитель Delphi
5. Колисниченко Д.Н., Наука и техника - 2005, 567 стр.
. Фленов М.Е. Библия
Delphi
. Ковтанюк Ю.С.
Программирование на Turbo Pascal
. Ремнев Анатолий Курс
Delphi для начинающих. Полигон нестандартных задач
Рецензия
На протяжении этого года работы с этой ученицей я отмечала
повышенный интерес Вероники к программированию. Успешно изучив алгоритмический
язык Pascal, она продолжила изучение других языков программирования, проявляя
самостоятельность и творческий подход к делу.
Больших успехов Вероника достигла в
изучении PHP и Delphi. У нее есть несколько самостоятельно написанных работ на этом
языке.
Отличительной особенностью работы Мермер Вероники является ее
телекоммуникационная направленность, обеспечивающая досуг и общение между
одноклассниками по средствам игры. Такая возможность становится особенно важной
после завершения учебы в школе.
Для разработки этой игры автор работы освоила в необходимом
объеме такой язык программирования, как Delphi и протестировала эту
игру.
Нет сомнения, что данная работа будет интересна всем, кто с
помощью Delphi хочет организовать общение между друзьями.