Кластар құрылымы
Delphi ортасында құрылған қосымшалар сурет салу Canvas (кенеп, селдір мата, мата) қасиетіне ие компоненттерді қолдану арқасында ғана жүзеге асырылады. Әдетте, бұл қасиеттерге TForm, TStringGrid, TImage, TPrinter компоненттері ие. TCanvas және қалған барлық графикалық кластар үшін TPersistent класы арғы тегі болып табылады. TPersistent класының ұрпақтары:
1) құралдар класын тудыратын TGraphicsObject класы;
2) сурет салу әдістері мен құралдары бар TСanvas класы;
3) файлдардың өз форматы бар бейнелердің төрт класын {TBitmap, TIcon, Tmetafile, TJPEGImage} тудыратын TGraphic класы;
4) TGraphic класының, дәлірек айтқанда оның ұрпақтарының қондырмасы болатын TPicture класы. Оның TGraphic өрісінде TBitmap, Ticon, TMetafile немесе TJPEGImage болуы мүмкін.
Мысал 5. Графиканы бағдарламалау. Түсті, қылқалам қалыңдығын және құюды таңдау мүмкіндіктері бар графикалық редактор бағдарламасын жасап шығарыңдар.
Тапсырманы орындау технологиясы:
компоненттер
|
Компоненттер парағы
|
Қасиеттердің өзгерулері
|
Image1
|
Additional
|
|
ColorDialog1
|
Dialogs
|
|
SpinEditx: SpinButton
|
Samples
|
Name: SpinEditx
Events бетінде – OnChange: SpinEditxChange
|
SpeedButton 1
SpeedButton2
SpeedButton4
|
Additional
|
Батырмаға арналған суреттер алдын ала paint- редакторында салынып, Glyph қасиеті арқылы ашылады.
|
unit U2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, Spin, ExtCtrls, Menus;
type
TForm1 = class(TForm)
Image1: TImage;
SpinEditx: TSpinEdit;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton4: TSpeedButton;
ColorDialog1: TColorDialog;
procedure SpinEditxChange(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure Drawgr;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i1,i2,j1,j2: integer;
implementation
{$R *.dfm}
procedure TForm1.SpinEditxChange(Sender: TObject);
begin
image1.canvas.pen.Width:=SpinEditx.value;
drawgr;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if colordialog1.execute then
begin
image1.Canvas.Brush.Color:=ColorDialog1.Color;
drawgr;
end;
end;
procedure TForm1.DrawGr;
var x:integer;
begin
with Image1.canvas do
begin
Image1.canvas.Ellipse(10,10,100,100);
end;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
form1.Close;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
with image1 do
begin
i1:=0; j1:=0;
i2:=Width;
j2:=Height;
Drawgr; end;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
if colordialog1.execute then
begin
image1.Canvas.Pen.Color:=ColorDialog1.Color;
DrawGr;
end;
end;
end.
М ысал 6. Нүктенің фигураға тиесілігін анықтайтын бағдарламаны құру.
Тапсырманы орындау технологиясы:
unit unMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Label3: TLabel;
procedure FormPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ClearCanvas;
private
Center : TPoint;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure Tform1.ClearCanvas;
begin
Center := Point(form1.Width div 2, form1.Height div 2);
Canvas.Brush.Color := clHighlightText;
Canvas.FillRect(Canvas.ClipRect);
Canvas.Pen.Color := clRed;
{----------тілшелерді саламыз------------------------------}
Canvas.MoveTo(form1.Width div 2 - 5, 15);
Canvas.LineTo(form1.Width div 2, 10);
Canvas.LineTo(form1.Width div 2 + 5, 15);
canvas.TextOut(form1.Width div 2 + 5, 15, ' ось Y');
Canvas.MoveTo(form1.Width - 25, form1.Height div 2 - 5 );
Canvas.LineTo(form1.Width - 20, form1.Height div 2);
Canvas.LineTo(form1.Width - 25, form1.Height div 2 + 5);
Canvas.TextOut(form1.Width - 45, form1.Height div 2 + 5, ' ось X');
Canvas.TextOut(Center.X + 3, Center.Y + 3, '0');
Canvas.TextOut(Center.X - 105, Center.Y + 3, '-1');
Canvas.TextOut(Center.X + 3, Center.Y - 210, '2');
Canvas.TextOut(Center.X + 96, Center.Y + 3, '1');
{------------------------------------------------------}
Canvas.MoveTo(form1.Width div 2, 10);
Canvas.lineTo(form1.Width div 2, form1.Height - 30 );
Canvas.MoveTo(10, form1.Height div 2);
Canvas.LineTo(form1.Width - 20, form1.Height div 2);
Canvas.Pen.Color := clBlack;
Canvas.MoveTo(Center.X - 100, Center.Y);
Canvas.LineTo(Center.X, Center.Y - 200);
Canvas.LineTo(Center.X + 100, Center.Y);
Canvas.LineTo(Center.X - 100,Center.Y);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
ClearCanvas;
end;
procedure TForm1.Button1Click(Sender: TObject);
var ptX, ptY, Y: Integer;
begin
try
ptX := Trunc(StrToFloat(Edit1.Text)*100);
except
MessageDlg(' X-тің координатасы дұрыс емес енгізілген !', mtError, [mbOK], 0);
Edit1.Text := '';
Edit1.SetFocus;
exit;
end;
try
ptY:= Trunc(StrToFloat(Edit2.Text)*100);
except
MessageDlg('Y-тің координатасы дұрыс емес енгізілген!', mtError, [mbOK], 0);
Edit2.Text := '';
Edit2.SetFocus;
exit;
end;
Canvas.Brush.Color := clBlack;
Canvas.Ellipse(Center.X + ptX - 3,Center.Y - ptY - 3,Center.X + ptX + 3,Center.Y - ptY + 3);
if ptX <= 0 then
begin
Y := 2*ptX + 200;
if ptY<=Y then Label3.Caption:= ('+Edit1.Text+':'+Edit2.Text+') нүктесі фигураға тиесілі !'
else Label3.Caption:='('+Edit1.Text+':'+Edit2.Text+') нүктесі фигураға тиесілі емес!';
end;
if ptX > 0 then
begin
Y := -2*ptX + 200;
if ptY <= Y then Label3.Caption:='('+Edit1.Text+':'+Edit2.Text+') нүктесі фигураға тиесілі!'
else Label3.Caption:='('+Edit1.Text+':'+Edit2.Text+') нүктесі фигураға тиесілі емес !';
end;
end;
end.
Достарыңызбен бөлісу: |