![]() |
GUI Anwendung mit Consolen-Ausgabe
Hallo,
ich würde gerne eine Gui-Anwendung schreiben, die wenn man sie aus der Eingabe-Aufforderung mit Parametern startet, die Ausgabe per Eingabe-Aufforderung geschieht, (wie beispielsweise 7z). Ist das möglich, oder muss ich dann eine extra Consolen-Anwenung schreiben, die dann aus meiner Anwenung aufgerufen wird ? gruss |
Re: GUI Anwendung mit Consolen-Ausgabe
Hallo Christian,
ein gesondertes Konsolenprogramm wird wohl nicht notwendig sein:
Delphi-Quellcode:
Grüße vom marabu
uses
Windows; var hIn: THandle; hOut: THandle; c: char; iRead, iWritten: cardinal; s: string; begin AllocConsole; hIn := GetStdHandle(STD_INPUT_HANDLE); hOut := GetStdHandle(STD_OUTPUT_HANDLE); FlushFileBuffers(hIn); s := ''; repeat ReadFile(hIn, c, 1, iRead, nil); if c = #13 then Break else s := s + c; until false; WriteFile(hOut, s[1], Length(s), iWritten, nil); FreeConsole; end. |
Re: GUI Anwendung mit Consolen-Ausgabe
{$APPTYPE CONSOLE} ... wenn ein GUI-Programm auch Writeln() können soll ;)
|
Re: GUI Anwendung mit Consolen-Ausgabe
@olli: Nur leider kommt dann das Consolenprogramm standardmäßig immer, ich glaub aber der Sinn war dass, das Consolenfenster entweder gar nicht erscheinen sollte oder eben nur bei bestimmten Parametern... Ansonsten war das auch mein erster Gedanke, denn mit diesem Apptype (Console) und dann dem Projekt ein Form hinzufügen hat man leider genau den selben effekt wie gerade beschrieben.
|
Re: GUI Anwendung mit Consolen-Ausgabe
Zitat:
|
Re: GUI Anwendung mit Consolen-Ausgabe
Hi Olli,
das WIN32 Console API bietet mir eigentlich alles was ich brauche, aber hier reicht das wohl nicht. Beim Starten des Programmes aus einer Konsole will MrKnogge wahrscheinlich kein neues Konsolfenster, sondern die Standard-Kanäle des offenen Fensters benutzen. Nachdenkliche Grüße vom marabu |
Re: GUI Anwendung mit Consolen-Ausgabe
@marabu: In diesem Falle sollte er es ganz simpel vergessen. <--- KEIN SCHERZ!
Ich habe das vor Jahren intensiv recherchiert. Das geht einfach nicht. Liegt daran, daß der PE-Loader je nach Flag des Subsystems (CUI/GUI) andere Sachen macht. Also vergeßt es ... alles was machbar ist ist eine Frickellösung! Natürlich ginge es sicher "irgendwie" über das Einschleichen in den Elternprozeß, so dieser das zuläßt. |
Re: GUI Anwendung mit Consolen-Ausgabe
Zitat:
Könnte ich den das Offene Fenster benutzen, wenn ich noch eine "Consolen-Variante" meines Programmes schreiben würde ? Der Aufwaand wäre eigentlich nicht mal zu hoch, wenn ich die benötigten funktionen aus meiner Haupt-exe exportieren würde. |
Re: GUI Anwendung mit Consolen-Ausgabe
Zitat:
|
Re: GUI Anwendung mit Consolen-Ausgabe
Muss ich da etwas beachten, oder kann ich einfach ganz normal mit ReadLn und WriteLn arbeiten ?
|
Re: GUI Anwendung mit Consolen-Ausgabe
Zitat:
Bei einer normalen CUI-Anwendung mußt du nichts beachten. Writeln/Readln alles normal! |
Re: GUI Anwendung mit Consolen-Ausgabe
Hallo Christian,
wenn du die eigentliche Funktionalität deines Programms von deinem GUI trennst, dann könntest du deine Anwendung in Abhängigkeit von ParamCount das Konsolfenster oder dein VCL MainForm zeigen lassen. ReadLn() und WriteLn() sind etwas ganz Spezielles, ich bin da mit weniger zufrieden. marabu |
Re: GUI Anwendung mit Consolen-Ausgabe
Wie meinst du das ?
Die Prozeduren/Funktionen sowie den eigentlichen Programm-Ablauf hab ich schön für sich gehalten, die GUI wird nur für die Ein/Ausgabe benötigt. Aber was genau meinst du :gruebel: Lieber die Funktion benutzen die du vorher gepostest hast ? Zitat:
|
Re: GUI Anwendung mit Consolen-Ausgabe
Wenn du schon alles sauber getrennt hast, um so besser. Dass du überhaupt erwägst beide Oberflächen (Konsole und GUI) anzubieten, lässt mich darauf schließen, dass dein Programm das GUI eh nur zum Einstellen der Parameter hat. Dann ist ja eigentlich alles ganz einfach. Im Projekt-Quelltext bringst du sowas ähnliches unter:
Delphi-Quellcode:
In deiner MainForm hast du wahrscheinlich einen Button, der die Verarbeitung (Execute() in meinem pseudo code) anstößt.
if ParamCount > 0 then begin
CheckParams(); Execute(); end else begin with Application do begin Initialize; CreateForm(); Run; end; end; ReadLn() und WriteLn() sind etwas ganz Spezielles, weil sie sich in mehreren Punkten von einer normalen Pascal procedure unterscheiden. Die lassen sich nicht exakt nachbilden. Deshalb bin ich mit weniger zufrieden - in meiner eigenen Unit habe ich nur ReadStr() und WriteStr(). marabu |
Re: GUI Anwendung mit Consolen-Ausgabe
Die Idee gefällt mir, werd's gleich mal umsetzen.
Mit welchem Befehl soll ich deiner Meinung nach die Consolen-Ausgabe machen ? WriteLn, WriteStr, oder wie du's oben gepostet hast ? |
Re: GUI Anwendung mit Consolen-Ausgabe
Liste der Anhänge anzeigen (Anzahl: 1)
Schau mal rein - vielleicht hilft es dir bei deiner Entscheidung...
marabu |
Re: GUI Anwendung mit Consolen-Ausgabe
Danke, ich werd's mir ansehen!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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 by Thomas Breitkreuz