Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Paramstr Dateiübergabe Problem (https://www.delphipraxis.net/71813-paramstr-dateiuebergabe-problem.html)

Obi-Wan 21. Jun 2006 13:18


Paramstr Dateiübergabe Problem
 
Hallo liebe Forumsuser :-D
Ich werde mich jetzt etwas kürzer fassen da mir eben der Firefox abgeschmiert ist und meinen Beitrag den ich innerhalb von 10 minuten getippt habe weg ist :(
Ok also ich übergebe meinen Programm Dateien als Parameter, indem ich diese Dateien markiere und auf die exe oder eine verknüpfung zu der exe ziehe. Später ist noch eine Shellerweiterung geplant. Diese werden dann an eine Listbox übergeben. Hier der passende Code:

Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
var i: integer;
begin
 if ParamCount > 0 then
 for i := 1 to ParamCount do
  begin
   ListBox1.Items.Add(ParamStr(i));
  end;
end;
Mein Problem ist das wenn ich ca. 40 Dateien von "M:\Eigene Dateien\Eigene Bilder" übergeben will diese Fehlermeldung erscheint:

http://www.cghost.de/mediahost/img18/errorLUvN.gif

Es wird dann nichts übergeben, jedoch wird bei 39 Dateien alles übergeben. Wenn ich ca. 50 Dateien in einen kurzen Pfad wie "D:\a" kopiere gehen diese alle ohne Probleme. Habe mich schon dumm und dusselig gesucht (Hier, in anderen Delphi Foren und google), aber nichts gefunden was auf mein Problem zutrifft. :gruebel:
Meine Vermutung ist, das ParamStr irgendeine Begrenzung hat was die gesamte Länge der angegebenen Parameter betrifft und bei meiner Fehlermeldung der/die letzte/n Parameter abgeschnitten wird/werden und diese Datei deshalb nicht geöffnet werden kann. :freak:
Deshalb poste ich hier und hoffe das jemand näheres darüber weiß oder vielleicht sogar einen Lösungsansatz hat. Vielen Dank im vorraus :hi:

MfG Florian

shmia 21. Jun 2006 14:15

Re: Paramstr Dateiübergabe Problem
 
Ich habe da so eine dunkle Ahnung, dass die Länge der Kommandozeile begrenzt ist.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   // Kommandozeile in einem Memo anzeigen
   memo1.Scrollbars := ssBoth;
   memo1.lines.Text := CmdLine;
   // CmdLine ist eine Variable, die mit der API-Funktion GetCommandLineA befüllt wurde

end;
Mit dem Schnipsel oben kannst du prüfen, wieviel Info übernommen werden.

Obi-Wan 21. Jun 2006 15:14

Re: Paramstr Dateiübergabe Problem
 
Erstmal Danke für die antwort.
Hmm das kann natürlich sein. Habe das von dir oben ausprobiert und da gibts den gleichen Fehler mit zu viel Dateien. Wenns "normal" viele Dateien wie oben sind gibt der mir die Pfade alle aus. :/
Weißt du oder jemand anderes ob es irgendeine andere Methode gibt? Wenn nicht ist es auch kein großes Problem, wäre halt nur schön wenn es theoretisch möglich wäre. Sonst mache ich es vielleicht per Drag & Drop auf die Listbox wenn der User mehr Dateien bearbeiten möchte. :)

shmia 21. Jun 2006 15:31

Re: Paramstr Dateiübergabe Problem
 
Zitat:

Zitat von Obi-Wan
Weißt du oder jemand anderes ob es irgendeine andere Methode gibt?

Ich glaube, viele Anwendungen verwenden hier das veraltete DDE um die Limits zu umgehen.
Schau dir mal im Explorer -> Extras->Ordneroptionen den Dateityp .DOC an.
Winword wird dann so gestartet
Code:
"C:\Programme\Microsoft Office\OFFICE11\WINWORD.EXE" /n /dde
und erhält die DDE-Nachricht:
Code:
[REM _DDE_Direct][FileOpen("%1")]

Obi-Wan 21. Jun 2006 16:19

Re: Paramstr Dateiübergabe Problem
 
Danke für den stups in die richtige Richtung. Werde mir das mal zu gemüte führen. Danke, klasse Forum hier! :)

Obi-Wan 21. Jun 2006 18:40

Re: Paramstr Dateiübergabe Problem
 
Ich dösbaddel, warum schwer wenns auch einfach geht? ^^
Mein Tool soll ja später nur über die Shellerweiterung funktionieren oder halt manuell über Drag&Drop auf die Listbox wenn man die Files in das Programm bringen möchte...
Das Drag&Drop geht ja (ist ja ned schwer ;))

Aber mit der ShellErweiterung hab ichs jetzt so gemacht:
Gaaanz einfach, effektiv und vor allem schnell gelöst. Die config-datei von dem Tool wird ja eh in den Anwendungsdaten (wo die imho auch hingehört) abgelegt und deshalb nehme ich genau da eine Textdatei namens "Files.txt".
Wenn ich jetzt über die ShellErweiterung die Dateien übergebe, werden diese von der dll in eine stringlist geschrieben und anschließend in diese Textdatei gespeichert. Anschließend wird diese beim starten des Programms eingelesen. Geht echt schnell, hab ich eben mal mit über 2100 Dateien getestet und man merkt nicht mal das was gemacht wurde ^^
Ich denke das ist ein guter Mittelweg von Geschwindigkeit und Aufwand *hoffe ich mal* :stupid:

MfG Florian


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