14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL...
Transcript of 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL...
![Page 1: 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL TEXT Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter](https://reader036.fdocumente.com/reader036/viewer/2022081903/5a7fc0bb7f8b9a571e8bf8b8/html5/thumbnails/1.jpg)
1
14. AFISAREA PE ECRAN IN MODUL TEXT
Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter este
reprezentat pe doi octeti: codul ASCII si atributul caracterului:
-bit 7: blinking (1 activ, 0 inactiv);
-bitii 6-4: culoare fond;
-bitii 3-0: culoare caracter.
Functiile sunt declarate in conio.h.
void textmode (int mod);
stabileste modul de lucru:
BW40 0
C40 1
BW80 2
C80 3
. . . . . . . . .
Exemplu:
textmode(BW40);
textmode(3);
Functii pentru citire / scriere text
Afisarea se face in fereastra activa (initial intregul ecran), daca se ajunge la marginea din dreapta, se
continua in stanga pe randul urmator.
int cscanf (char * sir_format [, lista_adr_var]);
citeste de la consola, cu formatarea datelor (citeste de la consola, in timp ce scanf citeste de la
streamul stdin). Returneaza numarul de valori citite si memorate sau EOF daca se atinge sfarsit de
fisier inainte de citirea tuturor variabilelor.
int cprintf (const char *sir_format, lista_valori);
afiseaza lista de valori in fereastra curenta cu formatarea datelor (diferenta fata de printf: \n nu se
converteste automat in \r \n, deci trebuie sa se specifice ambele caractere). Returneaza numarul de
valori afisate.
char* cgets (char *sir);
citeste sirul de caractere pana la \r\n sau numarul maxim de caractere (acest numar se inscrie in
sir[0] inainte de apel) si inlocuieste \r\n cu \0. Inscrie in sir[1] numarul efectiv de caratere citite, iar
sirul incepe din sir[2]. Rezultatul este adresa sirului, adica sir[2].
int cputs (const char *sir);
afiseaza sirul in fereastra curenta (nu adauga automat \r\n) si intoarce ultimul caracter afisat.
![Page 2: 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL TEXT Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter](https://reader036.fdocumente.com/reader036/viewer/2022081903/5a7fc0bb7f8b9a571e8bf8b8/html5/thumbnails/2.jpg)
2
int getch (void);
int getche (void);
citeste un carcater fara / cu ecou.
int putch (int c );
afiseaza caracterul c si intoarce caracterul sau EOF la eroare.
Functii pentru gestionarea textului pe ecran
int movetext (int x1, int y1, int x2, int y2, int xstg, int ysus);
deplaseaza textul din dreptunghiul (x1,y1) coltul stanga sus si (x2,y2) coltul dreapta jos in noul
dreptunghi avand coltul stanga sus (xstg,ysus). Intoarce ≠0 la succes si =0 la eroare (coordonatele in
afara ecranului).
void gotoxy (int x, int y);
deplaseaza cursorul in pozitia x,y (daca cel putin o coordonata este gresita, nu are efect).
void clrscr (void);
sterge fereastra curenta si pozitioneaza cursorul in pozitia (1,1).
void clreol (void);
sterge caracterele din pozitia curenta pana la sfarsitul liniei, cursorul nu se deplaseaza.
void delline (void);
sterge linia cu cursorul si executa defilare (scroll) pentru liniile urmatoare.
void insline (void);
insereaza o linie libera in pozitia cursorului, liniile urmatoare sunt deplasate in jos.
int gettext (int x1, int y1, int x2, int y2, void *tablou);
copiaza caracterele din dreptunghiul specificat in tablou (numar de octeti = nr_linii * nr_coloane *
2). Rezultatul functiei: ≠0 la succes si =0 la eroare.
int puttext (int x1, int y1, int x2, int y2, void *tablou);
afiseaza continutul tabloului pe ecran, in dreptunghiul specificat. Intoarce ≠0 la succes si =0 la
eroare.
int wherex (void);
int wherey (void);
furnizeaza coordonatele pozitiei curente a cursorului.
![Page 3: 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL TEXT Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter](https://reader036.fdocumente.com/reader036/viewer/2022081903/5a7fc0bb7f8b9a571e8bf8b8/html5/thumbnails/3.jpg)
3
Functii pentru fereastra
void window (int x1, int y1, int x2, int y2);
specifica fereastra curenta de afisare prin coordonate absolute. Daca coordonatele sunt in afara
limitelor ecranului curent, functia nu are efect. Ferestrele se pot suprapune. Coordonatele functiilor
de operare cu ecranul sunt relative la fereastra curenta de afisare.
void gettextinfo (struct text_info *p);
citeste setul de parametri intr-o structura text_info (declarata in conio.h):
struct text_info {
unsigned char winleft, wintop, winright, winbottom; //fereastra curenta
unsigned char attribute, normattr; //atrib. crnt, atr. init. al celulelor
unsigned char currmode; //mod curent de afisare
unsigned char screenheight, screenwidth; //inaltime, latime ecran
unsigned char cursx, cursy; //coordonate cursor
};
Functii pentru controlul atributelor
void textcolor (int culoare);
seteaza culoarea caracterelor. Culorile disponibile pentru text si fond:
0 = BLACK
1 = BLUE
2 = GEEN
3 = CYAN
4 = RED
5 = MAGENTA
6 = BROWN
7 = LIGHTGRAY
Culori disponibile numai pentru text:
8 = DARKGRAY
9 = LIGHTBLUE
10 = LIGHTGREEN
11 = LIGHTCYAN
12 = LIGHTRED
13 = LIGHTMAGENTA
14 = YELLOW
15 = WHITE
128 = BLINK
Exemplu: . . . . . . . .
textcolor(YELLOW); //in continuare caracterele se vor afisa cu galben
![Page 4: 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL TEXT Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter](https://reader036.fdocumente.com/reader036/viewer/2022081903/5a7fc0bb7f8b9a571e8bf8b8/html5/thumbnails/4.jpg)
4
. . . . . . .
void textbackground (int culoare);
selecteaza culoarea fondului pentru afisarea carcaterelor.
void textattr (int atribut);
specifica atributul fiecarui carcater care urmeaza sa se afiseze.
Exemplu: se poate utiliza operatorul SAU la nivel de bit pentru specificarea atributului.
. . . . . . . . . textattr (BLINK | BLUE*16 | YELLOW); //atribut = 1 001 1110
Exemplu: prima pagina a unui proiect.
#include <conio.h>
#include <dos.h>
#include <string.h>
void main (void) {
char univ[]="UNIVERSITATEA POLITEHNICA BUCURESTI";
char fac[]="FACULTATEA DE STIINTE APLICATE";
char nume[]="IONESCU ADRIAN";
char grupa[]="Grupa 1311";
textmode(C80);
textbackground (BLUE);
clrscr();
//border();
textcolor(YELLOW);
gotoxy(80/2-strlen(univ)/2,3);
cprintf(univ);
gotoxy(80/2-strlen(fac)/2,5);
cprintf(fac);
gotoxy(1,23);
cprintf("Apasati o tasta!");
window(25,10,55,20);
textbackground(RED);
clrscr();
textcolor(WHITE);
gotoxy(30/2-strlen(nume)/2,2);
cprintf(nume);
gotoxy(30/2-strlen(grupa)/2,5);
cprintf(grupa);
sound(1500);
delay(5000);
sound(100);
getch();
nosound();
}
15. AFISAREA PE ECRAN IN MODUL GRAFIC
Functiile de afisare in modul grafic se gasesc in biblioteca graphics.lib si se specifica
includerea fisierului antet graphics.h. Ecranul este vazut sub forma unei matrici de pixeli, de
![Page 5: 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL TEXT Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter](https://reader036.fdocumente.com/reader036/viewer/2022081903/5a7fc0bb7f8b9a571e8bf8b8/html5/thumbnails/5.jpg)
5
dimensiuni in functie de rezolutia curenta (exemplu pentru rezolutia 800*600 => matricea are 800
coloane de puncte de la 0 la 799 si 600 linii de la 0 la 599).
Controlul sistemului grafic
Driverele grafice se gasesc intr-un anumit director, de exemplu in C:\BC4|BGI, care trebuie
specificat la initializarea modului grafic de afisare pe ecran.
void far initgraph (int far *gdriver, int far *gmode, char far *cale);
initializeaza modul grafic, unde gdriver este driverul grafic si care poate fi:
DETECT 0
CGA 1
. . . . . . .
VGA 9
. . . . . . .
gmode este modul grafic pentru un adaptor, de exemplu pentru VGA:
VGALO 0 640*200
VGAMED 1 640*350
VGAHI 2 640*480
iar cale este calea de directoare pentru driverul grafic necesar afisarii. Modificatorul far specifica
apeluri de functii si reveniri utilizand variabile care sunt in afara segmentului de date.
Exemplu:
int gdrv=VGA, gmd=VGAHI;
initgraph(&gdrv,&gmd,"\\tc\\bgi"); //in sir '\' trebuie dedublat
void far detectgraph (int far *gdrive, int far *gmode);
detecteaza driverul grafic din calculator si rezolutia maxima.
int far getmaxx (void);
int far getmaxy (void);
furnizeaza rezolutia maxima curenta.
void far setgraphmode (int gmode);
selecteaza alt mod grafic pentru driverul instalat, sterge ecranul si reinitializeaza parametrii
sistemului grafic.
void far restorecrtmode (void);
reface modul video precedent, permite comutarea intre text si grafic.
void far closegraph (void);
inchide modul grafic.
int far graphresult (void);
![Page 6: 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL TEXT Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter](https://reader036.fdocumente.com/reader036/viewer/2022081903/5a7fc0bb7f8b9a571e8bf8b8/html5/thumbnails/6.jpg)
6
furnizeaza codul erorii la o operatie grafica.
Culori
Numarul de culori disponibile este in functie de interfata grafica. De exemplu pentru VGA: 16
culori.
int far getmaxcolor (void);
intoarce codul culorii cu valoarea maxima din paleta.
void far setcolor (int culoare);
stabileste culoarea curenta de desenare.
Exemplu: setcolor (LIGHTBLUE);
int far getcolor (void);
intoarce culoarea curenta de trasare.
void far setbkcolor (int culoare);
int far getbkcolor (void);
analog pentru fond.
unsigned far getpixel (int x, int y);
preia valoarea unui pixel (culoare).
void far putpixel (int x, int y, int culoare);
plaseaza un pixel pe ecran avand o anumita culoare.
Desenare
Coordonatele functiilor de desenare sunt relative la fereastra curenta (initial intregul ecran).
int far getx (void);
int far gety (void);
furnizeaza pozitia curenta pe ecran.
void far moveto (int x, int y);
deplaseaza indicatorul pozitiei curente in punctul (x,y).
![Page 7: 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL TEXT Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter](https://reader036.fdocumente.com/reader036/viewer/2022081903/5a7fc0bb7f8b9a571e8bf8b8/html5/thumbnails/7.jpg)
7
void far moverel (int dx, int dy);
deplasare relativa pe ecran.
void far line (int x1, int y1, int x2, int y2);
void far linerel (int dx, int dy);
void far lineto (int x, int y);
traseaza o linie pe ecran.
void far circle (int x, int y, int raza);
traseaza un cerc.
void far arc (int x, int y, int unghi_init, int unghi_fin, int raza);
traseaza un arc de cerc.
void far ellipse (int x, int y, int unghi_init, int unghi_fin, int saxax, int saxay);
traseaza un arc de elipsa.
void far rectangle (int x1, int y1, int x2, int y2);
traseaza un dreptunghi.
void far drawpoly (int nr_puncte, int far *coord_puncte);
traseaza o polinie (secventa de segmente).
Ferestre
void far cleardevice (void);
sterge intregul ecran si muta indicatorul pozitiei curente in (0,0).
void far setviewport (int x1, int y1, int x2, int y2, int clip);
creaza o fereastra in care se va desfasura in continuare aplicatia grafica. Daca clip ≠0 trunchiaza
ceea ce depaseste limitele ferestrei, iar pentru clip=0 desenul poate depasi fereastra. Coltul stanga
sus al ferestrei devine origine (0,0).
void far clearviewport (void);
sterge fereastra curenta si muta indicatorul in origine.
unsigned far imagesize (int x1, int y1, int x2, int y2);
calculeaza dimensiunea zonei de memorie necesara ferestrei de imagine. Daca imaginea este mai
mare decat 64K - 1 octeti, imagesize returneaza 0xFFFF (-1).
![Page 8: 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL TEXT Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter](https://reader036.fdocumente.com/reader036/viewer/2022081903/5a7fc0bb7f8b9a571e8bf8b8/html5/thumbnails/8.jpg)
8
void far getimage (int x1, int y1, int x2, int y2, void far *buffer):
memoreaza imaginea din fereastra in buffer.
void far putimage (int x1, int y1, void far *buffer, int operator):
copiaza imaginea din buffer pe ecran in fereastra avand coltul stanga sus (x1,y1), folosind
operatorul:
COPY_PUT 0 copiere simpla
XOR_PUT 1 sau-ex
OR_PUT 2 sau
AND_PUT 3 SI
NOT_PUT 4 inversare
Afisare text
void far outtext (char far *text);
afiseaza textul incepand din pozitia curenta.
void far outtextxy (int x, int y, char far *text);
afiseaza textul incepand din pozitia (x,y).
Exemplu: graficul functiei sinus pe intervalul [-π, π]. O problema importanta este
translatarea ferestrei aplicatiei (care utilizeaza coordonate ale aplicatiei) in fereastra ecran (utilizand
coordonate ecran).
0 maxx
0
fereastra
ecran
(gx,gy)
maxy
-π π
1
fereastra
aplicatiei
(x,y)
-1
Relatiile utilizate sunt:
![Page 9: 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL TEXT Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter](https://reader036.fdocumente.com/reader036/viewer/2022081903/5a7fc0bb7f8b9a571e8bf8b8/html5/thumbnails/9.jpg)
9
-coordonata gx:
maxx.............................................2π
gx.................................................x-(-π)
=> π
π
2
)( maxxxgx
⋅+=
-coordonata gy:
maxy............................................2
gy..................................................1-y
=> 2
)1( maxyygy
⋅−=
#include <graphics.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <math.h>
#define PI 3.1415
int main(void)
{
/* autodetectarea interfetei grafice */
int gdriver=DETECT, gmode, errorcode;
int n,i,maxx,maxy,gx,gy;
float x,y;
cout<<"Introduceti nr puncte reprezentare sinus:"; //iostream.h
cin>>n; //iostream.h
/* initializare grafica si variabile locale */
initgraph(&gdriver, &gmode, "");
/* rezultatul initializarii */
errorcode = graphresult();
if (errorcode != grOk) /* cod eroare */
{
cout<<"Eroare grafica: \n"<<grapherrormsg(errorcode);
cout<<"Apasati orice tasta pentru oprire:";
getch(); //conio.h
exit(1); /* incheiere cu un cod de eroare - stdlib.h*/
}
setcolor(getmaxcolor());
maxx=getmaxx(); maxy=getmaxy();
line(0,0,maxx,0); line(maxx,0,maxx,maxy);
line(maxx,maxy,0,maxy); line(0,maxy,0,0);
line(0,maxy/2,maxx,maxy/2);
line(maxx/2,0,maxx/2,maxy);
setcolor(getmaxcolor()-1);
![Page 10: 14. AFISAREA PE ECRAN IN MODUL TEXT - Grupa 1312 · PDF file1 14. AFISAREA PE ECRAN IN MODUL TEXT Ecranul este vazut ca o matrice de 80 coloane x 25 linii de caractere. Fiecare caracter](https://reader036.fdocumente.com/reader036/viewer/2022081903/5a7fc0bb7f8b9a571e8bf8b8/html5/thumbnails/10.jpg)
10
moveto(0,maxy/2);
x=-PI;
for(i=1;i<=n;i++) {
x+=2*PI/n; y=sin(x); //math.h
gx=(int)(maxx*(PI+x)/2/PI);
gy=(int)((1-y)*maxy/2);
lineto(gx,gy);
}
/* incheiere mod grafic */
getch();
closegraph();
return 0;
}