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/)
-   -   Ausgabe an Konsole, von der GUI gestartet wurde (https://www.delphipraxis.net/195871-ausgabe-konsole-von-der-gui-gestartet-wurde.html)

iphi 3. Apr 2018 08:29

Ausgabe an Konsole, von der GUI gestartet wurde
 
Hallo,

ich möchte mein GUI Programm auch als Konsolenanwendung laufen lassen können, falls es aus einer Konsole gestartet wird. Letzteres kann ich mit GetStdHandle abfragen. Wie aber kann ich dann an diese Konsole Text ausgeben?

So gehts jedenfalls nicht:
Delphi-Quellcode:
...
  if GetStdHandle(Std_Output_Handle)<>0 then
    begin
      Windows.MessageBox(0, 'Is Console', nil, MB_OK);
      writeln('Hello World');
    end else
      Windows.MessageBox(0, 'NO Console', nil, MB_OK);
...
Der writeln produziert einen Error 105. Weiß jemand Rat?

Luckie 3. Apr 2018 08:37

AW: Ausgabe an Konsole, von der GUI gestartet wurde
 
Meines Wissens nach kann man die Konsole wie in eine Datei schreiben. Also irgendwie so ähnlich. Ich habe es noch nie gemacht von einer Konsolenanwendung.

KodeZwerg 3. Apr 2018 08:38

AW: Ausgabe an Konsole, von der GUI gestartet wurde
 
Delphi-Quellcode:
  {$APPTYPE CONSOLE}
  hStdOut := GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute(hStdOut, FOREGROUND_GREEN or FOREGROUND_BLUE or FOREGROUND_RED or FOREGROUND_INTENSITY);
  WriteLn('Weißer Text');

Jasocul 3. Apr 2018 08:41

AW: Ausgabe an Konsole, von der GUI gestartet wurde
 
Wurde in der DP schon mal besprochen

iphi 3. Apr 2018 08:45

AW: Ausgabe an Konsole, von der GUI gestartet wurde
 
Zitat:

{$APPTYPE CONSOLE}
Damit habe ich die Konsole immer am Bein. Das möchte ich nicht.
Falls das Programm aus einem Konsolenfenster heraus gestartet wird, möchte ich Text in genau das Konsolenfenster ausgeben.

Ohne {$APPTYPE CONSOLE} liefert der Vorschlag trotz vorhandener Konsole einen Error 105.

Luckie 3. Apr 2018 08:49

AW: Ausgabe an Konsole, von der GUI gestartet wurde
 
Zitat:

Zitat von Jasocul (Beitrag 1397947)

Wie ich schon sagte, wie in eien Datei schreiben:
Delphi-Quellcode:
procedure TConsole.WriteStr(s: string);
var
  iWritten: cardinal;
begin
  WriteFile(hOut, s[1], Length(s), iWritten, nil);
end;

himitsu 3. Apr 2018 08:53

AW: Ausgabe an Konsole, von der GUI gestartet wurde
 
Bei GUI-Anwendungen verbindet Delphi WriteLn/ReadLn nicht standardmäßig mit der "fremden" Console.

siehe mein Hier im Forum suchenFileSplitter

Das Ding ist als normale GUI-Anwendung geschrieben (also quasi
Delphi-Quellcode:
{$APPTYPE GUI}
),
aber da wird erkannt, ob es in einer Konsole läuft.
Ebenso ist es möglich sich eine eigene Console zu erstellen. (neue Konsole, neben der von wo gestartet wurde oder eine Konsole für GUI-Anwendung, wenn nicht von da gestartet wurde)

MSDN-Library durchsuchenGetStdHandle
MSDN-Library durchsuchenAllocConsole
MSDN-Library durchsuchenAttachConsole
...

PS: in der System-Unit gibt es
Delphi-Quellcode:
var
  Input: Text;             { Standard input }
  Output: Text;            { Standard output }
  ErrOutput: Text;         { Standard error output }
Die kann man auch selber zuweisen, wenn Delphi das nicht automatisch macht.

KodeZwerg 3. Apr 2018 08:57

AW: Ausgabe an Konsole, von der GUI gestartet wurde
 
Delphi-Quellcode:
 {$APPTYPE CONSOLE}
  hStdOut := GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute(hStdOut, FOREGROUND_GREEN or FOREGROUND_BLUE or FOREGROUND_RED or FOREGROUND_INTENSITY);
  WriteLn('Weißer Text');
  FreeConsole; // das sollte Console zumachen

iphi 3. Apr 2018 08:58

AW: Ausgabe an Konsole, von der GUI gestartet wurde
 
Danke für die Tipps!
Mit AttachConsole gehts prima!

iphi 3. Apr 2018 10:43

AW: Ausgabe an Konsole, von der GUI gestartet wurde
 
Hallo Himitsu,

Zitat:

siehe mein Hier im Forum FileSplitter
Wollte ich gerade studieren um noch was dazu zu lernen. Da gibt es allerdings offenbar viele Varianten.
Wo finde ich den relevanten Quellcode, auf den Du Dich beziehst?
Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 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