Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bei einem Komandozeilenprogramm in der gleichen Spalte... (https://www.delphipraxis.net/46340-bei-einem-komandozeilenprogramm-der-gleichen-spalte.html)

RedDust 23. Mai 2005 09:58


Bei einem Komandozeilenprogramm in der gleichen Spalte...
 
Ich schreibe gerade ein kleines Komandozeilenprogramm das Dateien verschlüsselt. Nun möchte ich eine Prozentanzeige mit dem Fortschritt programmieren. Soll ungefähr so aussehen:

Delphi-Quellcode:
In bearbeitung... 0%
Delphi-Quellcode:
In bearbeitung... 1%
Delphi-Quellcode:
In bearbeitung... 2%
u.s.w.

Allerdings alles in einer Zeile.

marabu 23. Mai 2005 10:11

Re: Bei einem Komandozeilenprogramm in der gleichen Spalte..
 
Probiere es mal so:

Delphi-Quellcode:
Write(con, #13, 'In Bearbeitung ... ', iProzent);
Grüße vom marabu

BKempf 23. Mai 2005 10:15

Re: Bei einem Komandozeilenprogramm in der gleichen Spalte..
 
Delphi-Quellcode:
gotoxy(1, WhereY-1);
writeln ('Bearbeitet: ', Prozentsatz:3, '%');

RedDust 23. Mai 2005 10:22

Re: Bei einem Komandozeilenprogramm in der gleichen Spalte..
 
Zitat:

Zitat von BKempf
Delphi-Quellcode:
gotoxy(1, WhereY-1);
writeln ('Bearbeitet: ', Prozentsatz:3, '%');

Das hab' ich schon ausprobiert (gotoxy), aber Delphi kent den Befehl wohl nicht mehr.

Zitat:

Zitat von marabu
Delphi-Quellcode:
Write(con, #13, 'In Bearbeitung ... ', iProzent);

Das werd' ich gleich mal ausprobieren.
Kleine Frage noch, für was steht das "con, #13"???
IMHO steht das con für Tastatur und das #13 für die Entertaste. :wiejetzt:

turboPASCAL 23. Mai 2005 10:49

Re: Bei einem Komandozeilenprogramm in der gleichen Spalte..
 
Hi, eine Lösung gibt es nur noch auf Umwegen...

Delphi-Quellcode:
program Test;

{$APPTYPE CONSOLE}

uses Windows, SysUtils;

var
 ConHandle : THandle; // Handle to console window
 Coord     : TCoord; // To store/set screen position
 MaxX, MaxY : Word;   // To store max window size
 NOAW      : LongInt;

//-----------------------------------------
//      Get handle to console output
//-----------------------------------------
function GetConOutputHandle : THandle;
begin
  Result := GetStdHandle(STD_OUTPUT_HANDLE)
end;

//-----------------------------------------
//        Position cursor to X, Y
//-----------------------------------------
procedure GotoXY(X, Y : Word);
begin
  Coord.X := X; Coord.Y := Y;
  SetConsoleCursorPosition(ConHandle, Coord);
end;
{
procedure Cls;
begin
  Coord.X := 0; Coord.Y := 0;
  FillConsoleOutputCharacter(ConHandle, ' ', MaxX * MaxY, Coord, NOAW);
  GotoXY(0, 0);
end
}
procedure Init;
begin
  // Get console output handle
  ConHandle := GetConOutputHandle;
  // Get max window size
  Coord := GetLargestConsoleWindowSize(ConHandle);
  MaxX := Coord.X;
  MaxY := Coord.Y;
end;

var i: byte;

begin
  // Initialize global variables
  Init;

  //Cls;

  Coord.X := 0; Coord.Y := 0;
  // Console Code Page API is not supported under Win95 - only GetConsoleCP
  Writeln('Console Code Page = ', GetConsoleCP);
  Writeln('Max X=', MaxX,' Max Y=', MaxY);
  Writeln('----------------------------------------------------');
  writeln;

  write('Teste... ');

  for i:=1 to 100 do
  begin
    gotoxy(12,4);
    write(i, ' %');
    sleep(100);
  end;
  writeln;
  writeln('press ENTER to close Prg.')
  Readln;
end.
Siehe auch URL: http://www.geocities.com/SiliconVall...6/con_apps.htm

MfG.

marabu 23. Mai 2005 10:55

Re: Bei einem Komandozeilenprogramm in der gleichen Spalte..
 
Hallo Mario,

CON ist der reservierte Name für den Console-I/O-Channel. #13 ist das ASCII control character CR (carriage return) und setzt den Cursor an den Anfang der Ausgabezeile zurück. Damit du mit CON arbeiten kannst, musst du dir einen file dafür besorgen:

Delphi-Quellcode:
var
  con: TextFile;

begin
  Assign(con, 'con');
  Rewrite(con);
  Write(con, #13, 'In Bearbeitung... ', iProzent, '%');
  CloseFile(con);
end.
marabu

turboPASCAL 23. Mai 2005 11:06

Re: Bei einem Komandozeilenprogramm in der gleichen Spalte..
 
Hey, Tolle Lösung..
MfG.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.

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