Тақырып: компьютерлік графика негіздері жоспар



бет22/30
Дата08.09.2017
өлшемі4 Mb.
#30454
1   ...   18   19   20   21   22   23   24   25   ...   30

Әдістемелік нұсқаулар:

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;
Тақырып: Графикалық компоненттер.

Сұрақтар:

  1. Shape компоненті.

  2. Bevel компоненті.

  3. Image компоненті.

  4. PaintBox компоненті.

  5. ImageList компоненті.

1 жұмыс.



1 тапсырма:

Форманың OnPaint оқиғасы арқылы, .bmp файлдан жүктелген суретті форманың дәл ортасына шығаратын проект құрыңыз.



Ескерту:

  1. Форманың енін ClientWidth, биіктігін ClientHeight қасиеттері арқылы анықтауға болады.

  2. Суреттің екілік бейнесімен жұмыс істеуге арналған 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 жұмыс



Тапсырма:

Құмырадағы гүлді салу.



Ескерту:

  1. қисық сызықтарды салатын безье жасаңыз (PolyBezier процедурасы арқылы);

  2. суреттің әрбір элементі салынып болған соң, олардың ішін FloodFill процедурасы арқылы бояңыз.

  3. «пробел» пернесін басқанда қисықтардың нүктесі және оларды қосып тұрған сызықтар көрсетілсін, екінші рет «пробел» пернесін басқанда белгілену алынып тасталынсын.




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 жұмыс




Достарыңызбен бөлісу:
1   ...   18   19   20   21   22   23   24   25   ...   30




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет