Hi Wolfgang,
(wie) kann man im Fenster der Konsolenanwendung zurückblättern, wenn der Inhalt überläuft?
Ich verwende Deine Bibliothek für Ausgabe der Ergebnisse umfangreicher Berechnungen, die mehrere 100 Zeilen Kolonnen voller Zahlen liefern.
Leider sehe ich nur die letzten paar Zeilen davon. Kann man einen Scrollbar aktivieren?
Hallo Andreas,
der ursprüngliche Zweck der Library ist/war eine MsDos-Anwendung die mit TurboPascal programmiert wurde unter Windows laufen zu lassen. Eine Dos-Anwendung war, soweit ich mich erinnere, immer auf eine Bestimmte Größe fixiert, meist (80 x 25) oder auch mal (40 x 25, 80 x 43, u.s.w.). Da gab es auch keinen Scrollbalken. Insofern ist die Library primär auf feste Fenstergrößen optimiert. Das betrifft einmal die Größe des Konsolefensters (als Canvas Basis = Console.Window) für die Ausgabe und dann innerhalb dieses Konsolenfensters auf Ausgabefenster (Crt.Window).
Mir fallen spontan 2 Möglichkeiten ein, den von Dir angestrebten Zweck abzubilden:
1) ScreenBuffer vergrößern
2) Eine TStringList verwenden
Ich habe ein paar Dingen an der Library geändert/erweitert und habe das Demo11 hinzugefügt welches die beiden Möglichkeiten zeigen soll.
Zu 1) ScreenBuffer vergrößern
- Mit Console.Buffer(x,y) die Puffergröße auf die gewünschte Größe erweitern
- Für die Ausgabe sollte/muss "WriteConsole" und/oder "WritelnConsole" verwendet werden, weil die normalen Ausgaben (Write/Writeln) auf feste Fenstergrößen abgestimmt sind
- Scrollen mit Console.ReadkeyScroll
Delphi-Quellcode:
Console.Buffer(120,1500);
WritelnConsole('Text 1');
...
WritelnConsole('Text X');
Console.ReadkeyScroll(Key);
Zu 2) Eine TStringList verwenden
Die zweite Methode ist eleganter und verwendet eine TStringListConsole.
Den Ausgabetext einfach in die Strings schreiben und dann mit Show ein "Scroll-Fenster" erzeugen.
Das hat auch den Vorteil, dass man die Ausgabe noch anderweitig verwenden kann, zum Beispiel um die Ausgabe als Datei zu speichern (siehe Demo).
Delphi-Quellcode:
Var
Strings : TStringListConsole;
begin
Strings := TStringListConsole.Create;
Strings.Add('Text 1');
...
Strings.Add('Text X');
// Optional die Größe des Scroll-Fensters hier festlegen
// Console.Window(120,60);
Strings.Show('Show my Strings');
Strings.Free;