Limbajul c si C++ abc-doar



Yüklə 4,6 Mb.
səhifə31/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   ...   27   28   29   30   31   32   33   34   ...   55

printf("%s \n",nr);

printf("adresele din aria de memorie COLORS sunt: \n\n");

for(x=0;x<16;x++)

{

sprintf(culori,"paleta[%02d] : 0x%04X",x,date.colors[x]);

printf("%s\n",culori);

sleep(1); };

sleep(5);

}
FUNCTIA getpalettesize()

-determina numarul de intrari in paleta grafica(dimensiunea paletei)

SINTAXA GENERALA este: int far getpalettesize(void);

Functia determina si returneaza numarul de intrari pentru care poate fi

setata paleta grafica instalata in modul grafic curent.De exemplu,pentru

EGA modul grafic color returneaza 16 (cel monocrom returneaza 1).

Functia returneaza numarul de intrari in paleta grafica actuala.

EXEMPLU: #include

#include

#include

int *drv,*mod,paleta;

main()

{

drv=DETECT;

initgraph(drv,mod,"");

paleta=getpalettesize();

printf("numarul de intrari/paleta= %d \n",paleta);

sleep(5);

}
FUNCTIA getpixel()

-returneaza culoarea(codul culorii) pentru un anumit pixel

SINTAXA GENERALA este:

unsigned far getpixel(int x,int y);

Functia preia si returneaza codul culorii pentru pixelul cu coordonatele

de ecran x si y (x=orizontala iar y=verticala ecranului ).

Functia returneaza codul culorii pentru pixelul specificat.

Se utilizeaza mai ales in aplicatiile grafice animate,in care o anumita

imagine grafica se arhiveaza intr-o structura,pixel cu pixel,pentru a

forma un obiect grafic ce poate fi apoi resetat la nevoie.


-223- [ graphics.h -getpixel() ]

EXEMPLUL 1: #include

#include

#include

int *drv,*mod,x;

unsigned numar;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

for(x=1;x<10;x++)

{ setcolor(x);

bar3d(300,200,400,300,20,10);

numar=getpixel(300,200);

printf("Coltul din stanga sus este in culoarea: %d \n",numar);

sleep(2);

}}

Un exemplu pregatitor pentru notiunea de obiect grafic este EXEMPLUL 2:

#include

#include

#include

int *drv,*mod,x,y,z;

unsigned pix[16][16];

main()

{ drv=DETECT;

initgraph(drv,mod,"");

for(x=1;x<16;x++)

{ for(y=1;y<16;y++)

{ putpixel(x,y,y);

pix[x][y]=getpixel(x,y);

};};

sleep(3);

for(z=1;z<30;z++)

{ for(x=1;x<16;x++)

{ for(y=1;y<16;y++)

{ putpixel(z*15+x,z*15+y,pix[x][y];

putpixel(z*x,z*y,pix[x][y];

};};

sleep(1); };

sleep(5); }

In exemplul de mai sus,patratul definit de cele doua bucle for (x si y)

este un obiect grafic,pentru care functia getpixel() a preluat culoarea

fiecarui pixel si a arhivat-o in aria de memorie pix[][].Cele doua bucle

de definitie,impreuna cu aria de memorie care defineste culorile,pot fi

grupate intr-o structura,pentru a forma un obiect grafic independent,ce

poate fi apoi apelat ori de cate ori este nevoie.Dezvoltarea si apoi

perfectionarea acestui tip de programare,a condus la ceea ce se cunoaste

astazi sub numele de programare orientata spre obiect(cu diferenta ca

obiectele informatice nu sunt doar grafice ci pot fi matematice,de tip

caracter,tabele,statistici etc.).Limbajele C++ si Visual C++ contin clase

de functii special dezvoltate pentru construirea,arhivarea si apoi mani-

pularea obiectelor,in cadrul unor rutine,sau cu ajutorul unor comenzi cat

mai simple(se economisesc astfel mii de linii inutile de program).


-224- [ graphics.h-gettextsettings() ]

FUNCTIA gettextsettings()

-arhiveaza intr-o structura speciala date despre texte(font,marime etc.)

SINTAXA GENERALA este:

void far gettextsettings(struct textsettingstype far *texttypeinfo);

Functia arhiveaza informatiile despre fonturi,directia textului,dimen-

siunea caracterelor si pozitia de pe ecran,intr-o structura speciala de

tip textsettingstype definita in graphics.h cu forma generala:

struct textsettingstype { int font;

int direction;

int charsize;

int horiz;

int vert;

};

Exista 10 tipuri predefinite de fonturi,doua directii(0=orizontala si

1=verticala) si 10 dimensiuni ale caracterelor -vezi settextstyle().

Ultimele doua variabile horiz si vert arhiveaza pozitia de pe ecran

(justificarea textului).

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

int *drv,*mod,x,y,z;

char text[80];

struct textsettingstype info;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

for(x=1;x<5;x++)

{ for(y=1;y<10;y++)

{ settextstyle(x,0,y);

settextjustify(1,1);

sprintf(text,"Exemplificare text !");

outtextxy(300,200,text);

gettextsettings(&info);

printf("Fontul este: %d \n",info.font);

printf("Dimensiunea este: %d \n",info.charsize);

sleep(1);

cleardevice();

}}}

Functia se utilizeaza pentru a prelua caracteristicile unui text,cu scopul

de a putea reutiliza aceleasi setari in mod repetat(de exemplu aparitia

unor mesaje sau a unor spoturi publicitare etc.Functia gettextsettings()

impreuna cu settextstyle() au fost dezvoltate si perfectionate intr-un

stil independent de editare a textului cunoscut actual sub numele de

hipertext si utilizat mai ales pentru redactarea articolelor de ziar si

a site-urilor pentru Internet.

Nu ezitati sa exersati cat mai multe exemple care apeleaza functiile

de editare a textului in modulul grafic,deoarece sunt simple si spectacu-

loase.Exentual incercati sa realizati una sau mai multe bare de teletext,

de grosimi diferite,in care textul sa defileze cu viteze diferite (fie pe

orizontala,fie pe verticala).Apoi incercati sa dezvoltati o functie care

sa defileze textul in sens contrar(pentru a reciti un text oarecare)etc.


-225- [ getviewsettings()-getx()-gety() ]

FUNCTIA getviewsettings()

-citeste si arhiveaza intr-o structura date despre regiunea activa

SINTAXA GENERALA este:

void far getviewsettings(struct viewporttype far *viewport);

Functia citeste informatiile despre regiunea activa a ecranului (colturile

si setarea modului clip) si le arhiveaza intr-o structura speciala de tip

viewporttype definita in graphics.h cu forma generala:

struct viewporttype { int left,top,right,bottom;

int clip;

};

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

#include

struct viewporttype info;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

bar3d(200,200,300,300,50,10);

getviewsettings(&info);

printf("Regiunea activa are urmatoarele limite: \n");

printf(" stanga: %d sus: %d \n",info.left,info.top);

printf(" dreapta:%d jos: %d \n",info.right,info.bottom);

printf(" clipperul este setat: %d \n",info.clip);

sleep(5);

}

Observati ca regiunea activa se refera la ecran si nu la desenul trasat.
FUNCTIA getx()

-determina si returneaza coordonata orizontala a cursorului

SINTAXA GENERALA este: int far getx(void);

Functia determina si returneaza valaorea coordonatei orizontale a curso-

rului(axa Ox).Valoarea returnata este in concordanta cu regiunea activa

a ecranului(valoarea se raporteaza la punctul zero al regiunii active).

Functia returneaza o valoare de tip int.

EXEMPLU: vezi exemplul de la functia gety()
FUNCTIA gety()

-determina si returneaza coordonata verticala a cursorului

SINTAXA GENERALA este: int far gety(void)

Functia determina si returneaza coordonata verticala (axa Oy) pentru

pozitia actuala a cursorului.Valaorea returnata este dependenta de regiu-

nea activa,deoarece se raporteaza la punctul zero al regiunii active de

ecran.

Functia returneaza o valoare de tip int.

Se utilizeaza impreuna cu functia getx(),pentru a determina pozitia

actuala a cursorului pe ecran,sau pentru a controla trasarea graficelor

si/sau afisarea textelor in modul grafic.

Se utilizeaza frecvent si in rutinele de identificare a pozitiei

cursorului,mai ales atunci cand se utilizeaza butoane sau alte simboluri

grafice pentru a crea o interfata grafica intre program si utilizator.


-226- [graphics.h -graphdefaults() ]

EXEMPLU: #include

#include

#include

#include

int *drv,*mod,a,b,x,y,z;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

randomize();

for (z=1;z<20;z++)

{ a=random(500);

b=random(400);

bar3d(a,b,random(500),random(400),20,10);

moveto(a,b);

x=getx();

y=gety();

printf("Coltul staga sus este la: x=%d si y=%d \n",x,y);

sleep(3);

cleardevice();

}}
FUNCTIA graphdefaults()

-reseteaza toate setarile grafice la valorile originale(implicite)

SINTAXA GENERALA este: void far graphdefaults(void);

Functia efectueaza urmatoarele actiuni: 1.seteaza regiunea activa la tot

ecranul 2.deplaseaza cursorul la pozitia 0,0 3.seteaza paleta de culori,

culoarea de fond si culoarea penitei la valorile implicite (negru/alb)

4.reseteaza valoarea implicita a modelului grafic 5.reseteaza valoarea

implicita a fonturilor si a directiei de scriere a textelor.

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

int *drv,*mod,x;

char text[80];

main()

{ drv=DETECT;

initgraph(drv,mod,"");

for(x=1;x<11;x++)

{ setcolor(x);

setbkcolor(x+3);

bar3d(300,200,400,300,50,10);

settextstyle(4,0,x);

sprintf(text,"BUNA ZIUA !");

outtextxy(100,350,text);

sleep(2);

cleardevice();

graphdefaults();

bar3d(300,200,400,300,50,10);

outtextxy(100,350,text);

sleep(2);

cleardevice(); }}


-227- [ grapherrormsg()-_graphgetmem() ]

FUNCTIA grapherrormsg()

-returneaza un pointer spre mesajul de eroare returnat de graphresult()

SINTAXA GENERALA este: char *far grapherrormsg(int errorcode);

Functia returneaza un pointer spre sirul care contine mesajul de eroare

corespunzator codului de eroare returnat de catre functia graphresult().

Tabelul cu mesajele de eroare este prezentat la functia graphresult().

EXEMPLU: #include

#include

#include

int drv,mod,eroare;

main()

{ drv=55;

initgraph(&drv,&mod,"");

eroare=graphresult();

printf("Codul erorii este: %d \n",eroare);

printf("Mesajul de eroare este: %s \n",grapherrormsg(eroare));

sleep(5);

printf("Alte mesaje posibile sunt: \n");

for (eroare=-18;eroare<1;eroare++)

{

printf("codul=%d \n",eroare);

printf("Mesajul este: %s \n",grapherrormsg(eroare);

sleep(1); };

sleep(5); }
FUNCTIA _graphgetmem()

-aloca memorie pentru tampoanele interne ale driverelor grafice

SINTAXA GENERALA este: void far *far _graphgetmem(unsigned size);

Functia este apelata de catre rutinele din biblioteca de functii grafice

(nu si de cele definite de utilizator),pentru a aloca memoria necesara

pentru tampoanele interne de memorie ale driverelor grafice si ale carac-

terelor de tip text.Daca utilizati functiile predefinite din biblioteca

grafica,nu este necesar sa realocati memorie,deoarece aceasta sa va aloca

automat.Daca doriti sa specificati expres modul de management al memoriei

destinata driverului grafic instalat puteti sa utilizati _graphgetmem()

cu conditia sa fie declarata exact ca in modelul de sintaxa.Functiile

implicite aloca memoria apeland functia malloc().Daca nu stiti exact ce

rezultat ve-ti obtine,este preferabil sa nu modificati modul implicit de

alocare a memoriei,deoarece riscati sa defectati driver-ul grafic instalat

si sa ramaneti fara nici o imagine.

Functia nu returneaza nici o valoare.Pentru eliberarea memoriei alocate se

poate utiliza functia _graphfreemem() (vezi mai jos)

EXEMPLU: vezi graphfreemem()
FUNCTIA _graphfreemem()

-elibereaza memoria alocata anterior cu _graphgetmem()

SINTAXA GENERALA este: void far _graphfreemem(void far *ptr,unsigned size);

Functia este apelata de catre toate functiile grafice,pentru a elibera

memoria alocata anterior cu _graphgetmem().Puteti apela functia atunci

cand a-ti utilizat functia _graphgetmem() pentru driverul grafic,

Functia nu returneaza nici o valoare.


-228- [ graphfreemem() - graphresult() ]

EXEMPLU: #include

#include

int *drv,*mod,rezultat;

unsigned tampon=32000;

void *var1;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

_graphgetmem(tampon);

rezultat=graphresult();

printf("Codul de eroare este: %d \n",rezultat);

bar3d(200,300,300,400,50,20);

sleep(3);

_graphfreemem(var1,tampon);

}

Atentie sa nu eliberati tampoanele de memorie atat timp cat sunt inca

necesare pentru executia functiilor grafice curente sau viitoare.La

sfarsitul aplicatiei grafice,nu uitati sa eliberati memoria alocata,

pentru a elibera meoria de operare de datele inutile.Daca utilizati doar

functiile predefinite in libraria de functii grafice,acestea isi gestio-

neaza singure memoria si nu e cazul sa apelati graphfreemem() inutil.
FUNCTIA graphresult()

-returneaza codul de eroare al ultimei operatii care a generat o eroare

SINTAXA GENERALA este: int far graphresult(void);

Functia returneaza codul de eroare al ultimei operatii ce a generat o

eroare si respectiv reseteaza variabila error la grOK.Codul returnat si

respectiv mesajul de eroare este continut in tipul de data graph_errors

predefinit in graphics.h cu urmatoarele valori:

CODUL CONSTANTA MESAJUL DE EROARE CORESPUNZATOR

0 grOk No error

-1 grNoInitGraph (BGI) graphics not installed(use initgraph)

-2 grNotDetected Graphics hardware not detected

-3 grFileNotFound Device driver file not found

-4 grInvalidDriver Invalid device driver file

-5 grNoLoadMem Not enough memory to load driver

-6 grNoScanMem Out of memory in scan fill

-7 grNoFloodMem Out of memory in flood fill

-8 grFontNot Found Font file not found

-9 igrNoFontMem Not enough memory to load font

-10 grInvalid Mode Invalid graphics mode for selected driver

-11 grError Graphics error

-12 grlOerror Graphics I/O error

-13 grInvalidFont Invalid font file

-14 grInvalidFontNum Invalid font number

-15 grInvalidDeviceNum Invalid device number

-18 grInvalidVersion Invalid version number

Dupa apelarea functiei,variabila este resetata automat la zero.Pentru a

salva rezultatul functiei graphresult() utilizati o variabila temporara

special destinata functiei.

Functia returneaza codul ultimei erori inregistrate (-15 la 0)


-229- [ graphics.h -imagesize() ]

EXEMPLU: #include

#include

#include

int drv,mod,e,z;

main()

{ for(z=0;z<7;z++)

{ drv=z;

initgraph(&drv,&mod,"");

e=hraphresult();

printf("driverul instalat este: %d \n",z);

if(e==0)

printf("Nu exista erori in modulul grafic ! \n");

else

printf("Eroare numarul %d in modulul grafic ! \n",e);

sleep(3); };

}
FUNCTIA imagesize()

-determina marimea spatiului de memorie necesar pentru o imagine bitmap

SINTAXA GENERALA este:

unsigned far imagesize(int left,int top,int right,int bottom);

Functia determina si returneaza in bytes,dimensiunea pentru aria de me-

morie necesara pentru a arhiva o imagine grafica bit cu bit(bitmap).Daca

spatiul necesar pentru arhivarea imaginii specificate este mai mare sau

egal cu 64K-1,functia returneaza 0xFFFF (-1).In definitie,left,top,right

si bottom specifica coordonatele colturilor stanga sus si dreapta jos ale

imaginii specificate(aria totala trebuie sa fie mai mica de 63999 bytes).

Functia returneaza in bytes dimensiunea ariei de memorie.

EXEMPLU: #include

#include

#include

int *drv,*mod;

unsigned d;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

bar3d(200,250,300,350,50,10);

d=imagesize(200,250,300,350);

printf("desenul ocupa in memorie: %d bytes \n",d);

sleep(3);

setcolor(4);

setfillstyle(4,7);

bar3d(150,150,500,350,50,10);

floodfill(200,200,4);

d=imagesize(150,150,500,350);

printf("desenul 2 ocupa: %d bytes de memorie ! \n",d);

printf("Eroare= %d \n",graphresult());

sleep(3);

}

Observati ca dimensiunea spatului de memorie ocupat este aceeasi,indi-

ferent de culoarea penitei sau de modelul grafic utilizat(pattern).


-230- [ graphics.h - initgraph() ]

FUNCTIA initgraph()

-initializeaza modul grafic al ecranului

SINTAXA GENERALA este:

void far initgraph(int far *graphdriver,int far *graphmode,char far *path);

Functia se utilizeaza pentru a initializa modul grafic al ecranului si

trebuie apelata inainte de a apela oricare alta functie grafica,deoarece

functiile grafice nu pot fi apelate decat dupa incarcarea driver-ului

grafic de pe disc.Parametrii functiei sunt graphdriver si graphmode,care

permit fie detectarea automata,fie specificarea explicita a driver-ului

grafic solicitat si respectiv calea spre driverul grafic solicitat(path).

Daca utilizati varianta de autodetectie,functia va reseta toate setarile

grafice la valoarea implicita(paleta,culoarea,pozitia cursorului,regiunea

activa a ecranului etc.).In mod normal,functia incarca driverul grafic

dupa ce aloca spatiul de memorie necesar cu ajutorul functiei graphgetmem

(automat),dupa care selecteaza fila .BGI apelata de pe disc.Alternativ,

se poate adauga un driver grafic si realizand un link (conexiune fixa)

intre fila care contine driverul grafic si fila de program executabila din

care este apelat.

Calea de acces la driver (*path) trebuie sa specifice directorul in care

Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   27   28   29   30   31   32   33   34   ...   55




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin