Әдістемелік нұсқаулар:
1-ші тапсырманың коды:
procedure TForml.FormClick(Sender: TObject);
begin
Canvas.Pen.Color := clRed; // қаламұштың түсі қызыл
Canvas.Pen.Width := 1;
//қаламұштың қалыңдығы бір нүктедей
Canvas.Pen.Style := psDashDot;
// қаламұштың сызығының типі пунктирлі-штрих
Canvas.MoveTo(0,0); Canvas.LineTo(350,250);//түзу сызу
end;
2-ші тапсырманың коды:
procedure TForml.FormPaint(Sender: TObject);
var
bmp : TBitmap;
begin
with Canvas do begin
Pen.Color := clLime;
Pen.Width := 3;
Brush.Color := clRed;
Brush.Style := bsBDiagonal;
Ellipse(10,10,160,160);
bmp := TBitmap.Create;
bmp.PixelFormat := pf24bit;
bmp.Width := 8; bmp.Height := 8;
bmp.Canvas.Pen.Color := clRed;
bmp.Canvas.Brush.Color := clRed;
bmp.Canvas.Ellipse(0, 0, 5, 5) ;
Brush.Bitmap := bmp;
Ellipse(170,10,320,160);
rush.Bitmap := nil; bmp.Free;
end
end;
3-ші тапсырманың коды:
procedure TForml.FormPaint(Sender: TObject);
begin
with Canvas do begin
Brush.Style := bsClear;
Font.Color := clBlue;
Font.Size := 144;
Font.Name := 'Webdings'
TextOut(50,0,'я1);
end
end;
4-ші тапсырманың коды:
procedure TForml.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
with Canvas do begin
Brush.Color := Color;
Font.Color := clBlue;
Font.Size := 10;
Font.Name := 'Times New Roman';
Font.Style := [fsBold, fsltalic, fsUnderline];
TextOut(х, у, '(' + IntToStr(x) + ',' + IntToStr(y) + ')');
Brush.Color := clBlack;
Pen.Color := clBlack;
Ellipse(x - 3, у - 3, x + 3, у + 3);
end;
end;
Тақырып: Графикалық компоненттер.
Сұрақтар:
Shape компоненті.
Bevel компоненті.
Image компоненті.
PaintBox компоненті.
ImageList компоненті.
№1 жұмыс.
1 тапсырма:
Форманың OnPaint оқиғасы арқылы, .bmp файлдан жүктелген суретті форманың дәл ортасына шығаратын проект құрыңыз.
Ескерту:
Форманың енін ClientWidth, биіктігін ClientHeight қасиеттері арқылы анықтауға болады.
Суреттің екілік бейнесімен жұмыс істеуге арналған Tbitmap класын қолданыңыз.
2 тапсырма:
Tcanvas класының көмегімен төмендегі суретті салыңыз. Суреттегі машина мен итті Webdings шрифтінен алыңыз.
Әдістемелік нұсқаулар:
1-ші тапсырманың коды:
procedure TForml.FormPaint(Sender: TObject);
var
Pic : TBitmap;
begin
Pic := TBitMap.Create;
Pic.LoadFromFile('tulips.bmp');
Canvas.Draw((ClientWidth - Pic.Width) div 2,
(ClientHeight - Pic.Height) div 2, Pic) ;
Pic.Free;
end;
2-ші тапсырманың коды:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ToolWin;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
private
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
//күннің шуақтары
SunRays : array[0..10, 0..3] of longint = (
(358, 116, 358, 141), // 1-ші шуағы
(292, 74, 319, 75), // 2-ші шуағы
(296, 35, 329, 53),
(327, 98, 299, 117),
(338, 112, 329, 129),
(378, 110, 390, 126),
(359, 33, 359, 14), //...
(384, 43, 399, 26),
(337, 38, 333, 29),
(398, 93, 419, 103),
(396, 54, 411, 45) //11-ші шуағы
);
// 1-ші бұлт
Cloud0 : array[0..10, 0..3] of Longint = (
(331, 71, 536, 94), //1-ші эллипс
(366, 81, 409, 58), //2-ші эллипс
(405, 83, 469, 48),
(448, 59, 481, 79),
(422, 64, 538, 89),
(371, 66, 352, 80), //...
(514, 85, 550, 75),
(392, 64, 418, 55),
(345, 98, 389, 79),
(531, 96, 459, 78),
(392, 81, 464, 103) //11-ші эллипс );
//2-ші бұлт
Cloud1 : array[0..6, 0..3] of Longint = (
( 49, 75, 241, 104), // 1-ші эллипс
( 96, 59, 162, 94), // 2-ші эллипс
( 84, 82, 108, 69),
(154, 69, 194, 82), //...
(148, 63, 174, 73),
(157, 111, 213, 93),
(111, 89, 57, 106) // 7-ші эллипс
);
//жол болып салынатын трапецияның төбелерінің коор-ы
Road: array[1..4] of TPoint = (
(x:250; y:250),
(x:205; y:380),
(x:410; y:380),
(x:330; y:250)
);
// жерді кескіндейтін тіктөртбұрыштың координаталары
Earth: TRect = (Left:0; Top:250; Right:550; Bottom:380);
// жолдың оң және сол жағындағы гооризонттағы ағаштарды кескіндейтін тіктөртбұрыштың координаталары
TreesL: TRect = (Left:0; Top:235; Right:250; Bottom:250);
TreesR: TRect = (Left:330; Top:235; Right:550; Bottom:250);
// OnPaint оқиғасы программа программа бейнені жаңарту керек //болғанда шақырылады
procedure TForm1.FormPaint(Sender: TObject);
var
r:TRect;
i : Integer;
begin
with Canvas do begin
//Күн
Brush.Color:=RGB(255,255,0);
Pen.Color:=RGB(255,255,0);
Pen.Width:=1;
Ellipse(309, 30, 407, 123);
Pen.Width:=5;
//күннің шуақтарын салу
for i := 0 to 10 do begin
MoveTo(SunRays[i, 0], SunRays[i, 1]);
LineTo(SunRays[i, 2], SunRays[i, 3]);
end;
//бұлттар
Brush.Color:=clWhite;
Pen.Color:=clWhite;
Pen.Width:=1;
// бірінші бұлтты кескіндейтін эллипстерді саламыз
for i := 0 to High(Cloud0) do
Ellipse(Cloud0[i, 0], Cloud0[i, 1], Cloud0[i, 2], Cloud0[i, 3]);
// екінші бұлтты кескіндейтін эллипстерді саламыз
for i := 0 to High(Cloud1) do
Ellipse(Cloud1[i, 0], Cloud1[i, 1], Cloud1[i, 2], Cloud1[i, 3]);
//жер
Pen.Color:=RGB(0,90,0);
Brush.Color:=RGB(0,90,0);
FillRect(Earth);
// жолдың оң және сол жағындағы горизонттағы ағаштар
Pen.Color:=RGB(0,120,0);
Brush.Color:=RGB(0,120,0);
FillRect(TreesL); FillRect(TreesR);
//асфальт төселген жол
Pen.Color:=clGray;
Brush.Color:=clGray;
Polygon(Road);
//жолдағы ақ жолақтар
Pen.Color := clWhite;
Pen.Style := psDash; //пунктирлі сызық
MoveTo((Road[1].x + Road[4].x) div 2,(Road[1].y + Road[4].y) div 2);
LineTo((Road[2].x + Road[3].x) div 2,(Road[2].y + Road[3].y) div 2); MoveTo((Road[1].x + Road[4].x) div 2 - 1, (Road[1].y + Road[4].y) div 2);
LineTo((Road[2].x + Road[3].x) div 2 - 1, (Road[2].y + Road[3].y) div 2);
MoveTo((Road[1].x + Road[4].x) div 2 + 1, (Road[1].y + Road[4].y) div 2);
LineTo((Road[2].x + Road[3].x) div 2 + 1, (Road[2].y + Road[3].y) div 2);
// Webdings шрифтінің көмегімен жолға машина саламыз
Font.Color := clBlack;
Brush.Style := bsClear;
Font.Size := 45;
Font.Name := 'Webdings';
// машинаға сәйкес келетін ағылшынның 'p' әріпін шығарамыз,
TextOut(235, 250, 'p');
//итті саламыз
Font.Size := 30; TextOut(340, 320, 'х');
end
end;
№2 жұмыс
Тапсырма:
Құмырадағы гүлді салу.
Ескерту:
қисық сызықтарды салатын безье жасаңыз (PolyBezier процедурасы арқылы);
суреттің әрбір элементі салынып болған соң, олардың ішін FloodFill процедурасы арқылы бояңыз.
«пробел» пернесін басқанда қисықтардың нүктесі және оларды қосып тұрған сызықтар көрсетілсін, екінші рет «пробел» пернесін басқанда белгілену алынып тасталынсын.
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(Tform)
procedure FormPaint(Sender: Tobject);
procedure FormKeyDown(Sender: Tobject; var Key: Word;
Shift: TshiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: Tform1;
implementation
{$R *.dfm}
Var
//егер ShowPts айнымалысы true мәнін қабылдаса,
//Безье қисықтарының нүктелері пунктирлі
//сызықтармен қосылады
ShowPts : oolean = false;
{ Безье қисығын анықтайтын нүктелер жиыны }
//құмыраның сол жақ контуры
p1: array[1..7] of Tpoint = (
(x:150; y:250),
(x:175; y:275),
(x:175; y:300),
(x:150; y:325),
(x:125; y:350),
(x:125; y:400),
(x:175; y:425)
);
// құмыраның сол жақ контуры
p2: array[1..7] of Tpoint = (
(x:222; y:250),
(x:200; y:275),
(x:200; y:300),
(x:225; y:325),
(x:250; y:350),
(x:250; y:400),
(x:200; y:425)
);
// гүлдің сабы
p3: array[1..4] of Tpoint = (
(x:186; y:246),
(x:186; y:150),
(x:160; y: 50),
(x:109; y:138)
);
//гүл
p4: array[1..7] of Tpoint = (
(x: 53; y:167),
(x: 70; y:170),
(x:100; y:110),
(x:109; y:138),
(x:138; y:135),
(x:100; y:190),
(x:110; y:200)
);
// гүлдің астыңғы жағы
p5: array[1..5] of Tpoint = (
(x: 53; y:167),
(x: 72; y:170),
(x: 81; y:183),
(x:100; y:186),
(x:110; y:200)
);
//оң жақтағы жапырақ
p6: array[1..7] of Tpoint = (
(x:186; y:225),
(x:205; y:160),
(x:219; y:153),
(x:262; y:175),
(x:246; y:165),
(x:205; y:170),
(x:186; y:225)
);
//сол жақтағы жапырақ
p7: array[1..7] of Tpoint = (
(x:186; y:225),
(x:154; y:187),
(x:130; y:215),
(x:112; y:252),
(x:142; y:219),
(x:167; y:205),
(x:186; y:225)
);
procedure Tform1.FormPaint(Sender: Tobject);
var I : byte;
begin
with Canvas do begin
{мәтінді шағарамыз}
Brush.Color := Color;
Font.Size := 12;
Font.Name := ‘Comic Sans MS’;
TextOut(40,10,'Пробел – показать/спрятать линии');
{құмыраның силуэтын саламыз}
//қаламұштың түсі мен қалыңдығын таңдаймыз
Pen.Color := clBlue; Pen.Width := 4;
//сол жақтағы қисық
PolyBezier(p1);
//оң жақтағы қисық
PolyBezier(p2);
//құмыраны шектейтін жоғарғы көлбеу сызық
MoveTo(p1[1].x, p1[1].y); LineTo(p2[1].x, p2[1].y);
// құмыраны шектейтін төменгі көлбеу сызық
MoveTo(p1[7].x, p1[7].y); LineTo(p2[7].x, p2[7].y);
//құмыраның ішін контурының түсінің түсімен бояймыз
Brush.Color := clBlue; // бояуыштың түсін көрсетіміз
FloodFill(p1[3].x+5, p1[3].y, clBlue, fsBorder); // сол түспен бояймыз
{гүлдің сабын салу}
Pen.Color := clGreen;
PolyBezier(p3);
{гүлді салу}
Pen.Color := $00C080FF;
PolyBezier(p4); //гүлдің жоғарғы жағын бірқалыпты сызықпен саламыз
PolyLine(p5); // гүлдің төменгі жағын сынық сызықпен саламыз
Brush.Color := $00C080FF;
FloodFill(p5[2].x+5, p5[2].y, $00C080FF, fsBorder);
{оң жақтағы жапырақ}
Pen.Color := clGreen;
Pen.Width := 3;
PolyBezier(p6);
Brush.Color := clGreen;
FloodFill(222, 172, clGreen, fsBorder);
{сол жақтағы жапырақ}
PolyBezier(p7);
FloodFill(150, 213, clGreen, fsBorder);
{егер ShowPts айнымалысы true мәнін қабылдаса, онда Безье қисықтарының нүктелерін қызыл дөңгелекшемен белгілеп, оларды қосып тұрған сызықтарды пунктирлі сызықпен көрсетеміз}
if ShowPts = true then begin
// нүктелерді қосатын сынық сызықтарды салу
Pen.Color := clBlack; Pen.Style := psDot; Brush.Color := Color;
Pen.Width := 1;
Polyline(p1);
Polyline(p2);
Polyline(p3);
Polyline(p4);
Polyline(p6);
Polyline(p7);
// нүктелерді қызыл дөңгелекшелермен белгілейміз
Pen.Color := clRed;
Brush.Color := clRed;
for i:= 0 to length(p1) do
Ellipse(p1[i].x-3, p1[i].y-3, p1[i].x+3, p1[i].y+3);
for i:= 0 to length(p2) do
Ellipse(p2[i].x-3, p2[i].y-3, p2[i].x+3, p2[i].y+3);
for i:= 0 to length(p3) do
Ellipse(p3[i].x-3, p3[i].y-3, p3[i].x+3, p3[i].y+3);
for i:= 0 to length(p4) do
Ellipse(p4[i].x-3, p4[i].y-3, p4[i].x+3, p4[i].y+3);
for i:= 0 to length(p6) do
Ellipse(p6[i].x-3, p6[i].y-3, p6[i].x+3, p6[i].y+3);
for i:= 0 to length(p7) do
Ellipse(p7[i].x-3, p7[i].y-3, p7[i].x+3, p7[i].y+3);
end;
end
end;
procedure Tform1.FormKeyDown(Sender: Tobject; var Key: Word;
Shift: TshiftState);
begin
//егер Пробел пернесі басылса, Безье қисықтарының нүктелері
// мен оларды қосатын сызықтарды көрсетеміз
if Key = VK_SPACE then begin
ShowPts := not ShowPts;
// ShowPts айнымалысының мәнін керісінше өзгертеміз
refresh //суретті жаңартамыз
end;
end;
end.
№3 жұмыс
Достарыңызбен бөлісу: |