Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Wie kann ich eine Konsolenanwendung leeren? (https://www.delphipraxis.net/156516-wie-kann-ich-eine-konsolenanwendung-leeren.html)

YXCVBNM1 4. Dez 2010 22:23

Wie kann ich eine Konsolenanwendung leeren?
 
hallo,

ich bin ein absoluter Anfänger in Delphi und ich will eine Konsolenanwendung programmieren bei der sich die konsole leert wenn eine Bedingung erfüllt ist. Ich habe im Internet bereits lange nach einer Lösung gesucht, aber alle vorgeschlagenen Lösungen haben nicht funktioniert. Warscheinlich habe ich wegen meinem noch geringen wissen einige Programmzeilen vergessen. Da ich aber trotzdem gerne wissen würde wie das geht, habe ich unten mal ein paar extrem primitive programmezeilen eingetippt. Könnte mir die vielleicht jemand so umschreiben, dass sie funktionieren?

uses
SysUtils;

VAR
a:integer;

begin
readln(a);
writeln(a);
If a=0 then //hier sollte dann der Inhalt der Konsole geleert werden
readln;
end;

Danke schonmal im Voraus!

Namenloser 4. Dez 2010 22:32

AW: Wie kann ich eine Konsolenanwendung leeren?
 
Willkommen in der DP :dp:
Such mal bei Google nach der Unit "crt32.pas", diese stellt u.a. die Funktion
Delphi-Quellcode:
ClrScr
bereit, womit sich der Bildschirminhalt löschen lässt. Lade die Unit herunter und lege sie im Lib-Verzeichnis von Delphi oder in deinem Projektverzeichnis ab, und füge dann "crt32" zum uses-Abschnitt in deinem Quellcode hinzu.

hathor 4. Dez 2010 22:34

AW: Wie kann ich eine Konsolenanwendung leeren?
 
cls

Namenloser 4. Dez 2010 22:37

AW: Wie kann ich eine Konsolenanwendung leeren?
 
Zitat:

Zitat von hathor (Beitrag 1066246)
cls

Den Befehl gibt es aber unter Delphi nicht.

YXCVBNM1 4. Dez 2010 22:45

AW: Wie kann ich eine Konsolenanwendung leeren?
 
danke für die schnelle hilfe. Mit der Lösung NamenLozer geht es. Danke :)

vergessen 4. Dez 2010 23:01

AW: Wie kann ich eine Konsolenanwendung leeren?
 
Zitat:

Zitat von NamenLozer (Beitrag 1066245)
Willkommen in der DP :dp:
Such mal bei Google nach der Unit "crt32.pas", diese stellt u.a. die Funktion
Delphi-Quellcode:
ClrScr
bereit, womit sich der Bildschirminhalt löschen lässt. Lade die Unit herunter und lege sie im Lib-Verzeichnis von Delphi oder in deinem Projektverzeichnis ab, und füge dann "crt32" zum uses-Abschnitt in deinem Quellcode hinzu.

Das Problem ist ja schon gelöst, aber mit write (statt writeln) und readln sieht's noch ein wenig hübscher in der Konsole aus:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  crt32,
  SysUtils;

var
  i, a: integer;

begin
  repeat
    Write('Ihre Eingabe: ');
    Readln(a);
  until a = 0;
  //for i := 0 to 500 do Writeln('');
  //500 Leerzeilen sollten für ein cls ohne crt32 reichen ;-)
  ClrScr;
  Write('Und wie jetzt weiter? ');
  Readln;
end.

hathor 4. Dez 2010 23:35

AW: Wie kann ich eine Konsolenanwendung leeren?
 
Ohne zusätzliche Units geht es so:

Delphi-Quellcode:
procedure ClrScr;
var tc :tcoord;
  nw : DWORD;
  cbi : TConsoleScreenBufferInfo;
  HConsoleOutput:thandle;
  TextAttr : Word;
begin
  TextAttr := cbi.wAttributes;
  HConsoleOutput := GetStdHandle(STD_OUTPUT_HANDLE);
  getConsoleScreenBufferInfo(HConsoleOutput,cbi);
  tc.x := 0;
  tc.y := 0;
  FillConsoleOutputAttribute(HConsoleOutput,textattr,cbi.dwsize.x*cbi.dwsize.y,tc,nw);
  FillConsoleOutputCharacter(HConsoleOutput,#32,cbi.dwsize.x*cbi.dwsize.y,tc,nw);
  setConsoleCursorPosition(hconsoleoutput,tc);
end;

Bummi 4. Dez 2010 23:38

AW: Wie kann ich eine Konsolenanwendung leeren?
 
@hathor
das wäre dann 1:1 der Auszug der Prozedur :
Delphi-Quellcode:
unit crt32;
{# freeware}
{# version 1.0.0127}
{# Date 18.01.1997}
{# Author Frank Zimmer}
{# description
 Copyright © 1997, Frank Zimmer, 100703.1602@compuserve.com
 Version: 1.0.0119
 Date:   18.01.1997
............snipp.........

hathor 4. Dez 2010 23:43

AW: Wie kann ich eine Konsolenanwendung leeren?
 
Zitat:

Zitat von Bummi (Beitrag 1066255)
@hathor
das wäre dann 1:1 der Auszug der Prozedur :
Delphi-Quellcode:
unit crt32;
{# freeware}
{# version 1.0.0127}
{# Date 18.01.1997}
{# Author Frank Zimmer}
{# description
 Copyright © 1997, Frank Zimmer, 100703.1602@compuserve.com
 Version: 1.0.0119
 Date:   18.01.1997
............snipp.........

Falsch - vergleiche mal genau!

Delphi-Quellcode:
procedure ClrScr;
var tc :tcoord;
  nw : DWORD;
  cbi : TConsoleScreenBufferInfo;
  HConsoleOutput:thandle; // eingefügt
  TextAttr : Word; // eingefügt
begin
  TextAttr := cbi.wAttributes; // eingefügt
  HConsoleOutput := GetStdHandle(STD_OUTPUT_HANDLE); // eingefügt
  getConsoleScreenBufferInfo(HConsoleOutput,cbi);
  tc.x := 0;
  tc.y := 0;
  FillConsoleOutputAttribute(HConsoleOutput,textattr,cbi.dwsize.x*cbi.dwsize.y,tc,nw);
  FillConsoleOutputCharacter(HConsoleOutput,#32,cbi.dwsize.x*cbi.dwsize.y,tc,nw);
  setConsoleCursorPosition(hconsoleoutput,tc);
end;

Bummi 4. Dez 2010 23:48

AW: Wie kann ich eine Konsolenanwendung leeren?
 
@hathor
me culpa, mea maxima culpa :pale:

vergessen 5. Dez 2010 00:01

AW: Wie kann ich eine Konsolenanwendung leeren?
 
Und ich habe aus der crt32.pas für Delphi7personal aus

interface
uses
windows,
messages,
Porting;

das Porting;

herauslöschen müssen ;-)

Edith vermisst eine extrem leistungsstarke Beschleunigung des einfach lesbaren "Pascal-Kots" durch himitsu via Assembler oder unlesbare Pascal-Syntax-Optimierung im C-Stil ;-)

himitsu 5. Dez 2010 00:39

AW: Wie kann ich eine Konsolenanwendung leeren?
 
später vielleicht...

Delphi-Quellcode:
TextAttr := cbi.wAttributes; // eingefügt
.
Laß diese Variable weg und nutze da weiter unten direkt
Delphi-Quellcode:
cbi.wAttributes
.

Der Grund:
Der Inhalt von
Delphi-Quellcode:
cbi.wAttributes
ist zu diesemzeitpunkt noch undefiniert, da cbi erst später befüllt wird (siehe getConsoleScreenBufferInfo).

vergessen 5. Dez 2010 01:51

AW: Wie kann ich eine Konsolenanwendung leeren?
 
Zitat:

Zitat von himitsu (Beitrag 1066260)
später vielleicht...

Delphi-Quellcode:
TextAttr := cbi.wAttributes; // eingefügt
.
Laß diese Variable weg und nutze da weiter unten direkt
Delphi-Quellcode:
cbi.wAttributes
.

Der Grund:
Der Inhalt von
Delphi-Quellcode:
cbi.wAttributes
ist zu diesemzeitpunkt noch undefiniert, da cbi erst später befüllt wird (siehe getConsoleScreenBufferInfo).

Geh' doch BITTE 'mal schafen, lieber himitsu!

Edith spendiert dem "schafen" noch ein "L" zum Schlafen


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz