Смекни!
smekni.com

Розробка засобами Delphi дидактичного ілюстративного матеріалу для розвязання задачі з аналітичної Логарифмічна спіраль (стр. 7 из 8)

6. Бондаренко, М.А.Программирование в Delphi — Харьков : б.н., 2005.

7. Маркушевич А.И.,Замечательные кривые — М., 1978 г., 48 с.: ил.

8. Бобровский С.Delphi 5 М.: Питер, 2002. — 346 с.: ил.

9. Гаевский А.Разработка программных приложений на Delphi 6 – М.: Киев, 2000. — 457 с.

10. Коцюбинский А.О., Грошев С.В.Язык программирования Delphi 5 — М.: «Издательство Триумф», 1999. — 288 с.

11. Леонтьев В.Delphi 5— М.: Москва «Олма-Пресс», 1999. — 446 с.

12. Ильина Т.А.Программирование на Delphi 6 М.: Питер, 2000. — 318 с.

13. Шапошников И.Delphi 5— М.: Санкт-Петербург, 2001. — 203 с.

14. Інтернет-ресурс: http://beluch.ru/progr/100comp/index.htm (онлайн довідник о компонентах Delphi).

Додаток 1

Програмний код додатку

Головна форма:

unit LSpir;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ShellApi, Buttons, ExtCtrls, Menus, ButtonComps,

ComCtrls;

type

TformMain = class(TForm)

PaintBox1: TPaintBox;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

MainMenu1: TMainMenu;

j1: TMenuItem;

N1: TMenuItem;

GroupBox1: TGroupBox;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N9: TMenuItem;

ImageButton3: TImageButton;

GroupBox2: TGroupBox;

ImageButton1: TImageButton;

ImageButton2: TImageButton;

CheckBox1: TCheckBox;

GroupBox3: TGroupBox;

TrackBar1: TTrackBar;

Label4: TLabel;

CheckBoxPlus: TCheckBox;

CheckBoxMin: TCheckBox;

procedure FormPaint(Sender: TObject);

procedure PaintBox1Paint(Sender: TObject);

procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState;

X,Y: Integer);

procedure N5Click(Sender: TObject);

procedure ImageButton1Click(Sender: TObject);

procedure ImageButton2Click(Sender: TObject);

procedure ImageButton3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure CheckBox1Click(Sender: TObject);

procedure TrackBar1Change(Sender: TObject);

procedure Edit3KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure N2Click(Sender: TObject);

procedure CheckBoxPlusClick(Sender: TObject);

procedure CheckBoxMinClick(Sender: TObject);

private

procedure Line(x1,y1,x2,y2: integer; const dep: byte = 1);

public

{ Public declarations }

end;

procedure Delay(ms : longint);

var

formMain: TformMain;

centerX, centerY, dp: integer;

spiral: boolean;

z:integer;

const

xmin = -8; xmax = 6;

ymin = -6; ymax = 8;

implementation

uses LSpir_zas, LSpir_math, LSpir_about, LSpir_Help;

{$R *.dfm}

//Задержка

procedure Delay(ms : longint);

var

t1 : longint;

begin

t1:=GetTickCount;

while (GetTickCount - t1) < ms do Application.ProcessMessages;

end;

//Фоновый рисунок

procedure TformMain.FormPaint(Sender: TObject);

var

x,y: integer;

pic: TGraphic;

begin

pic:=TBitmap.Create;

pic.LoadFromFile('background.bmp');

x:=0; y:=0;

while y < Height do

begin

while x < Width do

begin

Canvas.Draw(x,y,pic);

x:=x+pic.Width;

end;

x:=0;

y:=y+pic.Height;

end;

pic.Free;

end;

//Построение линии

procedure TformMain.Line(x1, y1, x2, y2: integer; const dep: byte);

begin

with PaintBox1.Canvas do

begin

Pen.Width:=dep;

MoveTo(centerX+(x1*dp),centerY-(y1*dp));

LineTo(centerX+(x2*dp),centerY-(y2*dp));

end;

nd;

//Трансляция координат

procedure TformMain.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState;

X,Y: Integer);

begin

Label4.Caption:=Format('X = %d, Y = %d',[X,Y]);

end;

//Построение координатной плоскости и спирали

procedure TformMain.PaintBox1Paint(Sender: TObject);

var

x,y,m,i,n: integer;

w,h,p0,p1,p2: integer;

fi,p,a,q,k: real;

begin

w:=PaintBox1.Width;

h:=PaintBox1.Height;

dp:=TrackBar1.Position;

with PaintBox1.Canvas do

begin

Pen.Width:=3;

Pen.Color:=clBlack;

Brush.Color:=clWhite;

Rectangle(0,0,w,h);

//центр координатной оси

centerX:=w div 2;

centerY:=h div 2;

//черчение сетки

if CheckBox1.Checked then

begin

for i:=0 to 36 do

begin

Line(-18, 18-i, 18, 18-i);

Line(18-i, 18, 18-i, -18);

end;

end;

//оцифровка

i:=0;

m:=0;

repeat

x:=xmin+m;

y:=ymin+m;

if (x <> 0) and (x <= xmax) then TextOut(centerX+(xmin*dp)+i+1, centerY, IntToStr(x));

if (y <> 0) and (y <= ymax) then TextOut(centerX+5, centerY-(ymin*dp)-i-5, IntToStr(y));

i:=i+dp;

m:=m+1;

until i > w;

//построение координатной оси

Pen.Color:=clRed;

Line(xmin, 0, xmax, 0, 2); //координатная ось X

Line(0, ymin, 0, ymax, 2); //координатная ось Y

//подписи осей

TextOut(centerX+(xmax*dp)+10,centerY-15,'X');

TextOut(centerX-14,centerY-(ymax*dp)-14,'Y');

//построение спирали

if z=1 then

begin

n:=StrToInt(Edit1.Text);

p0:=StrToInt(Edit2.Text)*dp; //введённое значение полярного радиуса

//умножаем на шаг сетки, для того чтобы

//данный радиус строился в соответствии с

//координатной плоскосью, а не по пикселям

q:=StrToFloat(Edit3.Text);

a:=1;

while a < 360 * n do //расчитываем радиус, увеличивая угол

begin //от 0 до 360 градусов

fi:=a*(pi/180);//расчитываем угол fi

k:=(ln(q))/(2*pi);

p:=p0*exp(k*fi);

p1:=centerX+trunc(p*cos(fi));

p2:=centerY-trunc(p*sin(fi));

PaintBox1.Canvas.Pixels[p1,p2]:=clBlue;

a:=a+0.1; //шаг

end;

end;

end;

end;

//Цифровая маска для q

procedure TformMain.Edit3KeyPress(Sender: TObject; var Key: Char);

var

vrPos, vrLength, vrSelStart: byte;

const

I: byte = 1; //I+1 = количество знаков после запятой (в данном случае - 2 знака)

begin

with Sender as TEdit do

begin

vrLength:= Length(Text); //определяем длину текста

vrPos:= Pos(',', Text); //проверяем наличие запятой

vrSelStart:= SelStart; //определяем положение курсора

end;

case Key of

'0'..'9':

begin

//проверяем положение курсора и количество знаков после запятой

if (vrPos > 0) and (vrLength - vrPos > I) and (vrSelStart >= vrPos) then

Key := #0; //"погасить" клавишу

end;

',', '.':

begin

//если запятая уже есть, если запятую пытаются поставить перед

//числом или никаких цифр в поле ввода еще нет

if (vrPos > 0) or (vrSelStart = 0) or (vrLength = 0) then

Key := #0 //"погасить" клавишу

else

Key:= #44; //всегда заменять точку на запятую

end;

#8: ; //позволить удаление знаков клавишей 'Back Space'

else

Key:= #0; //"погасить" все остальные клавиши

end;

end;

//Цифровая маска для p0

procedure TformMain.Edit2KeyPress(Sender: TObject; var Key: Char);

var

vrP0, vrLength, vrSelStart: byte;

begin

with Sender as TEdit do

begin

vrLength:= Length(Text); //определяем длину текста

vrP0:= pos('',Text); //проверяем наличие символов

vrSelStart:= SelStart; //определяем положение курсора

end;

case Key of

'1'..'6':

begin

//

if (vrP0 > 6) then

Key := #0; //"погасить" клавишу

end;

#8: ; //позволить удаление знаков клавишей 'Back Space'

else

Key := #0; //"погасить" все остальные клавиши

end;

end;

//Цифровая маска для n

procedure TformMain.Edit1KeyPress(Sender: TObject; var Key: Char);

var

vrP0, vrLength, vrSelStart: byte;

begin

with Sender as TEdit do

begin

vrLength:= Length(Text); //определяем длину текста

vrP0:= pos('',Text); //проверяем наличие запятой

vrSelStart:= SelStart; //определяем положение курсора

end;

case Key of

'1'..'9':

begin

//

if (vrP0 > 9) then

Key := #0; //"погасить" клавишу

end;

#8: ; //позволить удаление знаков клавишей 'Back Space'

else

Key := #0; //"погасить" все остальные клавиши

end;

end;

//Показать спираль

procedure TformMain.ImageButton1Click(Sender: TObject);

begin

z:=1;

PaintBox1.Repaint;

end;

//Удалить спираль

procedure TformMain.ImageButton2Click(Sender: TObject);

begin

z:=0;

PaintBox1.Repaint;

end;

//Показать/Скрыть сетку

procedure TformMain.CheckBox1Click(Sender: TObject);

begin

PaintBox1.Repaint;

end;

//Выделение ползунка

procedure TformMain.TrackBar1Change(Sender: TObject);

begin

Trackbar1.SelStart:=Trackbar1.Min;

Trackbar1.SelEnd:=Trackbar1.Position;

PaintBox1.Repaint;

end;

//Вызов консольного приложения

procedure TformMain.N5Click(Sender: TObject);

begin

ShellExecute(formMain.Handle, nil, PChar('LSpir_cons.exe'), nil, nil, SW_ShowNormal);

end;

//'Аналитическое решение'

procedure TformMain.N4Click(Sender: TObject);

begin

formMath_1.ShowModal;

end;

//'О программе'

procedure TformMain.N9Click(Sender: TObject);

begin

formAbout.Show;

end;

//Закрытие программы

procedure TformMain.ImageButton3Click(Sender: TObject);

begin

close;

end;

//Показать справку

procedure TformMain.N2Click(Sender: TObject);

begin

formHelp.Show;

end;

procedure TformMain.CheckBoxPlusClick(Sender: TObject);

begin

if CheckBoxPlus.Checked then

begin

TrackBar1.Max:=50;

TrackBar1.Min:=23;

TrackBar1.Position:=23;

CheckBoxMin.Checked:=False;

end;

end;

procedure TformMain.CheckBoxMinClick(Sender: TObject);

begin

if CheckBoxMin.Checked then

begin

TrackBar1.Max:=23;

TrackBar1.Min:=13;

TrackBar1.Position:=23;

CheckBoxPlus.Checked:=False;

end;

end;

end.

Форма заставки:

unit LSpir_zas;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, jpeg;

type

TformVignette = class(TForm)

Image1: TImage;

private

{ Private declarations }

public

{ Public declarations }

end;

var

formVignette: TformVignette;

implementation

{$R *.dfm}

end.


Форма «Опрограмме»:

unit LSpir_about;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, jpeg, ExtCtrls, StdCtrls;

type

TformAbout = class(TForm)

Image1: TImage;

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Bevel1: TBevel;

private

{ Private declarations }

public

{ Public declarations }

end;

var

formAbout: TformAbout;

implementation

{$R *.dfm}

end.

Форма «Аналитическое решение»(1):

unit LSpir_math;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, ComCtrls, StdCtrls, ButtonComps, OleCtnrs;

type

TformMath_1 = class(TForm)

ImageButton1: TImageButton;

ImageButton3: TImageButton;

OleContainer1: TOleContainer;

OleContainer2: TOleContainer;

procedure ImageButton3Click(Sender: TObject);

procedure ImageButton1Click(Sender: TObject);

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

formMath_1: TformMath_1;

implementation

uses LSpir_math_2;

{$R *.dfm}

procedure TformMath_1.ImageButton3Click(Sender: TObject);

begin

close;

end;

procedure TformMath_1.ImageButton1Click(Sender: TObject);

begin

formMath_1.Hide;

formMath_1.Close;

formMath_2.Show;

end;

procedure TformMath_1.FormPaint(Sender: TObject);

var

x,y: integer;

pic: TGraphic;

begin

pic:=TBitmap.Create;

pic.LoadFromFile('background_h.bmp');

x:=0; y:=0;

while y < Height do

begin

while x < Width do

begin

Canvas.Draw(x,y,pic);

x:=x+pic.Width;

end;

x:=0;

y:=y+pic.Height;

end;

pic.Free;

end;

end.

Форма «Аналитическое решение»(2):

unit LSpir_math_2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ButtonComps, OleCtnrs, jpeg, ExtCtrls;

type

TformMath_2 = class(TForm)

ImageButton2: TImageButton;

OleContainer1: TOleContainer;

Image1: TImage;

ImageButton1: TImageButton;

procedure ImageButton3Click(Sender: TObject);

procedure ImageButton2Click(Sender: TObject);

procedure FormPaint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

formMath_2: TformMath_2;

implementation

uses LSpir_math;

{$R *.dfm}

procedure TformMath_2.ImageButton3Click(Sender: TObject);

begin

close;

end;

procedure TformMath_2.ImageButton2Click(Sender: TObject);

begin

formMath_2.Hide;

formMath_2.Close;

formMath_1.Show;

end;

procedure TformMath_2.FormPaint(Sender: TObject);

var

x,y: integer;

pic: TGraphic;

begin

pic:=TBitmap.Create;

pic.LoadFromFile('background_h.bmp');

x:=0; y:=0;

while y < Height do

begin

while x < Width do

begin

Canvas.Draw(x,y,pic);

x:=x+pic.Width;

end;

x:=0;

y:=y+pic.Height;

end;

pic.Free;

end;

end.


Форма довідки:

unit LSpir_help;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, ButtonComps;

type

TformHelp = class(TForm)

Image1: TImage;

Image2: TImage;