Diskuze: Pascal - mazání části obrazovky
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Staci se nejak dostat k bufferu obrazovky a tam muzes upravovat jednotlivy
znaky. Jak se to dela v Pascalu z hlavy netusim, google pomuze
Vytvoř si stránkový buffer do kterého zapisuj vše co pak bys chtěl vypisovat na stránku. Po vymazání obrazovky pak můžeš na obrazovku vypsat ze stránkového bufferu vše co potřebuješ a jak ty chceš.
V Pascalu (pro DOS) se do bufferu obrazovky v textovém režimu dostávalo přímým zápisem do videopaměti, která je namapovaná na fyzické adrese 0xB8000. Jedná se o posloupnost dvoubajtových hodnot, každá odpovídá jednomu znaku obrazovky (zleva doprava a odshora dolů). Jeden bajt kóduje znak, druhý jeho barvu (pozadí, popředík, blukání).
Pascal pomocí klíčového slova absolute dovoluje umístit proměnnou na určitou adresu. Tudíž pro pohodlný zápis do videopaměti jsi mohl definovat něco jako:
Var
screen : Array [0..24, 0..79] Of Word absolute $B800:$0000;
Pro textový režim 80 sloupců a 25 řádků pak prvním indexem udáváš řádek, druhým sloupec.
Jak ale říkám, tohle ti bude fungovat dobře pod DOSem, popř. v jeho emulátoru (ať už NTWDM či třeba DOSBox), ale nemyslím, že by klasická konzole Windows toto chování uměla emulovat. Ve FreePascalu ti to myslím taky fungovat nebude, protože ten nepracuje v reálném řežimu procesoru (ani ve v tom virtuálním, ve kterém jinak Windows uměly emulovat prostředí pro DOSové aplikace). Nejschůdnějším řešením asi bude udělat GotoXY a pak provést mazání třeba vyplněním mezerami.
V normálních (rozuměj *nixových) terminálech fungují tzv. escape sekvence, což jsou posloupnosti znaků začínající znakem s kódem 27 kódující různé operace s terminálem. Jednou z nich je třeba "Smaž vše od pozice kurzoru do konce řádku", což by bylo přesně to, co potřebuješ. Ale myslím, že Windowsí konzole takové sekvence nepodporuje (možná na Windows 10 ano, ale pochybuju, že třeba na W7).
Zobrazeno 4 zpráv z 4.