Autor Beitrag
reimo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Do 06.09.07 14:27 
Hi!

möchte abhängig davon, ob das programm mit parametern aufgerufen wordes ist oder nicht, es entweder als Konsolen (mit Parameter) oder Win-Anwendung laufen lassen!

hab mir gedacht, dass ich im dpr-File eine Abfrage einbau, ob Parameter übergeben worden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  
if ParamCount > 0 then begin
     writeln('32423');
  end     
  else begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;


meine erste frage ist: Darf ich das machen???

und das zweite wäre: Da die Applikation nicht als konsolenanwendung kompiliert wurde, ist die Ausgabe von writeln nicht auf StandardOut gesetzt!
Wie mach ich das jetzt aber, dass obwohl nicht als konsolenanwendung kompiliert, ich trotzdem in die konsole schreiben kann?

danke!
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Do 06.09.07 15:01 
Hi,

folgendes in die DPR nach Program XXX einfügen:
ausblenden Delphi-Quelltext
1:
2:
//Einfügen in normale GUI-Anwendung. Erzeugt das Konsolenfenster.
{$APPTYPE CONSOLE}


Und dann kannst du das so in der DPR auswerten:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
If (Bedingung=True) Then Begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;  Application.Run;
  End Else Begin
    Writeln('3234');
  End;

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
reimo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Do 06.09.07 15:31 
user profile iconene hat folgendes geschrieben:
Hi,

folgendes in die DPR nach Program XXX einfügen:
ausblenden Delphi-Quelltext
1:
2:
//Einfügen in normale GUI-Anwendung. Erzeugt das Konsolenfenster.
{$APPTYPE CONSOLE}


Und dann kannst du das so in der DPR auswerten:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
If (Bedingung=True) Then Begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;  Application.Run;
  End Else Begin
    Writeln('3234');
  End;


Hi,

danke, aber mit dieser methode wird immer ein konsolenfenster miterzeugt, egal ob ich das programm mit parametern oder ohne erzeuge!
ich möchte aber nur dann eine konsolenanwendung, wenn parameter übergeben wurden.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Do 06.09.07 15:37 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if ParamCount > 0 then begin
     writeln('32423');
  end     
  else begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;


ParamCount ist immer > 0, weil als 1. Parameter der Pfad des Programmes übergeben wird. Also wenn, dann auf > 1 prüfen.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
reimo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Do 06.09.07 15:50 
user profile iconGTA-Place hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if ParamCount > 0 then begin
     writeln('32423');
  end     
  else begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;


ParamCount ist immer > 0, weil als 1. Parameter der Pfad des Programmes übergeben wird. Also wenn, dann auf > 1 prüfen.


nein, eben nicht! ;o)
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 06.09.07 16:13 
user profile iconreimo hat folgendes geschrieben:
nein, eben nicht! ;o)
Da hat er Recht. (getestet).
Nun, die einzige Möglichkeit eine Compilerdirektive weg zubekommen ist mit einer anderen Direktive. Problem dabei: diese Direktive ( {$IF} {$ENDIF} ) kann (natürlich) nur Konstanten abfragen, da die Änderung vom Compiler vorgenommen wird und nicht erst zur Laufzeit.
Eine denkbare Lösung wäre ein zweites Programm mitzuliefern(eine Console app), welches mit evtl. vorhandenen Parametern gestartet wird, wenn ParamCount>0 ist, dann wird das Hauptprogramm beendet.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
reimo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Do 06.09.07 16:18 
user profile iconJayEff hat folgendes geschrieben:
user profile iconreimo hat folgendes geschrieben:
nein, eben nicht! ;o)
Da hat er Recht. (getestet).
Nun, die einzige Möglichkeit eine Compilerdirektive weg zubekommen ist mit einer anderen Direktive. Problem dabei: diese Direktive ( {$IF} {$ENDIF} ) kann (natürlich) nur Konstanten abfragen, da die Änderung vom Compiler vorgenommen wird und nicht erst zur Laufzeit.
Eine denkbare Lösung wäre ein zweites Programm mitzuliefern(eine Console app), welches mit evtl. vorhandenen Parametern gestartet wird, wenn ParamCount>0 ist, dann wird das Hauptprogramm beendet.


ok, das mit der zweiten app wäre möglich! aber es geht sicher auch anders! ich muss doch den Output für WriteLn,... irgendwie im code umleiten können! kann ich mir nicht den devicecontext vom Konsolenfenster holen und dann den output hinleiten? kenn mich da leider zuwenig aus, aber das müsste doch gehen
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 06.09.07 17:38 
IIRC konnte man auch für eine Nicht-Konsolen-Anwendung nachträglich die Konsole initialisieren und damit das Konsolen-Fenster nutzen. Find aber grad in den System-Units nicht die nötigen Stellen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Do 06.09.07 18:42 
user profile iconBenBE hat folgendes geschrieben:
IIRC konnte man auch für eine Nicht-Konsolen-Anwendung nachträglich die Konsole initialisieren und damit das Konsolen-Fenster nutzen. Find aber grad in den System-Units nicht die nötigen Stellen.


Nix System, Win32-API: AllocConsole.

Gruss Reinhard