Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ausgabe in DOS-Box (https://www.delphipraxis.net/13278-ausgabe-dos-box.html)

sabelrider 15. Dez 2003 14:11


Ausgabe in DOS-Box
 
Hallo,

Mal ne kleine Frage. Ich hab ein Programm geschrieben. Wenn dieses Programm jedoch mit nem Parameter gestartet wird(-h), dann soll die Benutzung und die Parameter erklärt werden. Und zwar nur, wenn das Programm von ner DOS-Box aus aufgerufen wurde.
Das Programm soll also ganz normal als Windows-Programm fungieren aber unter der bestimmten Bedingung soll es so wie eine consolen-Anwendung arbeiten. WriteLn geht ja irgendwie mit nem GUI-Programm nicht. Und wenn ich {$APPTYPE CONSOLE} einbaue, öffnet sich zusätzlich zum Fenster ne DOS-Box, wenn ich das Programm ganz normal ohne Parameter starte.

Wie kann ich erreichen, dass ich WriteLn auch in nem GUI-Programm benutzen kann?
Oder wie kann ich ne Entscheidung machen und dann {$APPTYPE CONSOLE} setzen oder nicht?

Danke im Voraus,
sabelrider

jbg 15. Dez 2003 18:53

Re: Ausgabe in DOS-Box
 
Das IMHO nicht möglich, denn nur mit APPTYPE CONSOLE bleibt dein Programm in der schon geöffneten Konsole. Wenn du im nachhinein AllocConsole() aufrufst, bekommst du eine neue Konsole.

Was vielleicht funktionieren könnte ist folgendes:
Delphi-Quellcode:
{$APPTYPE CONSOLE}
...
if ParamStr(1) = '-H' then
begin
  Halt(0);
end
else
  FreeConsole; // Konsole schließen
...
Das führt, wenn es überhaupt funktioniert, zu flickern, da kurzfristig eine Konsole geöffnet wird.

vbinsider 28. Dez 2003 18:21

Re: Ausgabe in DOS-Box
 
Es gibt bestimmt aber auch ne andere Lösung:

Denn: Wenn man sich den Registry-Editor von Windows ansieht, wird man feststellen, dass dieses Programm auch solch ein "Doppelleben" führt. Wird dieses Programm aus dem "Ausführen"-Dialog von Windows gestartet, so öffnet sich das standardmäßige Fenster mit dem Inhalt der Registry geöffnet.

Sobald man das Programm allerdings zum Beispiel aus der Konsole mit dem Parameter "/c blub.reg" startet und so eine neue Registry aus der Datei blub.reg erstellt, so läuft diese Aktion in der Konsole ab, ohne dass ein Fenster geöffnet wird. Das Gleiche passiert mit dem Parameter "/e".

In einem Artikel der PC-WELT wird beschrieben, dass man den DOS-Teil von Regedit per Programm als eigenständiges Programm abtrennen kann. Das muss doch auch umgekehrt gehen. Ich vermute, dass man ein DOS-Programm einfach vor das Delphi-Programm kopieren muss. So, wie ich den Artikel verstanden hab, führt Windows dann entweder den Windows-Teil oder den DOS-Teil aus, abhängig davon, ob man das Programm aus DOS oder Windows heraus startet.

Hoffe euch geholfen zu haben

vbinsider

sabelrider 28. Dez 2003 19:01

Re: Ausgabe in DOS-Box
 
Hiho,

hört sich interessant an!
Hast du den Link zu dem Artikel zufällig zur Hand?

Gruß,
sabelrider

Christian Seehase 29. Dez 2003 16:35

Re: Ausgabe in DOS-Box
 
Moin Sabelrider,

meinst Du das so:

Delphi-Quellcode:
program Project1;

uses
  Forms,
  Windows,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
  Application.Initialize;
  if paramcount > 0 then begin
    Application.ShowMainform := false;
    AllocConsole;
    WriteLn('HALLO');
    ReadLn;
    FreeConsole;
    exit;
  end;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Erstellt mit "Neues Anwendung", dann Projekt\Quelltext anzeigen. Anschliessend den IF Block eintragen, und die Unit Windows mit aufnehmen.
Zum Testen dann unter Start\Parameter einen Parameter eintragen.

sabelrider 29. Dez 2003 23:03

Re: Ausgabe in DOS-Box
 
Hallo Christian,

Danke! Das ist genau das, was ich gesucht habe.
Eigentlich hätte ich auch selber draufkommen können :D
Aber ShowMainform war mir unbekannt :)
Wieder was dazugelernt :D

Danke,
sabelrider


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