Code-Beispiel
Bildschirm speichern und wiederherstellen (Text)
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | ytwinky | 29.03.2012 |
Gelegentlich soll die Arbeit auf der Befehlszeile dort fortgesetzt werden, wo sie vor einem Programmaufruf unterbrochen wurde. Das kann mit den Routinen im folgenden Programm erledigt werden, die auch eine ggfs. farbige (Text-)Ausgabe wiederherstellen:
#include "crt.bi"
#Define ArgC ((*__p___argc())-1)
#undef GoTo 'Jojo hat Recht, danke ;-))
#ifndef False
Const False=0, True=Not False
#endif
#define Lines 1
#define Columns 2
#define Letter 0
#define Colour 1
'+-----------------------------------------------------------------------------------+
'| Header: Bestimmen der Übergabeparameter |
'| AnzeigeCheck:|Il1 sind:Alt-0124, Großes i, kleines L, Eins „ä”öüáߎę֚Üñ±ø°¸©|
Const Autor="SaveScreen.Bas v0.99 ¸2011 by ytwinky, MD"' |
'| (Tastenkombination: keine) |
'| Zweck : Umrechner für die verschiedenen Zahlensystem die FreeBASIC beherrscht |
'| Getestet mit dem aktuellen fbc und dem aktuellen FBEdit |
'+-----------------------------------------------------------------------------------+
'(Anmerkung zu den Sonderzeichen: zuerst steht das DOS-Zeichen, danach das Windowszeichen)
Declare Sub RestoreScreen()
Declare Sub SaveScreen()
Type ScreenRec
As Integer Char, ForeGround, BackGround
End Type
Var z=HiWord(Width), s=LoWord(Width)
Var ForeGround=Screen(z, s, Colour) And &h0F, BackGround=(Screen(z, s, Colour) And &hF0)\16
Dim Shared StartScreen(0 To z, 0 To s) As ScreenRec
Color 12, 1
Print "Test"
Color 10, 14
Print "Nochn Test vg=" & LoWord(Color) & " hg=" & HiWord(Color)
Color ForeGround, BackGround
SaveScreen()
Print "Die nun folgende Ausgabe ist nachher wieder weg.."
Print "Zeilen:" &z &!"\tSpalten:" &s
Print "Wenn einer, der mit Mhe kaum"
Print "geklettert ist auf einen Baum"
Print "schon meint, daá er ein Vogel w„r',"
Print "so irrt sich der.."
Print " (Wilhelm Busch)"
GetKey 'is better than Sleep, coz it clears the keyboardbuffer^^
RestoreScreen()
End
Sub SaveScreen()
Var CurLin=CsrLin, CurCol=Pos(0)
StartScreen(0, 0).ForeGround=Screen(CurLin, CurCol, Colour) And &h0F
StartScreen(0, 0).BackGround=(Screen(CurLin, CurCol, Colour) And &hF0)\16
StartScreen(0, 1).ForeGround=CurLin-1 'current CursorLine
StartScreen(0, 1).BackGround=CurCol 'current CursorColumn
For CurLin=1 To UBound(StartScreen, Lines)
For CurCol=1 To UBound(StartScreen, Columns)
StartScreen(CurLin, CurCol).Char=Screen(CurLin, CurCol,Letter)
StartScreen(CurLin, CurCol).ForeGround=Screen(CurLin, CurCol, Colour) And &h0F
StartScreen(CurLin, CurCol).BackGround=(Screen(CurLin, CurCol, Colour) And &hF0)\16
Next
Next
End Sub
Sub RestoreScreen()
Var NoCursor=0, ShowCursor=1 'only to show what Locate does..
For CurLin As Integer=1 To UBound(StartScreen, Lines)
Locate CurLin, 1, NoCursor
For CurCol As Integer=1 To UBound(StartScreen, Columns)
Color StartScreen(CurLin, CurCol).ForeGround, StartScreen(CurLin, CurCol).BackGround
If (CurCol=UBound(StartScreen, Columns))And(CurLin=UBound(StartScreen, Lines)) Then
Print Chr(StartScreen(CurLin, CurCol).Char); 'ooops, only Print can handle lower right corner correctly..
Else
putchar StartScreen(CurLin, CurCol).Char ' wow, speeds up this program dramatically ;-))
EndIf
Next
Next
Locate StartScreen(0, 1).ForeGround+1, StartScreen(0, 1).BackGround+1, ShowCursor 'Restore the position..
Color StartScreen(0, 0).ForeGround, StartScreen(0, 0).BackGround '..and the colors
End Sub
Einen kleinen 'Fehler' hat das Programm jedoch, den finden aber nur Kenner der Befehlszeile und die anderen wird er nicht stören ;-))
Für dieses Programm gilt die RTFM-Lizenz^^
[Edit am 29.03.2012]
RestoreScreen() war echt langsam und so habe ich es mir nochmal vorgenommen..
Mit PutChar aus der StdIO.bi(die auch per Crt.Bi eingebunden wird) geht das alles viel schneller(im Test 3x so schnell..)
PutChar kann aber das letzte Zeichen rechtsunten nicht 'befriedigend' ausgeben, doch dafür gibt es ja Print;
[/Edit]
Fröhliches ScreenSaven und -Restoren
Gruß
ytwinky
Zusätzliche Informationen und Funktionen |
- Das Code-Beispiel wurde am 30.01.2011 von ytwinky angelegt.
- Die aktuellste Version wurde am 29.03.2012 von ytwinky gespeichert.
|
|