Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi etwas an zeilenende in der Console schreiben (https://www.delphipraxis.net/86629-etwas-zeilenende-der-console-schreiben.html)

easteregg 16. Feb 2007 14:20


etwas an zeilenende in der Console schreiben
 
Heyho!

wie geht das denn nun? ich möchte für meine consolen ausgabe was an das ende der jeweiligen zeile schreiben, weis ja aber nicht, wie groß die console ist.

zur verdeutlichung, hier nen screenshot mit wget als beispiel unter linux!

http://verfriemelt.org/delphi-praxis...de_console.jpg

und da wget, dass ja auch unter windows so macht muss das ja irgendwie gehen! :)
nur die frage ist, wie

danke schonmal für eure hilfe!

Luckie 16. Feb 2007 14:29

Re: etwas an zeilenende in der Console schreiben
 
Ich habe von Olli eine Include-Datei mit den entsprechenden Konsolen-Funktionen:
http://www.michael-puff.de/dirindex....orte/Assarbad/ -> ConTools.inc

easteregg 16. Feb 2007 14:37

Re: etwas an zeilenende in der Console schreiben
 
ich seh ehrlichgesagt nicht so richtig in dem source durch (meine kenntnisse sind noch stark begrenzt!)
also ich binde das file ja jetzt ganz normal in ne neue unit (cmd_functions zb) ein und setz die mit in meine uses clauses rein.
das is mir klar soweit, aber wie genau bekomm ich mit dadrüber die breite raus, um zu entscheiden zu welchem xwert ich mit gotoxy gehen muss?

edit: ich stell grad fest, dass man das auch nicht als normale unit einfach reinkopieren kann! :|

Die Muhkuh 16. Feb 2007 14:48

Re: etwas an zeilenende in der Console schreiben
 
Delphi-Quellcode:
{$INCLUDE ConTools.inc}
;-)

easteregg 16. Feb 2007 14:54

Re: etwas an zeilenende in der Console schreiben
 
ah danke sehr ;)
das schreiben funktioniert jetzt an die stelle wo es hinsoll, aber wie gesagt hab ich noch keine ahnung wie ich die maximale anzahl des consolenfenster rausbekomme!

ich könnte einfach nen zeichen immer durchlaufen lassen, und mir über die whereY immer überprüfen ob der eine zeile nach unten gerutscht ist, aber das erscheint mir irgendwie unnötig aufwendig!

shmia 16. Feb 2007 14:55

Re: etwas an zeilenende in der Console schreiben
 
Zitat:

Zitat von Die Muhkuh
Delphi-Quellcode:
{$INCLUDE ConTools.inc}

Vielleicht sollte man einfach aus dem Includefile eine normale Unit machen.
Ich bin nicht sicher, ob das Includefile gegenüber einer Unit überhaupt einen Vorteil in Bezug auf die Exe-Größe bringt.
Sind die kleinen Ersparnisse bei den Linker-Symbolen die Nachteile (nur einmal benutzbar, kein sauberes Interface) wirklich wert?

turboPASCAL 16. Feb 2007 15:07

Re: etwas an zeilenende in der Console schreiben
 
Der Umgang mit dieser Includedatei ist sehr einfach.

Siehe Beispiel:
Delphi-Quellcode:
program Dingsda;

{$APPTYPE CONSOLE}

uses
  Windows, Messages;

var
  MyText: String;
  i: Byte;

{$I 'C:\Dokumente und Einstellungen\Admin-User\Desktop\ConTools.inc'}

begin
  // Textfarbe Weiss auf Schwarz setzen
  //(Max Wert 255 ab 128 Blinkende Zeichen im 16 Bit DOS-Mode)
  SetTextAttribute(15);

  //Cursor setzen
  GotoXY(10, 10);
  // Text Ausgeben ohne neue Zeile zu setzen:
  Write('Bitte Text eingeben: ');
  // Textfarbe auf def. Wert setzen
  SetTextAttribute(7);
  //auf Texteingabe warten/lesen
  GotoXY(10, 11);
  read(MyText);

  // Textausgabe 5 x
  for i := 0 to 4 do
  begin
    GotoXY(10, 14);
    ClrEol; //Clear End of Line
    MyText := MyText + Chr(65 + i); // :-)
    Write(i:4,' -> ', MyText);

    Sleep(50);
  end;

  GotoXY(1, 24);

  // Konsole Beenden.
  ConsoleEnd;
end.
Zitat:

Zitat von shmia
Ich bin nicht sicher, ob das Includefile gegenüber einer Unit überhaupt einen Vorteil in Bezug auf die Exe-Größe bringt.

Nun ja, ein zwei Byte. :mrgreen:

easteregg 16. Feb 2007 15:18

Re: etwas an zeilenende in der Console schreiben
 
hey danke, dein beispiel hat mir paar nette anregungen gegeben!
aber ich hab noch nicht ganz raus, wie ich das ende von einer zeile nun bestimmen kann (also wie breit die zeile ist)

edit: gibts eigentlich irgendwo ne tabelle wo die ganzen farben selbst aufgelistet sind?

ste_ett 16. Feb 2007 15:22

Re: etwas an zeilenende in der Console schreiben
 
Das Ganze geht auch ohne zusätzliche, eingebundene Funktionen. :)

- edit -

Die Konsole besteht aus 80x25 Zeichen unter Windows.
Man kann also mit einer Breite von 80 rechnen.

kurzes Bsp. (QnD!):
Delphi-Quellcode:
program ProgressApp;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  SlashArray: array[0..3] of Char = ('-', '\', '|', '/');

var
  i: Integer;
  sOut: String;

begin
  Writeln('********************************************************************************');

  for i := 0 to 100 do
  begin

//  durch das #13 wird bei jedem Schreiben erst an die erste Stelle der Zeile gesprungen und
//  dann die komplette Zeile neugeschrieben
    sOut := Format(#13 + '%s [%%.%ds%%.%ds] %d%%%%', [SlashArray[i mod 4], i div 2, 50 - (i div 2), i]);
    sOut := Format(
      sOut,
      ['********************************************************************************',
      '                                                                               ']
    );

    Write(sOut);
    Sleep(50);
  end;

  Write(Format(#13 + '%80s', [' ']));
  Write(Format(#13 + 'Complete! (%s)', ['filename.ext']));

  Writeln(#13#10#13#10);
  Writeln('********************************************************************************');
  Readln;
end.

easteregg 16. Feb 2007 15:34

Re: etwas an zeilenende in der Console schreiben
 
naja, aber ich zb habe meine console halt breiter als die 80 zeichen. (kann man ja frei einstellen)
deswegen möchte ich das möglichst dynamisch hinbiegen!

weil das hier sieht zb doof aus!

http://verfriemelt.org/delphi-praxis...en_problem.jpg


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Seite 1 von 2  1 2      

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