Secretele textului turbo pascal în modul grafic

Blog → Secretele lui Turbo Pascal: text în modul grafic. Partea 1

În acest articol, eu vă va prezenta pe scurt caracteristicile interfețelor de programare a textului în EGA / VGA, utilizate în Turbo Pascal 6.0 pe programe de limbă moduri grafice. Cei care sunt familiarizați cu Turbo Pascal, va fi mult mai ușor de înțeles codul furnizat în cadrul acestui articol, ci și pentru deținerea alte limbaje de programare, citind articolele pot fi interesante și informative. Deci, să nu întârziem introducerea, dar să trecem imediat la fondul întrebării.







Nu voi atinge procedurile de text standard din modulul GRAPH.TPU, descrierea detaliată a acestora, pe care oricine o poate găsi în literatura de specialitate. Observ doar că apariția procedurilor date în această secțiune este cauzată de problema prozaică care apare atunci când mai multe mesaje text sunt afișate în mod repetat folosind procedurile standard OutTextXY și OutText, în aceeași poziție pe ecran. Cui nu era necesar să se evite suprapunerea unei linii pe altul înainte de fiecare ieșire de text următoare pentru a șterge ecranul de la mesajele anterioare. Totul ar fi bine, dar când acest lucru se face adesea, de exemplu, atunci când sunt afișate coordonatele curente ale cursorului mouse-ului, efectul de pâlpâire se produce întotdeauna. Motivul pentru aspectul său este că procedurile OutTextXY și OutText atrag doar pixelii simbolului însuși, lăsând pixelii de fundal în matricea simbolului neschimbați. Cea mai bună cale de ieșire din astfel de situații - schimbare la afișarea textului de pe ecran, împreună cu pixelii care formează caracterul în sine, iar pixelii de fundal în matricea de caractere. În această secțiune, vă voi arăta cum să faceți acest lucru.

Simbolul de pe ecran constă din pixeli aranjați într-o anumită ordine în cadrul matricei dreptunghiulare a simbolului. Se trasează linia de linie din linia de sus; înălțimea sa este determinată de numărul de rânduri din matrice, iar lățimea este, de regulă, de 8 pixeli sau 1 octet (aceste proceduri sunt calculate exact pentru această lățime). Simbolurile simbolurilor sunt conținute în așa-numita tabelă de descriere a simbolurilor (TOC). Fiecare octet al tabelului este un șir de caractere cu șir de biți, astfel încât fiecare simbol din TOC este reprezentat de numărul de octeți egal cu înălțimea simbolului. Simbolurile din tabel sunt aranjate secvențial, în funcție de codul lor ASCII, prin urmare este ușor să se calculeze dispunerea simbolului față de începutul TOC (înălțimea este înmulțită cu codul de simbol).







Fiecare bit set în modelul de biți indică prezența unui pixel de imagine (adică pixel inclusă în simbolul însuși) în șirul corespunzător simbolului matricei (a se vedea desenul -. Încheiat în conformitate cu conținutul TOC, dimensiunea matricei pixelilor de simboluri 8x8).

Secretele textului turbo pascal în modul grafic

Unitate GrafText;
interfață

utilizează Dos, VC_Graph;
Tip GrfFnt = array [l..l] octet;

Var TextForeColor, TextBackColor, TextLogGlb. octet;
SegFontTabde, OfsFontTable. cuvânt;
CharRow. octet;
FontLoaded. boolean;
FointsBIOS. octet absolut $ 40: $ 85;
GrafFont. ^ GrfFnt;

Const ROMFont8x8 - 1;
ROMFontl4x8 - 2;
ROMFontl6x8 - 3;
Rus8x8 - 4;
FileFont - 5;
RussianFont: matrice [1..8 * 256] de octet

VSetFonlType (2, '');
VSetTextColor (15,9,0);
VOutTextXY (l () 4,25,
'Procedură VSetTextColor (ForeColor, BackColor, TextLog);');
Pentru I: = 0 la 15 nu
începe

VSetTextColor (1,15-I, 0);
VOutTextXY (104,80 + I * 15,
'Procedură VSetTextColor (ForeColor, BackColor, TextLog);');

readln;
ClearViewPort;
VSetTextColor (15,9,0);
VOutTextXY (104.25,
'Procedura VOutCharXY (CharCode, X, Y, ForeColor, BackColor');
Pentru I: = 0 la 15 nu
Pentru J: = 0 la 15 nu
începe

Este posibil pentru a spori capacitatea procedurilor, de exemplu, le rescrie la caractere de ieșire de lățimi variabile sau pentru a face lectura ca bitmapuri de TOC, au fost deplasate spre dreapta printr-un anumit număr de pixeli, sau pentru generarea de caractere italice grași. Oricare dintre aceste funcții va crește eficiența și flexibilitatea generatorului de caractere software, dar va complica codul sursă și, în cele din urmă, va încetini acest lucru.







Trimiteți-le prietenilor: