![]() |
Parameter
Hallo
Ich komme mit ParamStr nicht so ganz nach. Ich habe folgendes Programm bereits geschrieben.
Delphi-Quellcode:
Nun möchte ich Pfad\Datei als Parameter mitgeben, wenn ich das Programm mit Ausführen starte
procedure TForm1.FormCreate(Sender: TObject);
begin ShellExecute(application.Handle, 'print','Pfad\Datei', nil, nil, SW_Show); end; zB. Pfad\MeinProgramm.exe Pfad\Datei Danke |
Re: Parameter
Einfach:
Delphi-Quellcode:
Ich hoffe mal, dass ich das noch richtig im Gedächtnis habe ^^
ShellExecute(application.Handle, 'print','Pfad\Datei', 'Parameter', nil, SW_Show);
Und abfragen dann über
Delphi-Quellcode:
EDIT:
ParamStr(1)
Zitat:
|
Re: Parameter
(1) paramstr (0)
(2) Application.exename |
Re: Parameter
das andere programm startest du so:
Delphi-Quellcode:
und die auswertung im ersten programm folgendermaßen
ShellExecute(Handle, 'open', 'exename', 'Pfad\Datei', nil, SW_SHOWNORMAL);
Delphi-Quellcode:
if ParamCount > 0 then
Showmessage(ParamStr(1)) // gibt dann Pfad\Datei aus |
Re: Parameter
Und net vergessen Pfad\Datei in " einzuschließen, sonst kann es dir passieren, daß deine Dateiangaben auf mehrere Parameter aufgesplittet werden. (wenn z.B. Leerzeichen enthalten sind)
Code:
ShellExecute(application.Handle, 'print','[color=red]"[/color]Pfad\Datei[color=red]"[/color]', nil, nil, SW_Show);
|
Re: Parameter
Anscheindend Versteht ihr mich falsch oder ich euch.
Ich habe hier mein Druckprogramm "MyProgramm.exe" jetzt möchte ich das mit der Eingabe aufforderung starten und gleichzeitig dem Programm den Pfad und Dateinamen des Files geben welches es ausgeben soll. In der Eingabeaufforderung sieht das dann so aus: C:\MyProgramm.exe -"C:\Dokumente und Einstellungen\Benutzer\Eigene Dateien\File.txt" |
Re: Parameter
Wie jetzt? Per Eingabeaufforderung, oder per ShellExecute? Drück dich doch mal deutlich aus. Wie es per ShellExecute geht wurde es dir doch jetzt mehrfach gesagt.
Falls es dir darum geht die Parameter mit denen deine Anwendung gestartet wurde zu erfahren (Danach hast du aber bisher nun wirklich nicht geftag), dann fragst du eben ParamStr ab. ParamStr[0] ist der Pfad und Name deines Programmes, ParamStr[1] ist der erste Parameter, ParamStr[2] der zweite. Vor dem Auslesen solltest du allerdings per ParamCount überprüfen, wieviele Parameter angegeben wurden. |
Re: Parameter
Moin Sysadmin,
dann könntest Du es so aufrufen:
Delphi-Quellcode:
[EDIT]
ShellExecute(0,'open','cmd.exe',nil,PChar('/C "C:\MyProgramm.exe" "C:\Pfad zu der Datei\Datei.txt"'),SW_SHOW);
Ggf so:
Delphi-Quellcode:
wobei Du hier, wie schon angesprochen wurde, erst einmal prüfen solltest, ob paramstr(1) überhaupt etwas enthält.
ShellExecute(0,'open','cmd.exe',nil,PChar('/C "C:\MyProgramm.exe" "'+paramstr(1)'"'),SW_SHOW);
[/EDIT] |
Re: Parameter
Habe mein Problehm gelöst. Vielen Dank an für eure Hilfe.
Mein Code:
Delphi-Quellcode:
if ParamCount > 0 then
ShellExecute(application.Handle, 'print', PChar(ParamStr(1)), nil, nil, SW_Show); |
Re: Parameter
Wobei ich mir jetzt gerade nicht ganz sicher bin, ob ParamCount nicht auch ParamStr[0] mitzählt... :gruebel: Ich denke eigentlich schon. Daher solltest du evtl auf "ParamCount > 1" prüfen.
Probiers mal aus, ich hab grade leider kein Delphi zur Hand. |
Re: Parameter
@Leddl
ParamStr(0) ist soweit ich weiß der eiegene exename (incl. Pfad) |
Re: Parameter
:gruebel: Ja... und? Genau das hab ich oben schon geschrieben. Aber inwiefern hilft das? ;)
PS: Warum mach ich eigentlich ständig eckige Klammern bei ParamStr? :roll: |
Re: Parameter
hm aso meinst du das.
na dann eben ParamCount > 1. hast schon recht :wall: :wall: :wall: ich mach das immer inner schleife, und hab mir darüber noch keine gedanken gemacht. *g* die läuft dann von 1 to ParamCount. also haste recht1 |
Re: Parameter
Zitat:
@sysadmin: Aber so, wie du das jetzt gelöst hast, ist es eigentlich auch nicht sinnvoll. Was machst du, wenn dein Programm zwar mit einem Parameter gestartet wird, dieser aber komplett unsinnig ist? Besser wäre es, erst zu überprüfen, ob ParamCount > 1 ist (oder 0, falls ParamStr(0) nicht mitgezählt wird), und dann zu testen, ob die Datei überhaupt existiert. Evtl wäre es auch noch besser, den Parameter in "s zu packen, damit er auch auf jeden Fall als 1 Parameter erkannt wird. (Edit: Wobei ich ja auch nicht der erste bin, der das hier sagt :roll:)
Delphi-Quellcode:
if (ParamCount > 1) and (FileExists(ParamStr(1))) then
ShellExecute(application.Handle, 'print', PChar('"' + ParamStr(1) + '"'), nil, nil, SW_Show); |
Re: Parameter
hää?
da wird doch keine Exception ausgelöst, wenn ich das hier mache:
Delphi-Quellcode:
ParamStr(0) gibt es immer, egal ob ich parameter übergebe oder nicht.
for i := 1 to ParamCount do
if FileExists(ParamStr(i)) then // öffne diese Datei unter ParamSTr(i) und in diesem fall wird halt ParamStr(0) nicht berücksichtigt, weil ich ja nicht die eigene exe öffnen will... (eigeneExe steht ja unter ParamStr(0)) oder ich raff grade net, was du mir sagen willst :) :gruebel: |
Re: Parameter
Er ging halt davon aus, dass auch wenn keine Parameter an das Programm übergeben werden der Paramcount = 1 ist, weil ja Paramstr(0) immer da ist. Dem ist aber nicht so. Paramcount berücksichtigt Paramstr(0) nicht und gibt somit 0 zurück wenn keine Parameter an das Programm übergeben wurden.
|
Re: Parameter
Wenn ParamStr 0-basiert ist (und ParamCount den 0-ten Parameter mitzählt!), ist der höchste Index ParamCount-1. Daher bekommst du beim Zugriff auf ParamStr(ParamCount) eine Zugriffsverletzung, da dieser Parameter schließlich nicht existiert ;)
@dfried: Genau das war ja meine Frage. Ich war mir nicht sicher, ob ParamCount eben auch ParamStr(0) mitzählt, da ich schon lange nicht mehr mit Parametern gearbeitet habe. Aber n0b0dy meinte ja, daß es so sei, und daher war seine Aussage eben widersprüchlich. Mit dem Wissen, daß dem aber nicht so ist, sollte also der Ausdruck tatsächlich lauten:
Delphi-Quellcode:
if (ParamCount > 0) and (FileExists(ParamStr(1))) then
ShellExecute(application.Handle, 'print', PChar('"' + ParamStr(1) + '"'), nil, nil, SW_Show); |
Re: Parameter
nein. es ist eben nicht so!!!
ParamStr(0) wird bei ParamCount NICHT mitgezählt. jetzt bald weiß ich net mehr was stimmt udn was net :D ich überprüfe das gleichmal [EDIT] Zitat:
|
Re: Parameter
Zitat:
leddl hat doch schon geschrieben, dass er sich nicht sicher war ob ParamCount auch den ParamStr(0) mitsählt, und nach meinem Post hat er ja dann auch nettwerweise gleich noch eine Funktionierende Lösung mitgeliefert?!? Oder versteh ich jetzt nur Bahnhof :wall: |
Re: Parameter
:roll: Nein, passt jetzt schon. n0b0dy hat wohl nur vergessen, was er vorhin gesagt hat. :mrgreen:
|
Re: Parameter
wie kann ich das Programm automatisch schliessen lassen? mit
Delphi-Quellcode:
geht es nicht, und die anderen beiträge zum Thema Beenden helfen mir auch nicht weiter.
close;
|
Re: Parameter
*g* hm. jetzt bin ich zwar total verwirrt, aber ich werde das hoffenltich net alll zu oft mehr brauchen :D
ne, aber dann hatte ich vorhin wohl mal wieder nen aussetzer ;) [EDIT] wenn Application.Terminate auch nicht geht, dann weiß ichs uach net... |
Re: Parameter
Zitat:
Erstens gilt hier normalerweise "Neue Frage, neuer Thread", damit man auch was findet und zweitens: Präzisier das doch mal genauer, was geht nicht? Meine Programme lassen sich sehr wohl mit Close schließen. |
Re: Parameter
c:\>programm eins zwei drei vier
ParamCount: 4 ParamStr(0): c:\programm.exe ParamStr(1): eins ParamStr(2): zwei ParamStr(3): drei ParamStr(4): vier Der Zugriff auf ParamStr(ParamCount) ist also kein Problem! |
Re: Parameter
:roll: Warum muß man eine inzwischen gelöste Frage noch breittreten? :wall:
|
Re: Parameter
Zitat:
Ansonsten bitte ich meine Hilfe zu entschuldigen! |
Re: Parameter
Zitat:
Sicher, es bringt nichts wenn nach einer Lösung noch zig weitere Postings mit der selben Lösung kommen. ABER dies ist kein Grund unhöflich zu werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:00 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-2025 by Thomas Breitkreuz