Referat Programare
Mai jos puteti citi fragmente din
Referat Programare si de asemenea puteti face
Download Referat ProgramareCiteste fragmente din Referat Programare
MEMORIU EXPLICATIV
Unit-ul standard Graph implementează un număr de subprograme axate
spre prelucrări grafie. Programele care utilizează subprogramele
destinate prelocrărilor grafice trebuie să conţină directiva Uses
Graph.
Subprogramele Graph pot fi clasificate astfel:
Iniţializarea modului grafic;
Tratarea erorilor grafice;
Definiri de ferestre ÅŸi pagini;
Subprograme orientate spre puncte:
Subprograme orientate spre linii;
Subprograme orientate spre arcuri, cercuri ÅŸi alte curbe;
Subprograme orientate spre poligoane şi haşurări;
Subprograme orientate spre salvarea imaginilor;
Subprograme orientate spre texte;
Defini de culori ÅŸi palete.
În accepţiunea Unit-ului Graph, colţul stănga sus al ecranului
graifc are coordonatele (0, 0). Valorile X sau coloanele cresc spre
dreapta. Valoriile Z sau liniile cresc în jos.
În Unit-ul Graph este folosită noţiunea de pointer actual (curent)
Pointeru actual este similar cursorului din modul text, cu deosebirea
că acest pointer nu este vizibil. Monitorul unui calculator afişează
o imagine formate din puncte independente, numite pixeli. Fiecare pixel
are o culoare şi o luminiozitate propie, independenţa de culoare şi
luminiozitatea celorlalţi.
Imaginea afişată de monitor este formată dintr-un număr oarecare de
linii ÅŸi coloane.
Cu cât numărul delinii şi coloane este mai mare cu atât calitatea
imaginii obţinute este mai ridicată. Spunem că un monitor cu o
rezoluţie de 640 / 480 pixeli este mai bun decât un monitor de 320 /
200.
Monitorul poate afişa litere, cifre şi semne speciale cât şi
portrete, peisaşe, grafice de foncţii, desene, etc. Pentru aceasta nu
are nici oimportamţa dacă imaginea afişată reprezintă o poză sau
un text. Din punctul de vedere al calculatorului situaţia se prezintă
cu totul altfel. Monitorul nu trebuie decât să preia şi să afişeze
o imagine deja construită, pe când calculatorul trebuie să gestioneze
individual fiecar pixel care compune imaginea. Pentru o imagine formată
din 640 / 480 pixeli aceasta înseamnă 307.200 pixeli şi deci un
necesar de memorie considerabilă. Din acest motiv primele calculoatoare
personale permiteau folosirea exclusivă a modului text. Calculatoarele
posedau o compunentă numită placă grafică (sau interfaţă video),
componentă în sarcina căreia cade gestionare memoriei video şi
controlo monitorului. Aceste plăci grafice au avut o evoluţie
notabilă în timp.
Unit-ul Graph pune la dispoziţia utilizatorului o bibliotecă grafică
cu peste 50 de rutine, ce variază de la subprogramele de nivel înalt,
ca SetWiewPort, Circle,
Bar3d, Drawpolz, la suprograme orientate pe operaţii de biţi, cum ar
fi Getlmage si Putlmage. Sunt suportate diferite tipuri de linii ÅŸi
modele de haÅŸurare, precum ÅŸi mai multe tipuri de caractere, ce pot fi
mărite, aliniate şi orientate orizontal sau vertical. Prin intermediul
acestor rutine este posibilă construirea unei aplicaţii sofisticate,
fiind posibilă programarea independentă de interfaţă grafică
folosită de calculatorul pe care se va executa aplicaţia respectivă.
Biblioteca grafică a limbajului Turbo Pascal constă din următoarele
fiÅŸiere:
GRAPH. TPU - conţine codul obiectiv al subprogramelor definite în
unit-ul graph;
*.BGI – aceste fişiere reprezintă drivere specifice pentru mai
multe tipuri de interfeţe grafice, pentru rularea programului este
necesar numai fişierul .BGI corespunzător plăcii grafice utilizate;
*.CHR – aceste fişiere conţin descrierile stilurilor suplimentare
de caractere.
Unit-ul standard Crt implementează pintre alte programe, trei
subprograme destinate generărilor de sunet, clasificate astfel:
Suprograme destinate generatorului de sunet.
Programele care utilizează aceste subrutine trebuiesă conţină
directiva users Crt.
În lucrarea de faţă am prezentat toate subprogramele unit-ului
Graph, care au fost grupate după domeniul de aplicabilitate. Fiecare
capitol este însoţit de aplicaţii practice care ilustrează modul în
care sunt definite ÅŸi apelate subrutinelor unit-urilor Graph ÅŸi Crt.
Capitolul 1
INIÅ¢IALIZAREA MODULUI GRAFIC
1.1 Proceduri şi funcţii
Detecgraph
Procedura DetectGraph testează hardware-ul şi determină driverul şi
modul utilizabil. Procedura este definită astfel:
Procedure DetectGraph (var gd, gm: integer);
Gd- reprezintă codul driver-ului, gm-reprezintă codul modului
utilizabil.
După revenirea din procdura DetectGraph în modobligatoriu trebuie
apelată procedura InitGraph care va încărca efectiv driverul
detectat. În cazul în care nu se detectează un driver grafic,
variabila gd va avea valoarea -2; în acest caz funcţia GraphResult va
returana de asemenea valoarea -2.
InitGraph
Procedura InitGraph iniţializează sistemul grafic, prin încărcarea
driver-ului grafic corespunzător echipamentului, pune sistemulin mod
grafic, după care redă controlul programului aplelat. Procedura este
definită astfel:
Proedure InitGraph (var gd: integer; var gm: integer; cd:string );
Variabilele Gd şi Gm vor conţine valorile returnate de InitGraph,
codul corespunzător driver-ului şimodului grafic. Variabila Cd de tip
strig în momentul apelului conţine calea spre driverul *.Bgi, unde
sunt stocate fişierele corespunzătoare driverelor (de exemplu
‘C:TPBGI’). Dacă variabila Cd un ÅŸir vid â€Â,driverul actual va
fi căutat în unitatea şi directorul actual.
Variabila Gd poate fi iniţializată constanta detect, care este
predefinită în Unit-ul Graph şi în acest caz nu mai este necsară
apelarea procedurii DetectGraph.
GetDriverName
Funcţia GetDriverName returnează numele driver-ului grafic utilizat.
Funcţia este definită astfel:
Functiun GetDriverName: string;
Funcţia poate fi apelată după apelarea InitGraph
GetGraphMode
Funcţia GetGraphMode returnează codul modului grafic actual şi este
definită astfel:
Function GetGraphMode: integer;
Valoare returnată de fucţia GetGraphMode variază între 0-5, în
funcţie de driverul grafic actual.
GetModeName
Funcţia GetModeName returnează numele modului grafic actual şi este
defită astfel:
Function GetModeName (Gm: word): sting;
GetMaxMode
Funcţia GetMaxMode returnează numărul maxim de moduri ce pot fi
folosite de driverul actual. Funcţia este definită astfel:
Function GetMaxMode: integer;
GetMondeRange
Procedura GetModeRange determină valoarea cea mai mică şi valoarea
cea mai mare a codului modului grafic ce se poate utiliza,
corespunzătoare unui driver dat.
Procedura este devinită astfel:
Procedure GetModeRange(gd: integer; var LoMade, HiMode:integer);
Gd este codul corescpunzător driver-ului grafic;
Variabilele de tip întreg LoMade şi HiMode vor conţine valoarea
minimă şi maximă a modului grafic.
Dacă driverul nu este acceptat, valorile returnate sunt –1.
GraphDefaults
Procedura GraphDefaults poziţionează pointerul curent în colţul
stânga sus de coordonate (0, 0) şi variabilele sistemului grafic la
valorile implicite. Procedura este definită astfel:
Procedure GraphDefaults;
GetMaxX ÅŸi GetMaxY
Funcţia GetMaxX numărul de ordine al coloanei din drepta (rezoluţia
X) a driver-ului şi a modului actual. Funcţia este definită astfel.
Function GetMaxX:integer;
De exemplu în cazul utilizării unui driver VGA în modul VGALo (de
rezoluţie 640 / 480) funcţia GetMaxX returnează valoarea 639.
Funcţia GetMaxZ numărul de ordine al liniei situată la bază
(rezoluţia X) a driver-ului si al modului actual. Funcţia este
definită astfel:
Function GetMaxZ:integer;
De exemplu, în cazul utlizării unui driver VGA în modul VGAHi (de
rezoluţie 800 / 600 ) funcţia GetMaxZ returnează valoarea 599.
GetX ÅŸi GetY
GetX returnează abscisa X a cursorului actual, funcţia fiind
definită astfel:
Function GetX:integer;
GetZ returnează ordonata Y a cursorului actual, funcţia fiind
definită astfel:
Function GetY:integer;
Dacă pe ecran sa definit o fereastră, valorile returnate de aceste
funcţii definesc coordonata relativă la fereastră.
SetGraphBufSize
Procedura SetGraphBufSize permite utilizatorului să schimbe
dimensiunea tamponului grafic utilizat pentru realizarea haşurării cu
modelul actual a unei zone închise; Tamponul iniţial estde de
dimensiunea 4K0, care permite haşurarea unui poligon pănâ la 655 de
vârfuri. Prin modificarea dimensiunii tamponului este posibilă
efectuarea haşurării poligoanelor cu maimulte vârfuri. Procedura este
definită astfel:
Procedure SetGraphBufSize (dimbuf:word);
Dimbuf reprezintă dimensiunea tamponului în octeţi.
CloseGraph
Procedura CloseGraph termină lucrul cu modul grafic şi va apare
ecranul dinaintea iniţializării acestui mod. Procedura este definită
astfel:
Procedure CloseGraph;
RestureCrtMode
Ecranul fiind în mod grafic, există posibilitatea restabilirii
modului caracter existând înaintea iniţializării modului grafic.
Această restabilire se realizează prin procedura RestoreCrtMode care
este definită astfel:
Procedure CrtMode;
SetGraphMode
Revenirea din modul caracter în modul grafic este realizată de
procedura SetGraphMode, care este definită astfel:
Procedure SetGraphMode (mg:integer);
Mg defineşte modul grafic al plăciia ctuale. Această procedură
realizează şi stergerea ecranului.
InstallUserDriver
Instalarea unui driver propriu se realizează cu funcţia
InstallUserDriver, care este definită astfel:
Function InstallUserDriver (name:strig; Autodetect:pointer ):word;
InstallUserFont
Instalarea unui set de caractere propriu se realizează cu funcţia
InstallUserFont care este definită astfel:
Function InstallUserFont (FontFileName:string): integer;
FontFileName este numele fişierului fizic care conţine setul de
caracter.
Funcţia returnează codul (de tip întreg) corespunzător setului
instalat.
RegisterBGIdriver
Funcţia RegisterBGIdriver ( pe baza unei valori ce reprezintă un
driver ) returnează un cod (de tip intreg), ce reprezintă numărul
driver-ului. Funsţia este definită astfel:
Function RegisterBGIdriver (driver: pointer): integer;
Driver conţine adresa driver-ului.
RegisterBGIFont
Funcţia RegisterBGIFont returnează un cod care reprezintă numărul
setului de caractere fiind definită astfel:
Function RegisterBGIFont (font: pointer): integer;
Font conţine adresa setului de caractere.
1.2 Aplicaţie
Pentru a se lucra în modul grafic este nevoie de iniţializarea
sistemului în mod grafic.
Programul initmodg relizează iniţializarea sistemului grafic, prin
detectarea driver-ului.
Funcţia Conv de tip string converteşte un număr întreg într-un şir
de caractere şi este folosită pentru afişarea în mod grafic al
numerelor.
Program initmodg;
User crtgraph;
Var gd, gm : integer;
Lomode, himode: integer;
Function conv(l: longint):string;
Var s: string;
Begin
str(l, s);
conv:= s;
end;
Begin
{detectarea driver-ului grafic}
detectgraph (gd, gm);
{punerea sistemului în mod grafic driver-ului găsit}
initgraph(gd, dm, ‘c:pgi’);
outtextxy (10, 10, ‘ numele driver:’+getdrivername’);
outtextxy (10, 30,’ mod grafic: ‘+conv(getgraphmode));
outtextxy (10, 50,’nume mod: ‘+getmodename(gm) );
outtextxy (10, 70, ‘nr. Moduri: ‘+conv(getmaxmode));
getmoderange(gd, lomode, himode);
outtextxy(10, 90, ‘val, min.: ‘+conv(lomode)+’val. Max.: ’+cov(
himode) );
outtextxy (10, 110, ‘X,Y maxi: ‘+conv(getmaxx)+’,’+conv
(getmaxy));
ăsaţi o tastă pentru restabilirea modului carracter.’);
readkey;
{Restabilirea modului caracter}
restorecrtmode;
writeln (‘Acum suntem în mod caracter’);
writeln(Apăsaţi orice tastă);
readkey;
{Revenirea ]n modul grafic}
setgraphmode (gm);
outtextxy(100, 235,’ Acum suntem în mod grafic.’);
readkey;
closegraph;
End.
CAPITOLUL 2
TRATAREA ERORILOR GRAFICE
2.1 Proceduri şi funcţii
GaphResult
Erorile interne ale unit-ului Graph sunt returnate de funcţia
GraphResult.
Această funcţie retunează un cod de eroare care raportează starea
ultimei operaţii grafice executate. Codul returnat este 0 în cazul
unei operaţii grafice reuşite şi o valoare negativeă când ultima
operaţie s-a terminat cu eşec. Funcţia este definită astrfel:
Function GraphResult: integer;
Codurile predefineti returnate de funcţie sunt următoarel:
GrOK=0; -operaţie reuşită
GrNolnitGraph=-1; -grafică BGI neinstalată cu InitGraph
GrNOtDetected=-2; -grafică hardware nedetectat
GrNotFound=-3; -fişier driver BGI negăsită
GrInvalidDriver=-4; -fiÅŸier driver invalid
GrNoLoadMen=-5; -emorie insuficientă pentru încărcarea driverului
GrNoScanMen=-6; -memorie insuficientă pentru manevre
GrNoFloodMen=-7; -memorie insuficientă pentru haşurare
GrFontNoFound=-8; -fişier cu careactere speciale negăsite
GrNoFontMen=-9; -memorie insuficientă pentru încărcarea caracter
GrInvalidMode=-10; -mod grafic invalidpentru driverul selectat
GrError=-11; -eroare genetică de grafică
GrIOError=-12; -eroare de intrare / ieşire grafică
GrInvalidFont=-13; -fiÅŸier de caractere invalid
GrInvalidFontNum=-14; -Număr invalid de set de caractere
Valoarea returnată de funcţia de GraphResult trebuie salvată
într-o variabilă temporară în vederea testării ulterioare
întru-cât apel valoarea va fi reiniţializată la 0.
GraphErrorMsg
Funţia GraphErrorMsg returnează textul mesajului de eroare
corespunzător codului de eroare obţinut de GraphRezult. Funcţia este
definită:
Function GraphErrorMsg (cod: integer): string;
Cod este codul de eroare.
2.2. Aplicaţie
Program erorigr;
uses Graphcrt;
var CodEror, gd, gm:integer;
begin
gd:=detect;
initGraph (Dd, Gm, ‘ ‘);
codEror:=GraphResult; {Citirea rezultatului}
if CodEror<>grOk the
begin
writeln (‘Eroare:’, GraphErorMsg(CodEroare) );
writeln(‘Se părăseşte programul’);
hait (1);
end;
closeGraph;
End.
CAPITOLUL 3
DEFINIRI DE FERESTRE ÅžI PAGINI
Anumite echipamente permit utilizarea facilităţii de paginare, foarte
utile la aplicaţii de gen animeţii, existând posibilitatea de a
modufica paginile vizibile precum ÅŸi cele active.
3.1. Proceduri şi funcţii
SetVizualPage
Procedura SetVizualPage fixează pagina vizuală. Procedura este
definită astefel:
Procedure SetVizualPage (nrpag: word);
Nrpag defineşte numărul paginii vizuale.
SetActivePage
Procedura SetActivePage fixează pagina activată pentru echipamentul
grafic de ieşire. Procedura este defintă astfel:
Procedure SetActivePage (Nrpag: word );
NrPag defineşte numărul paginii active.
SetViewPort
Prin fereastră se înţelege o zonă dreptunghiulară a ecranului, care
în particular poate să conincidă cu întregul ecran. Procedura
ViewPort are ca efect ca toate comenzile de desenare / scriere să
opereze în regiunea rectangulară definită. Toate înscrierile pe
ecran se referă la ferestra actuală, până la o nouă schimbare a
ferestrei. Ptrocedura este definită astfel:
Procedure SetViewPort (x1, x2, y1, y2: integer; Clip: boolean);
X1, Y1 sunt coordonatele absolute stânga sus ale ferestrei active;
X2, Y2 sunt coordonatele absolute dreapta jos ale ferestrei.
Variabila boolenă clip defineşte dacă liniile din afara ferestri sunt
sau nu vizibile.
Constantele predefinite pentru stabilirea valorii variabilei Clip sunt
utmătoarele:
Const
ClipOn:=True; -tăierea este activă; exterior invizibilă;
ClipOff:=false; -tăierea este pasivă; exterior vizibil;
GetViewSetting
Procedura GetViewSetting permite ca utilizatorul să obţină
informaţii referitoare la fereastra actuală şi felul tăierii.
Procedura este definită astfel.
Procedure SetViewSetting (var infofer: viewporttype);
Variabila infofer este de tip predefinit ViewPortType va conţine
informaţiile referitoare la fereastră. Tipul ViewPortType este definit
astfel:
Type WiewPortType:= record;
X1, Y1, X2, Y2: Integer;
Clip:boolean;
End;
ClearDevice
Procedura ClearDevice şterge ecranul grafic actual şi poziţionează
pointe-ul actual în poziţia (0, 0), culoarea este determintă de
procedura SetBkColor. Procedura este definită astfel:
Procedure ClearDevice;
ClearViewPort
Procedura ClearViewPort şterge fereastra grafică actuală. Culoarea
fere estrei va fi culoarea de fond, este apelată procedura Bar pentru
trasarea unu dreptunghi corespunzător ferestrei şi pointer-ul actual
este mutat în colţul stânga sus al ferestrei; de coordonate relative
(0, 0). Procedura este definită astfel:
Procedure ClearViewPort;
3.2. Aplicaţia
Programul ferpag demosntrează lucrul cu pagini şi ferestre grafice.
Program ferpag;
uses Graphcrt;
var gd, gm, i: integer;
begin
gd:detect;
initgraph(gd, gm, ‘c:pgi’);
if graphresult <> grOk then
halt (1);
if gd = vga thne
begin
i:-0l
repeat
setactivepage (0);
setcolor(i);
rectangle (20, 40, 100, 200);
setvisualpage(0)l
i:=i+1;
if i=16 then i:=0 ;
until Keypressend;
end
else
outText(‚paginarea nu este suportata.’);
cleardevice;
setbkcolor(3);
rectangle(20, 20, 300-20, 200-20);
setViewPort(21, 21, 300-21, 200-20, clipOn);
repeat
OutTextXY(0, 0, ‚<1> sterge fereastra actuala:’);
OutTextXY(10, 10, ‚<2> pentru iesire,:’);
readkey;
if readkey=’1’ then ClearViewPort;
until ReadKey=’2’;
closeGraph;
End.
CAPITOLUL 4
SUPROGRAME ORIENTATE SPRE PUNCTE
4.1. Proceduri şi funcţii
PutPixel
Procedura PutPixel produce un punct de culoarea dată. Procedura este
definită astfel:
Procedure putpixel (x, y: integer; cul: word);
X ÅŸi y definesc coordonatele punctului.
Cul defineşte culoarea punctului, având valori între 0 şi valoarea
returnată de funcţia GetMaxcolor ( numărul maxim de culori
utilizate). Pentru definirea culorii pot fi folosite constante de
culoare predefinite.
GetPixel
Funcţia GetPixel determină culoarea unuipunct de coordonate date.
Funcţia este defintă astfel:
Function GetPixel (x, z: integer): word;
X şi y sunt coordonatele punctului, iar valoarea returnată de
funcţie reprezintă codul culorii având valorile între 0 şi
valoaraea returnată de funcţia GetMaxColor.
4.2. Aplicaţie
Programul Pixel determină culoarea unui punct dat de coordonate (x, y)
şiafişarea acestuia în cazul în care culoarea punctuluieste 0 atunci
se va afiÅŸa un punct de culoare GetMaxcolor.
Program pixel;
users Crt,graph;
var gd, gm:integer;
culoarepunct:woard;
begin
Gd:=detect;
initgraph (gd, gm, ‘c:pgi’);
if graphresult <> grOk then
halt(1);
culoareapunct:=getpixel (10, 10);
if culoarepuncr:=0 thne
putpixel (10, 10, getmaxcolor);
readln;
cleardevice;
repet
putpixel (random (640), random (480), random (16));
until keypressed;
closegraph;
End.
CAPITOLUL 5
SUBPROGRAME ORIETNTATE SPRE LINII
roceduri şi funcţii
Line
Procedura Line desenează puncte de coordonate (x1, y2) şi (x2, y2).
Culoarea liniei poate fi stabilită cu procedura SetColor, stilul şi
grosimea ei pot fi stabilite cu procedura SetLineStyle. Procedura este
definită astfel:
Procedure Line (x1, y1, x2, y2:integer);
X1, Y1 sunt coordonatele de început ale liniei.
X2, Y2 sunt coordonate de sfârşit ale liiei.
LineTo
Procedura LineTo desenează o linie de la poziţia pointer-ului actual
la un punct dat de coordonate (x, y).
Culoarea liniei se stabiliÅŸte cu procedura SetColor, stilul, modul ÅŸi
grusimea se stabilesc cu procedura SetLinesStyle. Procedura este
stabilită astfel:
Procedure LineTo (x, y: integer);
X şi Y sunt coordonate de sfârşit ale liniei.
LineRel
Procedura LineRel desenează olinie de la poziţia pointer-ului actual
până la un punctdat definit de destinaţie DX şi DY.
Culoarealiniei se stabileÅŸte cu procedura SetColor, stilul ÅŸi grosimea
se stabilesc cu procedura SetLineStyle. Procedura este definită astfel:
Procedure LineRel (DX, DY: integer);
DX şi DY reprezintă distanţa în sensul axei x, respectiv y.
MoveTo
Procedura MoveTo mută pointer-ul actual de coordonate x, y. Procedura
este definită astfel:
Procedure MoveTo (x, y:integer);
MoveRel
Procedura MoveRel mută pointer-ul actual din poziţia curentă la un
punct definit de distanţele DX, DY. Procedura este definită astfel.
Procedure MoveRel (DX, DY:integer);
DX şi DY reprezintă distanţa în sensul axei X, respenctiv Y.
SetLineStzle
Proceura SetLineStyle stabileÅŸte stilul ÅŸi grosimea liniei. Procedura
este stabilită astfel:
Procedure SetLineStyle (Stil, Model, grosime:word);
Pentru desenarea unei linii se pot folosi următoarele constante
predefinite pentru stabilirea stilului:
Const
Solidln=0; -liniecontinuă;
DottedLn=1; -linie întreruptă de forma -----;
CenterLn=2; -Linie întreruptă de forma -.-.-.;
DeshedLn=3; -Linie întreruptă de forma - - - -;
UserbitLn=4; -Stil definit de utilizator.
Dacă stilul variază între SolidLn şi DashedLn, valoarea variabilei
model
trebuie să fie 0. Dacă stilul este poziţionat la UserBitLn, stilul
liniei este definit de utilizator, şi în acest caz variabila model
este un număr hexazecimal pe 16 biţi care descrie modul de prezentare
a liniei (1= semn luminos,0=fără semn ).
Grosimea liniei poate fi stabilită cu următoarele constante
predefinite.
Const
NormWidth=1; -grosme normală;
ThickWidth=3; -Linie groasă.
GetLineSettings
Procedura GetLineSetiings returnează stilul şi grosimea liniei
utilizate şi este definită astfel:
Procedure GetLinSettings (var infol:lineSetiingType);
InfoLin conţine informaţii referitoare la linie, având tipul
predefinit LineSettingType;
Type LineSettingsType=record
LineStyle:word: {stil}
Pattern:word: {model}
Thickness:word: {grosime}
End;
SetWritemode
Procedura SetWritemode stabileÅŸte modul de scriere pe ecran a unei
linii. Procedura este definită astfel:
Procedure SetWritemode (modscriere:integer);
Modscriere este o variablă de tip întreg şi poate lua următoarele
valori predefinite.
Const
CopyPut=0;
XorPut=1;
Valoarea CopyPut înseamnă folosirea instrucţiunii MOV a
asamblorului. Valoarea XOrPUT înseamnă folosirea instrucţiunii XOR
între punctele liniilor şi punctele actuale din ecran. Astfel două
instrucţiuni consecutive vor şterge linia, rămânând imaginea
anterioară pe ecran.
5.2. Aplicaţie
Programul linii arată cum se pot apela şi 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:pgi’);
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.
CAPITOLUL 6
ÅžI ALTE CURBE
6.1. Proceduri şi funcţii
Circle
Procedura Circle desenează un cerc de centru şi rază dată; culoarea
de desenare este stabilită de procedura SetClolor. Procedura este
stabilită astfel.
Procedure Circle (x, y:integer ; raza:word);
X ÅŸi Y definesc coordonatele cercului
Raza defineÅŸte lungimea razei
Arc
Procedura Arc desenează un arc de cerc şi este definită astfel:
Procedure Arc (x, y:integer;Ustrat, Ufinal:word);
Coordonatele cercului sunt definite de x ÅŸi y, raza arcului de cerc
este definită de r, iar Ustrat şi Ufinal reprezintă unghiul de
început şi de sfârşit al arcului, valorile lor sunt date în grade,
în sensul trigonometric. Deci, dacă Ustrat este 0, iar Ufinal este
360, atunci este de desenat un cerc complet.
Elipse
:
Z
$
h
Ü
h
h
h
ᘌ둨尣ãâ€â‚¬Ã¨â€žË†Ã ¡œåªÂse desenează un arc de elipsă ÅŸi este definită
astfel:
Procedure elipse (x,y:integer;Ustrat, ufinal:word;Xraza,Yraza:word);
X şi Y reprezintă coordonatele cetrului.
Ustrat şi Ufinal reprezintă unghiul de sfârşit al arcului de
elipsă, în grade, în sens trigonometric. Valorile Xraza şi Yraza
definesc raza orizontală respectiv axa verticală a elipsei.
GeatArcCoords
Procedura GteArcCords returnează centrul şi coordonatele de început
şi de sfrărşit ale ultimului arc desenat. Procedura este definită
astfel:
Procedure GetArcCoords (var coordonare:ArcCoordsType);
Coordarc detip predefinit ArcCoordsTzpe va conţine coordonatele
centrului crcului sau elipsei şi cordonatele punctului de început şi
de sfărşit al arcului . Tipulpredefinit ArcCordsTzpe este:
Type ArcCoordsType=record
x,y: integer; {centru}
Xstart, Ystart:integer {inceputul arcului}
Xend,Yend:ineteger {sfarsitu arcului}
End;
PieSlice
Procedure PieSlince deseneză şi haşurează un sector de cerc şi
este definită astfel:
Procedure PieSlice (x, y:integer; Ustart, Ufinal, r:word);
X şi y Ufinal reprezintă unghiul de început şi de sfârşit al
sectorului, iar r este raza.
Culoarea cercului este culoarea actuală, iar modelul de haşurare şi
culoare de haşurare este definită este definită de procedurile
SetFillStyle sau SetFillPattern.
Sector
Procedura Sector desenează şi haşurează un sector de elipsă şi
este definită astfel:
Procedure Sector (x,y:integer; Ustar, Ufinal, Xraza, Yraza:word);
X şi y reprezintă coordonatele centrului;
Ustart, Ufinal reprezintă unghiul de început şi de sfârşitul al
sectorului de elipsă în grade, în sens trigonometric. Variabilele
Xraza şi Yraza definesc axa orizontală respectiv axa verticală a
elipsei. Culoarea este culoarea actuală, iar modelul de haşurare este
definit de procedurile SetFillStyle ÅŸi SetFillPattern.
FillEllipse
Procedura FillEllipse desenează şi haşurează o elipsă şi este
definită astfel:
Procedure FillEllipse (x, y:integer;Xraza;Yraza:word);
x,y reprezintă coordonatele centrului;
Xraza şi Yraza reprezintă axa orizontală respectiv verticală a
elipsei.
Culoarea elipsei este culoarea actuală, iar modelul şi culoarea de
haşurare este definită de procedurile SetFillStyl sau SetFillPattern.
GetAspectRatio
Procedura GetAspectRatio determină dimensiunile maximale ale
ecranului grafic. Procedura se determină astfel:
Procedure GetAspectRatio (var xasp; vasp:word);
Xasp, yasp reprezintă valoarea maximă a abscisei şi a ordonatei,
adică rezoluţia efectivă a ecranului grafic. Din aceste valori se
poate calcula raportul dimensional xasp; yasp. Acest raport este
utilizabil la „rotunjiri†necesare la trasarea cercurilor,
sectoarelor ÅŸi arcelor de cerc.
SetAspectRetio
Procedura SetAspectRatio defineÅŸte raportul dimensional implicit.
Procedura se defineÅŸte astfel:
Procedure SetAspectRatio (xasp, yasp:word);
xasp, yasp reprezintă valorile amxime pentru abscisă şi ordonată. Cu
aceste valori definite, un cerc torsionat poate fi rectificat pe baza
raportului dimensional definti.
6.2. Aplicaţie
Programul curbe realizează trasarea de cercuri, arcuri, elipse,
sectoare de cerc, sectoare de elipse.
Program curbe;
Uses crt, graph;
Var Raza, gd, dm:integer;
ch: char;
Xasp, yasp:word;
Begin
gd:=detect;
initgraph (gd, gm,’c:pgi’);
if graphresult<>grOk then
halt (1);
repeat
outTextXY(11. 0. ’apasati’);
outTextXY(10. 10. ’1-cerc 2-arc 3-elipsa 4-sector de cerc 5-sector
elipsa 6-hasurarea elipsei);
OuttextXY(10. 470. ‘0-iesire’);
ch:=readkey;
case ch of
‘1’ :begin
for raza:=1 to 5 do
circle (100.100. raza*10);
end;
‘2’ begin
for raza:=1 to 5 do
arc(200.200.0.90. raza* 10);
end;
‘3’ begin
elipse(300.100.0.360.30.50);
end;
‘4’:begin
pieslice(400.100.0.270.40);
end;
‘5’:begin
sector(getmaxx div 2. getmay div 2.0.45.50.50);
getaspectratio(xasp, yasp); {sector circular}
sector(getmaxx div 2. getmaxy div 2 180.135.50.50*longint(xasp) div
yasp); {punc centrat}
end;
‘6’:begin
fillellipse(100.350.50.50);
getaspectration(xasp,yasp); {elipsa circulara}
fillellipse(50.50.30.30);
end;
end;
until ch=’0’;
closegraph;
end.
Capitolul 7
SUBPROGRAME ORIENTATE SPRE POLIGOANE ŞI HAŞURĂRI
7.1 Proceduri şi funcţii
Rectangle
Procedura rectangle desenează un dreptunghi şi este definită
astfelÅž
Procedure rectangle (x1, y1, x2, y2:integer);
X1 şi Y1 reprezintă coordonatele colţului stânga sus ale
dreptunghiului.
X2 şi Y2 reprezintă coordonatele colţului dreapta jos ale
dreptunghiului.
Desenarea se face cu stilul şi culoarea actuală.
Bar
Procedura Bar desenează un dreptunghi şi îl haşurează cumodelul
ÅŸi culoarea satabilite cu procedura SetFillPattern sau SetFillStzle.
Procedura este definită astfel:
Procedure Bar(x1,y1,x2,y1:integer);
X1 şi Y1 reprezintă coordonatele colţului stânga sus ale
dreptunghiului.
X2 şi Y2 reprezintă coordonatele colţului dreapta jos ale
dreptunghiului.
Bar3d
Procedura Bar3d desenează un paraşeşipiped dreptunghic şi îl
haşurează cu modelul şi culoarea actuală. Procedura este definită
astfel:
Procedura Bar3d (x1,y1,x2,y2:integer; ad:word; top:boolean);
X1 şi Y1 reprezintă coordonatele colţului stânga sus al corpului .
X2 şi Y2 reprezintă coordonatele colţului dreapta jos al corpului.
DrawPolv
Procedura DrawPolv desenează olinie poligonală şi este definită
astfel:
Procedure DrawPolv (nrpct:word; var puncte );
Nrpct reprezintă numărul vârfurilor, iar variabila puncte este
untabel ale carui elemente sunt de tip predefinit PoinzType care
reprezintă coordonatele (x,y) ale vârfurilor. Tipul PointType este
definit astfel:
Type PoinType= record
x,y:integer;
End;
În cazul în care se doreşte obţinerea unui poligon închis de n
vârfuri, variabila puncte trebuie să fie un tablou de n+1 elemente
astfel încât coordonatele primului punct şi coordonatele ultimului
punct să coincidă.
FillPolv
Procedura FillPolv desenează şi haşurează un poligon şi este
defintă astfel:
Procedure FillPolv(nrpct:word; var puncte);
Nrpct reprezintă numărul vârfurilor, iar variabila puncte este un
tabel ale cărui elemente sunt de tip predefinit Pointtypeb, care
reprezintăcooronatele (x,y) ale vârfurilor. Conturulpoligonului este
formt din linii ale căror stil este determinat de procedura
SetFillPattern sau SetFillStyl.
FloodFill
Procedura FloodFill haşurează cu modelul actual o zonă închisă şi
este definită astfel:
Procedure FloodFill(x,y:integer;c:word);
x,y reprezintă coordonatele unui punct interior zonei închise, iar c
reprezintă culoarea de haşurare, având valori de la 0 până la
valoarea returnată de funcţia GetmaxColor.
SetFillStyle
Procedura SetFillStyle fixează modelul de haşurare utilizat şi
culoarea de haşurare. Procedura este definită astfel:
Procedure SetFillStyle(m:word;c:word);
m defineÅŸte modul de haÅŸurare, iar c defineÅŸte culoarea de
haÅŸurare.
Pentru definirea modului de haşurare se pot utiliza următoarele
constante predefinite:
Const
EmptyFill=0;
SolidFill=1;
Linefill=2;
LtSlashFill=3;
SlashSill=4;
BkSlashFill=5;
LtBkSlashFill=6;
HatchFill=7;
XhatchFill=8;
InterLeaveFill=9;
WideDotFill=10;
CloseDotFill=11;
UserFill=12;
Haşurarea poate fi realizată pentru poligon, dreptunghi,
paralelipiped, sector de cerc, elipsa.
GetFillSettings
Procedura GetFillSettings permite utilizatorului să obţină
informaţii despre modelul actual de haşurare şi de culoare,
informaţii care au fost fixate anterior cu procedura SerFillStyle sau
SetFillPattern.
Procedura este definită astfel:
Procedure GetFillSetting (var infohas:FillSettingsTyipe);
Infohas este de tip predefinit FillSettingstype şi va conţine
informaţii referitoare la haşurare. Tipul FillSettingsType este defint
astfel:
Type FillSettingstype=record
Pattern:word;
Color:word;
End;
SetFillPatten
Procedura SetFillPattern oferă utilizatorului posibilitatea de a
defini un model propriu de haşurare. Procedura este definită astfel:
Procedure SetFillPattern (m:FillPatternType; c:word);
M este de tip predefinit FillPatternType ÅŸi descrie modelul de
haşurare folosind un tabel de optocteţi, adică un tabel bidimensional
de 8X8 biţi.
C defineÅŸte culoarea de haÅŸurare.Tipul SetFillPatern este definit
astfel:
Type FillPatternType=array[1..8] of byte;
GetFillPattern
Procedura GetFillPattern permite obţinerea informaţiilor despre
ultimul model de haşurare stabilit printr-un apel de procedură
SetFillpattern. Procedura este definită astfel:
Procedure getfillPatter (var m:FillPatternType);
M este de tip predefinit FillPatterntype şi va conţine modelul
utilizatorului.
7.2 Aplicaţie
program poligon;
uses crt,graph;
const
triunghi: array [1..4] of pointtype=((X:50;Y:100), (X:100; Y:100),
(X:150;Y:150), (X:50;Y:100));
var
Gd,gm,I,width:integer;
Ch:char;
Fillinfo: FillSettingsType;
Begin
Gd:=detect;
Initgraph(gb,gm,’c:pgi’);
If graphresult<>grOk then halt(1);
Repeat
OutTextXY(10.0.’apasati’);
OutTextXY (10.10.’1-Bar 2-Bar3D 3-Triunghi 4-HasurareTriunghi
5-reptunghi 6-HasurareDreptunghi’);
OutText 10.470.’0-iesire’);
Ch:=readkey;
Case ch of
‘1’:begin
for I:=1 to 5 do
bar(I*10,I*10,succ(I)*10,200);
end;
‘2’ begin
bar3d(500,300,650,360,10,TopOn);
bar3d(500,360,600,380,10,TopOff);
end;
‘3’:begin
drawpoly(SizeOff(triunghi)div SizeOff(PointType), triunghi);
end;
‘4’:begin
Fillpoly(Sizeoff(triunghi) div sizeoff(pointtype), triunghi);
End;
‘5’:begin
rectangle(100.100.200.200);
end;
‘6’:begin
GetFillSettings(fillInfo);
Bar(0,0,50,50);
Setfillstyle(xhatchfill, GetMaxColor);
Bar(50, 0, 100, 50);
With FillInfo do
SetFillStyle (Pattern, Color);
Bar(100.0.150.50);
End;
End;
Until ch=’0’;
Readln;
CloseGraph;
End.
Capitolul 8
SUBPROGRAME ORIETNTATE SPRE SALVAREA IMAGINILOR
8.1 Proceduri şi funcţii
ImageSize
Functia ImageSize returnează numărul de octeţi necesari salvării
unei imagini. Funcţia se defineşte astfel:
Function ImageSize(x1,y1,x2,y1:integer):word;
X1,Y1 reprezintă coordonatele colţului stânga sus ale dreptunghiului;
X2,Y2 reprezintă coordonatele colţului dreapta jos ale dreptunghiului.
GetImage
Procedura GetImage salvează o imagine într-o zonă de memorie
definită de utilizator. Procedura se defineşte astfel:
Procedure GetImage (x1,y1,x2,y2:integer;varBitMap);
X1,y1 reprezintă coordonatelor colţului stânga sus ale dreptului,
iar x2,y2 reprezintă coordonatele colţului dreapta jos ale
dreptunghilui ce se salvează. Se pot salva zone mai mici de 64K
octeţi. Variabila BitMap referăzona în care se face salvarea
imaginii. Primele două cuvinte ale zonei conţin lăţimea şi lungimea
zonei dreptunghiuluilare, de aceea dimensiunea obţinută cu funcţia
GetImage.
PutImage
Procedura PutImage suprapune regiunea salvată peste ecran. Procedura
se defineÅŸte astfel:
Procedure PutImage(x,y:integer;var:BitMap;BitBlt:word);
X,y reprezintă colţul stânga sus al regiunii dreptunghiular de pe
ecran unde va fi restabilită imaginea.
Variabila Bitmap conţine lăţimea, lungimea regiunii şi harta în
biţi a imaginii.
Variabila Bitblt descrie operaţia binară între punctele regiunii ce
se suprapune pe ecran ÅŸi punctele ecranului.
Această variabilă se defineşte astfel:
Const
NormalPut=0; MOV –mutare simplă
CopyPut= 1; MOV – mutare simplă
XORPut=2; XOR –sau exclusiv
OrPut=3; OR - disjuncţie
AndPut=4; AND - conjuncţie
NotPut=5; Not- negaţie
8.2 Aplicaţie
Programul image realizează culorarea ecranului cu albastru, decupează
o porţiune din aceasta şi o salvează în memorie după ce sa rezervat
spaţiu de memorie necesar salvării, după care este restabilită acea
porţiune (imagine).
Uses Graph, Crt;
Var gd, gm:integer;
P:pointer;
Size:word;
Begin
Gd:=detect;
InitGraph (Gd, Gm, ’c:pgi’);
If graphresult <> grOK then
Halt(1);
SetFillStyle (1.1);
Bar(0.0.GetMaxX.GetMaxY);
Size :=ImageSize (1.20.30.40);
GetMen(p,Size);
GetImage(10.20.30.40.p^);
Readln;
ClearDevice;
PutImage(100.100.p^,xorput);
Readln;
CloseGraph;
end.
Capitolul 9
SUBROGRAME ORIENTATE SPRE TEXTE
9.1 Proceduri şi funcţii
Set text Style
Procedura SetTextStyle defineÅŸte foma caracterelor textului ce se vor
utiliza la scrierea textelor, direcţia de scriere precum si dimensiunea
caracterelor.
Procedura este definită astfel:
Procedure SetTextStyle(font:word;dir:word;dimcar:word);
Font defineÅŸte numarul seturilor de caractere, dir stabileÅŸte
direcţia de scriere, iar dimcar dimensiunea caracterelor.
Variabila font poate să ia următoarele valori:
Const
DefaultFont=0 ;
TriplexFont=1;
SmallFont=2;
SansserifFont=3;
GothicFont=4;
Caracterele implicite sunt desemnate de constanta Default-Font.
Celelate tipuri de caractere sunt depuse in fiÅŸiere de tip *.CHR.
În cazul în care aceste fişiere nu se găsesc vor fi utilizate
caracterele implicite chiar dacă variabila font arată o alta valoare.
Variabila dir de tip word stabileşte direcţia scrieri şi poate să
ia urmatoarele valori:
Const
HorizDir=0;
VertDir=1;
HorizDir stabileÅŸte scrierea de stanga la dreapta;
VertDir stabileÅŸte scrierea de jos in sus.
Valoare implicită este HorizDir.
Variabila DimCar de tip word fixează dimensiunea caracterelor: valoarea
n=1 inseamnă marimea normală (implicita) a caracterelor,valoarea n>1
inseamnă mărirea de n ori a dimensiunii implicite.
Această variabilă poate să ia şi valoarea predefinită
UserCharSize, caz in care dimensiunea implicită poate fi modoficată de
procedura SetUserCharSize.
SetUserCharSize
Procedura SetUserCharSize este definită astfel:
ProcedureSetUserCharSize(multx,divx,multy,divy:word);
Lăţimea normală este inmulţită cu valoarea raportului
Multx:Divy,iar înălţimea noramală este îmulţită cu valoarea
raportului MultyDivy. Prin fixarea acestore parametri utilizatorul poate
sa definească inălţimea şi laţimea proprie a caracterelor speciale.
SetTextJustify
Procedura SetTextJustify fixează valorile de aliniere ale textului.
Aceste valori sunt utilizate de procedurile de editare propriuzise.
Procedura este definită astfel:
Procedure SetTextJustify(oriz,vert:word);
Oriz stabileşte alinierea orizontală;
Vert alinierea verticală.
Penbtru stabilirea alinieri pot fi utilizate urmaătoarele constante
predefinite:
Const
{alinierea orizontală}
LeftText=0; {stânga}
CenterText=1; {centru}
RighText=2; {dreapta}
{alinierea verticală}
BottmText=0; {jos}
CenterText=1; {centru}
TopText=2; {sus}
GetTextSettings
Procedura GetTextSetting retunează numărul setului de caractere,
direcţia de scriere dimensiunea caracterelor valoarea alinieri
verticale ÅŸi orizontale utilizate actual.
Procedura este definită astfel:
Proceduere GetTextSettings(var infotext:TextSetingsType);
Infotext este de tip predefinit TextSetingsType şi va conţine
informaţii referitoare la text.
Tipul este definit astfel:
Type TextSettingsType=record
Font:word; {număr set de caractere}
Direction:word; {direcţia scrieri}
Charsize:word; {dimensiunea}
Horiz:word; {alinierea orizontală}
Vert:word; {alinierea verticală}
end;
TextHeight
Funcţia TextHeight returneaza înălţomea unui lanţ de caractere în
puncte imagine (pixeli).
Funcţia este definită astfel:
Function TextHeight (lc:string):word;
Lc reprezintă lanţul de caractere.
TextWidth
Funcţia TextWidth returnează laţimea unui lanţ de caractere in
pixeli.
Funcţia este definită astfel:
Funcţion Textwidht (lc:string):word;
Lc reprezintă lanţul de caractere.
OutText
Procedura OutText trimite un ÅŸir de caractere la dispozitivul standard
de ieÅŸire cordonatele punctului de inceput al textului fiind
determinată de poziţia pointerului actual.
Textul scris va apare conform informaţiilor stabilite de procedurile
SetTextStyle,SetUserCharSize ÅŸi SetTextJustify.
Procedura este definită astfel:
Procedure OutText (lc:string);
Lc conţine textul ce se va scrie.
OutTextxy
Procedura OutTextxy trimite un ÅŸir de caractere la dispozitivul
standard de ieşire, coordonatele punctului de început al textului sunt
determinate de coordonatele (x,y) ale ecreanului (şi nu de poziţia
pointer-ului actual).
Textul scris va apare conform informaţiilor stabilite de procedurile
SetTextStyle, SetUserCharSize ÅŸi SetTextJustify.
Procedura este definită astfel:
Procedure OutTextxy (x,y:integer;lc:string);
Lc conţine textul ce se va scrie .
9.2Aplicaţie
Programul texte arată modul de folosire a procedurilor şi funţiilor
de utilizare a caracterelor în modul grafic, setările acestora,
mărimea de scriere a caracterelor şi ditecţia de scriere.
Program texte;
Uses CRT,GRAPH;
Var gd,gm:integer;
Y,Size,linie:integer;
Begin
GD:=detect;
InitGraph(gd,gm,`c:pgi`);
If GraphResult<>grOK then
Halt(1);
Y:=0;
For size:=1 to 4do
Begin
SetTextStyle(DefaultFont,HorizDir,Size);
OutTextXY(0,y,`size= `+Chr(Size+48));
Inc(YtextHeight(`H`)+1);
End
SetTextStyle(DefaultFont,HorizDir,1);
SetTextJustify(CenterText, CenterText);
OutTextXY(Succ(GetMaxX)div2,Succ(GetMaxY)div2,`Textul centrat in centrul
ecranului`);
ReadKey;
ClearDevice;
SetTextJustify(CenterText,CenterText);
OutTextXY(Succ(GetMaxX)div2,GetMaxY-10,`textul centrat in partea de jos
a ecranului`);
ReadKey;
ClearDevice
SetTextJustify(CenterText, CenterText);
OutTextXY(Succ(GetMaxX)div2,10,`textul centrat in partea de jos a
ecranului`);
Readln;
CloseGraph;
End.
Capitolul 10
Definiri de culori ÅŸi palete
Informaţiile referitoare la culori sunt coţinute într-un tabel,
numit paletăŞstructura paletei este descrisă te tipul predefinit
PaletteType astfel:
Const
MaxColors=15;
Type PaletteType=record
Size:byte;
Colors:array[0..MaxColors] of shortint;
End;
Câmpul calificat cu size conţinenumărul culori paletei, iar
cămpurile calificate de colors contin codurile corespunzătoare
diferitelor culori existente. Paleta implicită este iniţializată de
procedura InitGraph; numărul elementelor paletei este în funţie de
placa grafică utilizată.
10.1. Proceduri şi funcţii
GetDefaultPalette
Procedura GetDefaultPalette încarcă intr-o variabilă (de tip
predefinit PaletteType) paleta implicită; acestă paletă implicită a
fost iniţializată de procedura InitGraph. Procedura este definită
astfel :
Procedure GetDefaultPalette(var pal:PaletteType);
Pal desemnează variabila în care este încarcată paleta implicită.
Câmpul pal.size conţine numărul culorilor ce pot fi utilizate.
Câmpul pal.colors(I) conţine codul crespunzător culori I.
SetColor
Procedura SetColor permite stabilirea culori scrisullui. Procedura este
definită astfel:
Procedure SetColor(colnum:word);
Colnum este indexul din paleta al culori selectate.
GetBkColor
Funcţia GetBkColor returnează valoarea utilizată la ultimul apel al
proceduri SetColor. Funcţia este definită astfel:
Function GetBkColor:word;
GetColor
Funcţia GetColor returnează valoarea utilizată la ultimul apel al
procedurii SetColor. Funcţia este definită astfel:
Function GetColor:word;
10.2. Aplicaţie
Programul palete realizează lucrul cu palete de culori setările
paletelor ÅŸi schimbarea culorilor unui text ÅŸi a fundalului.
Program palete;
Usese Crt,Graph;
Var gd,gm,i:integer;
Color:word;
MyPal,OldPal,Palette:PaletteType;
Begin
Randomize;
Gd:=Detect;
InitGraph(gd,gm,`c:pgi`);
If GraphResult<0 then
Halt(1);
GetDefaultPalette(OldPal);
MyPal:=OldPal;
{afiseaza ceva}
for i:=0 to MyPal.Size-1 do
begin
SetColor(i);
OutTextXY(10,i*10`******Se schimba culorile******`);
OutTextXY(400,i*10`***Turbo Pascal***`);
End;
Repeat {Schimba paleta de culori pana se apasa o tasta}
With MyPal do
Colors[Random(Size)]:=Random(Size+1);
SetAllPalette(MyPal);
Until KeyPressed;
SetAllPalette (OldPal); {restaurarea paletei originale}
ClearDevice;
OutTextXY(10,10,`apsa
…`):
Capitolul 11
SUBPROGRAME DESTINATE GENERATORULUI DE SUNET
11.1.PROCEDURI ÅžI FUNCÅ¢II
Sound
Procedura Sound asigură pornirea generatorului de sunet cu o
fregvenţă dată. Procedura este definită astfel:
Procedure Sound (Hz:word);
Hz defineşte frecvenţa sunetului în Hertz. Difuzorul va suna până
la apelul proceduri NoSound.
NoSound
Procedura NoSound decupleza generatorul de sunet. Procedura este
definită astfel:
Procedure NoSound;
Delay
Procedura Delay fixsează intervalul de timp destinat funţionări
generatorului de sunet. Procedura este definită astfel:
Procedure Delay (ms:word);
Ms defineşte timpul de îtârziere (durata) în milisecunde.
11.2. Aplicaţie
Programul muzică deonstreză cum sunt utilizate procedurile pentru
generarea de sunete.
Program muzică;
Uses Crt;
Var i: word;
Begin
For i:=1 to 5 do
Begin
Sound(220*i);
Delay(200+i*i);
NoSound;
End;
For i:=5 downto 1 do
Begin
Sound (220*i);
Delay (200+i*i);
NoSound;
end;
end.
BIBLIOGRAFIE
NICULESCU ST. Progaramarea calculatoarelor,
SORIN EFTENE Editura ditactică şi pedagogică,
BucureÅŸti, 1997
2.*** Turbo Pascal, Version 6.0
Programmer guide
Borland Internaţional,inc.,1990
3.TUDOR SORIN Algoritmi ÅŸi limbaje de programare,
Editura L&S informatică 1996
4 *** Turbo Pascal 6.0, Ghid de utilizare,
Editat sub egida Comisiei Naţionale de Informatică, Cluj-Napoca, 1992
5.MAKKAI A. Ghid de utilizare Turbo Pascal 5.0-5.5
CRIŞAN C. Micro informatică, Cluj-Napoca,1991
PAGE
PAGE 50
ì¥Â@