5.1. Proceduri si functii
Line k1e5em
Procedura Line deseneaza puncte de coordonate (x1, y2) si (x2, y2).
Culoarea liniei poate fi stabilita cu procedura SetColor, stilul si grosimea
ei pot fi stabilite cu procedura SetLineStyle. Procedura este definita astfel:
Procedure Line (x1, y1, x2, y2:integer);
X1, Y1 sunt coordonatele de inceput ale liniei.
X2, Y2 sunt coordonate de sfarsit ale liiei.
LineTo
Procedura LineTo deseneaza o linie de la pozitia pointer-ului actual la un punct
dat de coordonate (x, y).
Culoarea liniei se stabiliste cu procedura SetColor, stilul, modul si grusimea
se stabilesc cu procedura SetLinesStyle. Procedura este stabilita astfel:
Procedure LineTo (x, y: integer);
X si Y sunt coordonate de sfarsit ale liniei.
LineRel
Procedura LineRel deseneaza olinie de la pozitia pointer-ului actual pana
la un punctdat definit de destinatie DX si DY.
Culoarealiniei se stabileste cu procedura SetColor, stilul si grosimea se stabilesc
cu procedura SetLineStyle. Procedura este definita astfel:
Procedure LineRel (DX, DY: integer);
DX si DY reprezinta distanta in sensul axei x, respectiv y.
MoveTo
Procedura MoveTo muta pointer-ul actual de coordonate x, y. Procedura este definita
astfel:
Procedure MoveTo (x, y:integer);
MoveRel
Procedura MoveRel muta pointer-ul actual din pozitia curenta la un punct definit
de distantele DX, DY. Procedura este definita astfel.
Procedure MoveRel (DX, DY:integer);
DX si DY reprezinta distanta in sensul axei X, respenctiv Y.
SetLineStzle
Proceura SetLineStyle stabileste stilul si grosimea liniei. Procedura este stabilita
astfel:
Procedure SetLineStyle (Stil, Model, grosime:word);
Pentru desenarea unei linii se pot folosi urmatoarele constante predefinite
pentru stabilirea stilului:
Const
Solidln=0; -liniecontinua;
DottedLn=1; -linie intrerupta de forma -----;
CenterLn=2; -Linie intrerupta de forma -.-.-.;
DeshedLn=3; -Linie intrerupta de forma - - - -;
UserbitLn=4; -Stil definit de utilizator.
Daca stilul variaza intre SolidLn si DashedLn, valoarea variabilei model
trebuie sa fie 0. Daca stilul este pozitionat la UserBitLn, stilul liniei este
definit de utilizator, si in acest caz variabila model este un numar hexazecimal
pe 16 biti care descrie modul de prezentare a liniei (1= semn luminos,0=fara
semn ).
Grosimea liniei poate fi stabilita cu urmatoarele constante predefinite.
Const
NormWidth=1; -grosme normala;
ThickWidth=3; -Linie groasa.
GetLineSettings
Procedura GetLineSetiings returneaza stilul si grosimea liniei utilizate si
este definita astfel:
Procedure GetLinSettings (var infol:lineSetiingType);
InfoLin contine informatii referitoare la linie, avand tipul predefinit
LineSettingType;
Type LineSettingsType=record
LineStyle:word: AstilS
Pattern:word: AmodelS
Thickness:word: AgrosimeS
End;
SetWritemode
Procedura SetWritemode stabileste modul de scriere pe ecran a unei linii. Procedura
este definita astfel:
Procedure SetWritemode (modscriere:integer);
Modscriere este o variabla de tip intreg si poate lua urmatoarele valori
predefinite.
Const
CopyPut=0;
XorPut=1;
Valoarea CopyPut inseamna folosirea instructiunii MOV a asamblorului.
Valoarea XOrPUT inseamna folosirea instructiunii XOR intre punctele
liniilor si punctele actuale din ecran. Astfel doua instructiuni consecutive
vor sterge linia, ramanand imaginea anterioara pe ecran.
5.2. Aplicatie
Programul linii arata cum se pot apela si utiliza procedurile de trasare a
liniilor, cum se pot cere date despre un anumit stil de linie, cum se pot defini
stilul utilizator.
Program linii; uses crt, graph; var gd, gm, I :integer; stil:linesettingstype; begin i:=0; gd:-=detect; initgraph(gd, gm,’c:\bp\bgi’); if graphresult <> grOk then Halt (1); randomize; setlinestyle(dottedln, 0, thickwidth); getlinesettings(stil); repeat line (random(gatmaxx), random(getmaxy); random(getmaxx), random(gatmaxy); moveTo(100, 200); lineRel(100, 100); lineTo(200, 200); cleardevice; setLineStyle(userbitln, $45, normwidth ); rectangle(100, 300, 200, 400); i:=i+1; until i=100; repeat line (random (getmaxx), random(getmaxy); random ((getmaxx), random(getmaxy)); moveTo(100, 200); linerel(100,100); lineTo(200, 200); cleardevice; setlinestyle(Stil, LineStyle,Stil.Pattern, Stil.Thickness); rectangle (100, 300, 200, 400); i:=i+1; until i:=1; readkey; closeGraph;
End.