Kezdőoldal » Számítástechnika » Programozás » Meg lehet azt Pascalban...

Meg lehet azt Pascalban oldani, hogy úgy írjak karaktert a sor végére, hogy ne ugorjon a kurzor a következő sorra?

Figyelt kérdés
Tehát pl. gotoxy(80, 25); után akarok írni egy 'a' karaktert, de nem akarom, hogy sortörést csináljon utána, mert akkor eltűnik az első sorom, mivel az utolsó sorba írtam és a Pascal automatikusan sort tör, ha az adott sorban nincs több hely.
2012. jan. 24. 20:50
 1/7 coopper ***** válasza:

Szia.


Igen ha használod a képernyőmemóriát és ugy iratod bele amit akarsz :


Var Video : array [1..80,1..25,1..2] of char absolute $B800:000 ;


Begin

     clrscr ;

writeln ('bbbb');

Video[80,25,1]:='a';

End.


Ha windows alatt használod akkor :


Var Video : array [1..80,1..50,1..2] of char absolute $B800:000 ;


és

Video[80,50,1]:='a';


Sok sikert.

Üdv.

2012. jan. 24. 21:34
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:
Elmagyaráznád ennek a működését? Mi az a char absolute? Meg ami utána van?
2012. jan. 24. 21:38
 3/7 2xSü ***** válasza:

A char karakter típust jelöl.

Az absolute az adott tömböt egy abszolút memóriacímen fogja kezelni. A karakteres képernyő karakterei és szín információi egy adott memóriaterületen érhetők el: $B800:0000 -tól kezdve.


Tehát az így deklarált tömb közvetlenül a karakteres képernyő karaktereit és színeit fogja tartalmazni.


Ha a tizedik oszlop, ötödik sorába akarsz egy „x” karakter tenni, akkor:

Video[10,5,1]:='x';

Ha ugyanennek a helynek a színét akarod változtatni, akkor 16 háttérszín és 16 előtérszín áll a rendelkezésedre

Video[10,5,2]:=chr(hatterszin*16 + eloterszin);

(A chr azért kell, mert ez karaktertömb, és nem egész számokat tartalmazó tömb.)


(Annyi sejtésem még van, hogy lehet, hogy az előző válaszoló felcserélte az x és y koordinátákat, tehát előbb van a sor és azon belül az oszlop:

Var Video : array [1..25,1..80,1..2] of char absolute $B800:0000;

2012. jan. 24. 21:48
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:
Köszönöm szépen mindkét választ. Még egyetlen dolog van, amit nem értek, hogy konkrétan a $B800:0000 mit jelöl? Miért pont ezt kellett odaírni?
2012. jan. 24. 21:57
 5/7 A kérdező kommentje:
Igen, már értem, köszönöm még egyszer!
2012. jan. 24. 21:58
 6/7 coopper ***** válasza:

Jogos a felvetés, valóban forditva vannak először sorok száma aztán az oszlopok.


A neten ezt találtam :


Screen:ARRAY[0..24,0..79] OF WORD ABSOLUTE = $B8000


Tehát word-ként kezeli. Ez sem rossz, de egyszerübb karakteresként vagy bájtosként kezelni. A karakterest (chr) fent megtalálod itt a bájtos :


Video:ARRAY[1..25,1..80,1..2] OF byte ABSOLUTE $B8000:0000;


De akkor értékadásnál kell a Karakteres tipust átalakitani bájtá :


Video[25,80,1]:=ord ('a');

illetve a szine :

Video[25,80,2]:=hatterszin*16 + eloterszin ;


(az ord függvény az egy sorszámot ad vissza, ha egy ascii karaktert irsz be neki akkor az ASCII kódját kapod vissza, tehát az ord ('a') értéke : 97-nek felel meg.


Sok sikert.

Üdv.

2012. jan. 24. 22:04
Hasznos számodra ez a válasz?
 7/7 coopper ***** válasza:

"Még egyetlen dolog van, amit nem értek, hogy konkrétan a $B800:0000 mit jelöl? Miért pont ezt kellett odaírni?"


Itt megtalálod a Video memória felosztását (sajnos angol nyelvű) : [link]


Üdv.

2012. jan. 24. 22:17
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!