Limbajul c si C++ abc-doar



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

FUNCTIA rectangle()

-deseneaza un dreptunghi in culoarea,grosimea si stilul penitei

SINTAXA GENERALA este:

void far rectangle(int left,int top,int right,int bottom);

Functia deseneaza un dreptunghi la coordonatele left,top(colt stanga sus)

si right,bottom(colt dreapta jos).Nu returneaza valori.

EXEMPLU: #include

int *drv,*mod;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

rectangle(10,10,100,100);

setcolor(10);

rectangle(50,200,200,250);

setcolor(12);

rectangle(200,250,400,50);

setcolor(3);

rectangle(250,200,275,100);

sleep(3); }

Incercati sa utilizati functia pentru a desena drapele si stegulete,etc.


-239-[registerbgidriver()-registerbgifont()]

FUNCTIA registerbgidriver()

-permite incarcarea in memorie si utilizarea unui driver

SINTAXA GENERALA este: int registerbgidriver(void(*driver)(void));

Functia permite incarcarea unei file care contine un driver si intro-

ducerea acesteia in registrii programului.Dupa ce adresa de memorie a

fost transferata catre registerbgidriver(),functia initgraph() poate

utiliza driverul respectiv pentru initializarea modulului grafic.Fila

care contine driverul grafic,poate fi incarcata de pe disc in stiva me-

moriei de operare rezervata aplicatiei,sau poate fi convertita intr-o fila

de tip .OBJ(utilizand BGIOBJ.EXE) si apoi conectata(linkata) la aplicatie

in fila executabila(.EXE).

Apelarea functiei registerbgidriver() informeaza sistemul grafic ca

driverul spre care pointeaza a fost conectat la aplicatie.Aceasta rutina,

controleaza codul driverului specificat si daca este valid,il incarca in

registrii proprii(in memoria de operare).

Functia returneaza un cod de eroare negativ daca driverul specificat este

invalid sau returneaza numarul de inregistrare al driverului in caz ca

este valid.

EXEMPLU: #include

#include

#include

int cod;

main()

{

cod=registerbgidriver(DETECT);

printf("Codul returnat este: %d \n",cod);

sleep(3);

}

Exemplul de mai sus returneaza un cod negativ,deoarece nu exista nici o

fila "DETECT" care sa contina un driver grafic.Daca utilizati un nume

corect,pentru o fila de pe disc,functia va returna un numar pozitiv.

Puteti utiliza in acest caz,codul returnat pentru functia initgraph(),dar

cu conditia ca driverul instalat de d-voastra sa fie compatibil cu resur-

sele hardware(placa grafica).Nu incarcati la intamplare,orice driver

grafic gasit pe disc,deoarece riscati sa dereglati tot sistemul grafic.
FUNCTIA registerbgifont()

-incarca de pe disc o fila care contine fonturi grafice speciale

SINTAXA GENERALA este: int registerbgifont(void(*font)(void));

Functia se utilizeaza pentru a informa sistemul grafic ca fontul spre

care pointeaza functia a fost conectat la aplicatie si poate fi utilizat.

Rutina controleaza codul pentru fontul specificat si daca este valid il

incarca in registrii interni(in tampoanele din memoria de operare interna)

pentru a putea fi utilizat(cu outtext sau outtextxy).Fonturile implicite

sunt prezentate la functia settextstyle(). Daca utilizati o fila de fon-

turi creata de d-voastra,trebuie sa transferati rezultatul returnat de

functia registerbgifont() functiei settextstyle(),pentru ca fontul sa

poata fi utilizat(se selecteaza cu settextstyle si se apeleaza cu outtext)

Functia returneaza un cod de eroare negativ daca fontul apelat nu este

valid,sau un numar pozitiv,daca fontul a fost inclus in memoria de operare

a programului(in registrii interni ai procesorului).


-240- [ restorecrtmode() si sector() ]

EXEMPLU: #include

#include

#include

int cod;

main()

{

cod=registerbgifont(DEFAULT_FONT);

printf("Codul returnat este: %d \n",cod);

sleep(3);

}

In exemplul de mai sus,functia returneaza un cod de eroare.Fontul este

valid,dar nu exista nici o fila cu numele respectiv pe disc.Nu incercati

sa incarcati oric tip de fonturi,deoarece puteti bloca registrii interni

ai memoriei de operare si programul nu va mai functiona.Utilizati doat

file special destinate pentru modulul grafic(verificate anterior).
FUNCTIA restorecrtmode()

-reinstaleaza modul grafic detectat de functia initgraph()

SINTAXA GENERALA este: void far restorecrtmode(void);

Functia se utilizeaza pentru a reinstala rapid modul video original.

De obicei,functia se utilizeaza impreuna cu setgraphmode() pentru a trece

rapid din modul text in modul grafic al ecranului si reciproc.

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

#include

int *drv,*mod;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

outtextxy(100,100,"Text scris in modul grafic al ecranului");

sleep(2);

restorecrtmode();

printf("Text scris in modul text al ecranului !");

sleep(3);

setgraphmode(getgraphmode());

outtextxy(100,100,"Am revenit in modul grafic !!!");

sleep(2);

restorecrtmode();

printf("Si din nou in modul text !");

sleep(3);

}
FUNCTIA sector()

-deseneaza si umple un sector de elipsa in culoarea si stilul penitei

SINTAXA GENERALA este:

void sector(int x,int y,int stangle,int endangle,int xradius,int yradius);

unde: x si y reprezinta centrul elipsei,x radius si y radius sunt raza

orizontala si respectiv verticala iar stangle si endangle sunt unghiul de

start si respectiv cel de terminare a sectorului(in grade),incepand cu

0 la ora 3,90 la ora 12,etc. In caz de eroare returneaza -6(grNoScanMem).


-241- [graphics.h-setactivepage() ]

EXEMPLU: #include

#include

int *drv,*mod,x;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

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

{ setcolor(3);

setfillstyle(1,12);

sector(250,200,25,95,100,75);

setfillstyle(2,1);

sector(250-3*x,200-3*x,100,195,100,75);

setfillstyle(3,14);

sector(250,200,210,270,100,75);

setfillstyle(8,13);

sector(250,200,280,350,100,75);

sleep(1);

cleardevice();

}}
FUNCTIA setactivepage()

-seteaza pagina curenta ca pagina activa (pot exista si pagini inactive)

SINTAXA GENERALA este: void far setactivepage(int page);

Functia este utila atunci cand exista mai multe pagini grafice simultane.

Nu toate dispozitivele si placile grafice accepta pagini grafice simultane

(trebuie sa existe memorie de RAM special alocata).Placile de tip EGA,VGA

si Hercules accepta paginile grafice simultane.Pentru aceste placi,functia

setactivepage() determina ca pagina cu numarul specificat prin page sa fie

pagina activa,adica pagina asupra careia opereaza comenzile din aplicatie.

Nu este obligatoriu ca pagina activa sa fie si vizibila pe ecran(poate sa

fie activa in fundal).Pentru a fi vizibila pe ecran,pagina trebuie sa fie

apelata cu setvisualpage() (vezi functia).Dupa ce o pagina a fost setata

ca pagina activa,toate comenzile grafice consecutive vor fi executate in

pagina respectiva (chiar daca nu sunt vizibile pe ecran).Functia este

foarte utila,mai ales atunci cand se fac operatii automate pe care nu do-

riti sa le afisati pe ecran,sau cand doriti sa fragmentati o imagine gra-

fica in mai multe parti componente care pot fi accesate independent,etc.

Este preferabil sa utilizati un numar cat mai mic de pagini simultane,

preferabil doar pagina 0 si pagina 1,deoarece consuma memoria interna de

operare a programului si memoria grafica special destinata aplicatiilor

grafice.Cu cat deschideti simultan mai multe pagini,cu atat se reduce

spatiul de memorie grafica ramas pentru restul comenzilor din aplicatie

si riscati sa blocati programul prin lipsa de memorie (out of memory).

Daca este indispensabil sa lucrati cu pagini grafice simultane,este bine

sa configurati sistemul special pentru aceasta(alocati memorie de RAM din

memoria SIM special pentru aplicatiile grafice si eventual adaugati si

un miniprogram de gestionare a memoriei RAM alocate,astfel incat sa puteti

evita epuizarea accidentala a spatiului de memorie.Functia nu returneaza

nici o valoare (motiv care ingreuneaza si mai mult munca de depanare a

programelor).Este bine sa nu utilizati aceasta functie decat cu un motiv

bine precizat (nu doar pentru artificii grafice).


-242- [graphics.h -setallpalette() ]

EXEMPLU: #include

#include

int *drv,*mod;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

setcolor(12);

setactivepage(1);

outtextxy(20,100,"PAGINA 1");

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

circle(300,200,50);

setvisualpage(1);

sleep(3);

setactivepage(0);

bar3d(200,250,400,400,20,20);

setvisualpage(0);

sleep(3);

setvisualpage(1);

outext("Am revenit la PAGINA 1");

sleep(3);

}
FUNCTIA setallpalette()

-seteaza intreaga paleta grafica

SINTAXA GENERALA este:

void far setallpalette(struct palettetype far *palette);

unde: -*palette este pointerul spre o structura de tip palettetype in

care sunt arhivate datele pentru fiecare culoare din paleta grafica.

Practic,se declara o structura de tip palettetype in care se introduc

datele pentru fiecare culoare (eventual cu functia automata getpalette()),

dupa care se apeleaza structura respectiva pentru a reseta in bloc toate

culorile din paleta grafica.Pentru a reseta o singura culoare se poate

utiliza functia setpalette().

EXEMPLU: #include

#include

int *drv,*mod,x;

struct palettetype paleta;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

getpalette(&paleta);

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

{ setcolor(x+1);

setfillstyle(1,1)

setpalette(1,x);

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

sleep(1); }

setallpalette(&paleta);

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

outtext("S-au resetat culorile implicite");

sleep(3); }


-243- [ graphics.h-setaspectratio() ]

Functia se utilizeaza pentru a schimba partial sau total paleta grafica.

Tipul de data palettetype si numarul maxim de culori MAXCOLORS sunt pre-

definite in graphics.h cu forma generala:

#define MAXCOLORS 15

struct palettetype { unsigned char size;

signed char colors[MAXCOLORS+1]; };

unde size exprima numarul de culori din paleta grafica astfel definita

iar colors este aria de date care contine codul pentru fiecare culoare

din paleta.Daca un element al ariei colors contine valoarea -1,atunci

culoarea respectiva din paleta grafica nu va fi schimbata la apelarea

functiei(repectiv a ariei de date).Elementele din aria colors pot fi date

de tip int(codurile culorilor) sau constantele simbolice ale fiecarei

culori,asa cum sunt definite in COLORS din graphics.h(RED,GREEN etc.)

Functia nu poate fi apelata pentru driverul IBM-8514.

Daca apelarea functiei setallpalette() transfera din structura specificata

date invalide,functia returneaza codul de eroare -11(grError) iar culorile

din paleta grafica raman nemodificate.

Se recomanda utilizarea functiei pentru resetarea valorilor implicite

ale paletei grafice,dupa ce a-ti modificat paleta grafica in cursul

unei aplicatii (pentru a nu modifica aspectul grafic al celorlate apli-

catii din program).
FUNCTIA setaspectratio()

-modifica rezolutia ecranului (dimensiunile fiecarui pixel)

SINTAXA GENERALA este: void far setaspectratio(int xasp,int yasp);

unde: xasp si yasp sunt rezolutia orizontala si respectiv verticala a

ecranului.Functia modifica intregul sistem grafic prin schimbarea aspect-

ului pentru fiecare pixel(vezi si getaspectratio()).Sistemul grafic uti-

lizeaza valorile implicite astfel incat cercurile desenate sa fie perfect

rotunde.La orice alte valori,cercurile desenate devin elipse.

EXEMPLU: #include

#include

int *drv,*mod,asx,asy,x;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

getaspectratio(&asx,&asy);

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

{ setaspectratio(asx-500*x,asy);

setcolor(12);

circle(250,220,100);

ellipse(400,50,0,360,40,20);

sleep(2);

}

cleardevice();

setcolor(3);

setaspectratio(asx,asy);

circle(250,220,100);

ellipse(400,50,0,360,40,20);

outtext("S-au resetat valorile implicite ale pixelilor!");

sleep(3); }


-244- [graphics.h -setbkcolor()-setcolor()]

FUNCTIA setbkcolor()

-seteaza culoarea de fond a ecranului

SINTAXA GENERALA este: void far setbkcolor(int color);

Functia seteaza culoarea de fond a ecranului in culoarea specificata prin

codul culorii sau prin simbolul acesteia.Functia accepta urmatoarele

valori: 0 (BLACK),1 (BLUE),2 (GREEN),3 (CYAN),4 (RED),5 (MAGENTA),

6 (BROWN),7 (LIGHTGRAY),8 (DARKGRAY),9 (LIGHTBLUE),10 (LIGHTGREEN),

11 (LIGHTCYAN),12 (LIGHTRED),13 (LIGHTMAGENTA),14 (YELLOW),15 (WHITE)

Astfel pentru a seta culorea de fond a ecranului in albastru,se poate

utiliza oricare dintre variantele: setbkcolor(BLUE); sau setbkcolor(1);

La sistemele CGA si EGA,functia schimba culoarea de fond modificand prima

intrare din paleta grafica.Din acest motiv,la adaptoarele EGA si VGA,se

poate intampla ca modificarea paletei grafice cu setpallette() sau cu

setallpalette() sa nu returneze culoarea dorita,deoarece functia setbk-

color() va indica numarul de intrare in paleta grafica in loc sa spe-

cifice o anumita culoare.Daca se apeleaza setbkcolor(0),fondul ecranului

va fi negru,indiferent de tipul de adaptor si placa grafica.

Functia nu returneaza nici o valoare(nu incercati sa o "depanati").

EXEMPLU: #include

#include

int *drv,*mod,x:

main()

{ drv=DETECT;

initgraph(drv,mod,"");

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

{ setactivepage(1);

setbkcolor(x);

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

setvisualpage(1);

sleep(1);

setactivepage(0);

setbkcolor(x-1);

circle(250,300,50);

setvisualpage(0);

sleep(1);

}}
FUNCTIA setcolor()

-seteaza culoarea de desen a penitei (pentru linii,text etc.)

SINTAXA GENERALA este: void far setcolor(int color);

Functia seteaza culoarea penitei grafice la culoarea specificata.Pentru

color se poate utiliza fie un numar de cod de tip int,fie simbolul

culorii asa cum este definit in COLORS din graphics.h

Pentru adaptoarele CGA,valorile acceptate sunt: 01 (CGA_LIGHTGREEN),

02 (CGA_LIGHTRED),03 (CGA_YELLOW),11 (CGA_LIGHTCYAN),12 (CGA_LIGHTMAGENTA)

13 (CGA_WHITE),21 (CGA_GREEN),22 (CGA_RED),23 (CGA_BROWN),31 (CGA_CYAN),

32 (CGA_MAGENTA),33 (CGA_LIGHTGRAY) unde prima cifra specifica numarul

paletei grafice selectate iar a doua cifra este codul culorii (pentru

functia setcolor() se va utiliza un numar de la 1 la 3,dupa selectarea

paletei intre 0 si 3).

Pentru adaptoarele EGA,codurile si simbolurile sunt ca la setbkcolor().


-245- [ graphics.h -setfillpattern() ]

Pentru selectarea culorii penitei se poate utiliza fie codul numeric,

fie simbolul de tip caracter.Astfel,de exemplu,pentru un adaptor de tip

CGA,daca se opteaza pentru paleta grafica zero (GCA0),se vor putea uti-

liza culorile LIGHTGREEN,LIGHTRED sau LIGHTYELLOW.Pentru a utiliza culoa-

rea galbena,se va specifica fie setcolor(3); fie setcolor(CGA_YELLOW).

Pentru un adaptor de tip EGA,culoarea galben se va seta fie cu comanda

setcolor(14); fie cu comanda setcolor(YELLOW) (vezi si COLORS)

Functia nu returneaza nici o valoare (nu incercati sa o "depanati").

EXEMPLU: #include

#include

int *drv,*mod,x;

main()

{ drv=DETECT;

initgraph(drv,mod,"");

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

{ setcolor(x+1);

setfillstyle(x,x);

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

sleep(2);

}}
FUNCTIA setfillpattern()

-seteaza un model predefinit de utilizator,pentru penita grafica

SINTAXA GENERALA este:

void far setfillpattern(char far *upattern,int color);

unde *upattern este pointerul spre modelul grafic definit de catre uti-

lizator sub forma unei arii de 8 bytes in care fiecare byte corespunde

pentru 8 pixeli din modelul grafic rezultat.Pentru fiecare bit din

definitie setat la o valoare de 1(pozitiva),pixelul corespunzator din

modelul grafic rezultat va fi reprezentat in culoarea specificata prin

color.

Functia este asemanatoare cu setfillstyle(),dar se utilizeaza pentru

modele grafice definite de catre utilizator.Functia setfillstyle() ape-

leaza modele grafice predefinite in graphics.h.

Functia nu returneaza nici o valoare.

EXEMPLU: #include

#include

int *drv,*mod;

char model1[8]={0xAA,0x55,0xAA,0x55,0x11,0x00,0x77,0xAA};

char model2[8]={0x00,0x00,0x11,0x11,0x00,0x00,0x11,0x11};

main()

{ drv=DETECT;

initgraph(drv,mod,"");

setfillpattern(model1,3);

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

sleep(3);

setfillpattern(model2,14);

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

sleep(3);

}

Nu ezitati sa experimentati modele grafice definite de d-voastra.


-246- [ setfillstyle()-setgraphbufsize() ]

FUNCTIA setfillstyle()

-seteaza modelul grafic si culoarea pentru umplerea imaginilor

SINTAXA GENERALA este: void far setfillstyle(int pattern,int color);

Functia seteaza modelul grafic predefinit,utilizat pentru umplerea

imaginilor (cu floodfill(),etc.) si culoarea de umplere.Cele 12 modele

grafice predefinite in graphics.h sunt: 0 (EMPTY_FILL) ,1(SOLID_FILL) ,

2 (LINE_FILL) ,3 (LTSLASH_FILL) ,4 (SLASH_FILL) ,5 (BKSLASH_FILL),

6 (LTBKSLASH_FILL) ,7 (HATCH_FILL) ,8 (XHATCH_FILL) ,9 (INTERLEAVE_FILL),

10 (WIDE_DOT_FILL) ,11 (CLOSE_DOT_FILL) ,12 (USER_FILL).

Daca doriti sa utilizati un model grafic definit de d-voastra este prefe-

rabil sa apelati functia setfillpattern() decat sa apelati setfillstyle()

cu parametrul 12 sau USER_FILL,deoarece este mai explicita.Pentru cele-

lalte modele grafice,se poate utiliza fie codul numeric,fie numele simbo-

Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   29   30   31   32   33   34   35   36   ...   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