Einzelnen Beitrag anzeigen

Benutzerbild von arcticwolf
arcticwolf

Registriert seit: 3. Aug 2021
Ort: Erfurt
41 Beiträge
 
Delphi 11 Alexandria
 
#42

AW: Konsolenanwendung - crt.pas - Console Library

  Alt 25. Jul 2023, 13:45
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;
Wolfgang
coding is an art - code for people not for machines
  Mit Zitat antworten Zitat