Autor |
Beitrag |
reimo
      
Beiträge: 75
|
Verfasst: 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:
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
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: Do 06.09.07 15:01
Hi,
folgendes in die DPR nach Program XXX einfügen: Delphi-Quelltext
Und dann kannst du das so in der DPR auswerten:
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 
      
Beiträge: 75
|
Verfasst: Do 06.09.07 15:31
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Do 06.09.07 15:37
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 
      
Beiträge: 75
|
Verfasst: Do 06.09.07 15:50
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 06.09.07 16:13
reimo 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 
      
Beiträge: 75
|
Verfasst: Do 06.09.07 16:18
JayEff hat folgendes geschrieben: | reimo 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Do 06.09.07 18:42
BenBE 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
|
|
|