Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [gelöst] Verknüpfung mit Dateiendung und Leerzeichen (https://www.delphipraxis.net/193872-%5Bgeloest%5D-verknuepfung-mit-dateiendung-und-leerzeichen.html)

Schwedenbitter 18. Sep 2017 12:37


[gelöst] Verknüpfung mit Dateiendung und Leerzeichen
 
Hallo,

nach Fertigstellung meines Programmes wollte ich es in Windows (bei mir derzeit 10.0.16288) integrieren. Dazu sollte die von mir verwendete Dateiendung mit der exe-Datei nach dieser Anleitung verknüpft werden.
Beim ersten Mal klappt das auch ganz gut. Aber ich muss/will die Funktion ja auch mehrfach testen. Und hier beginnt mein Problem:

Nach dem ersten Ausführen von
Delphi-Quellcode:
InstallExt(...);
erhalte ich mittels
Delphi-Quellcode:
ParamStr(1)
komplette Pfade inkl. Leerzeichen.
Aber nach dem 2. Durchlauf von
Delphi-Quellcode:
InstallExt(...);
werden plötzlich die Leerzeichen als Trenner erkannt und die Dateinamen zerstückelt; also z.B.
Delphi-Quellcode:
ParamStr(1) = 'Z:\RAD'
und
Delphi-Quellcode:
ParamStr(2) = 'Studio\_Programme\Datei.Verknüpfung\test.pleppo'
.

Der ursprüngliche Fragesteller hat sich möglicher Weise an dem hier orientiert - jedenfalls sieht der Code sehr ähnlich aus.
Dort gibt es aber auch eine
Delphi-Quellcode:
function UnInstallExt(Extension: string): Boolean;
(etwas weiter unten). Auch wenn ich diese aurufe, ändert sich das Verhalten nicht.

Kann mir bitte jemand bei der Erhellung behilflich sein?

nahpets 18. Sep 2017 13:19

AW: Verknüpfung mit Dateiendung und Leerzeichen
 
Ändere dashier
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if InstallExt('.xyz', 'XYZDatei', 'Tolles Programm', ParamStr(0), '"%1"',0) then
   Showmessage('Dateiendung konnte erfolgreich registriert werden.');
end;
mal bitte so ab
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if InstallExt('.xyz', 'XYZDatei', 'Tolles Programm', '"' + ParamStr(0) + '"', '"%1"',0) then
   Showmessage('Dateiendung konnte erfolgreich registriert werden.');
end;

Uwe Raabe 18. Sep 2017 13:38

AW: Verknüpfung mit Dateiendung und Leerzeichen
 
Das InstallExt quoted die Werte doch bereits im \Shell\Open\Command:
Delphi-Quellcode:
             Reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString]));


Was mich eher wundert, ist der nochmal gequotete ParamStr "%1" beim Aufruf:
Delphi-Quellcode:
InstallExt('.icctmp', 'ICC Verlauf', 'Gespeicherter ICC Verlauf', ParamStr(0), '"%1"',0);

nahpets 18. Sep 2017 13:58

AW: Verknüpfung mit Dateiendung und Leerzeichen
 
Ja, stimmt irgendwie:

Delphi-Quellcode:
Reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString]));


Müsste es dann nicht eher so sein?

Delphi-Quellcode:
InstallExt('.icctmp', 'ICC Verlauf', 'Gespeicherter ICC Verlauf', ParamStr(0), '%1',0);


Beides wird beim Schreiben in " gepackt. Dann braucht man es doch nicht in " zu übergeben.

Irgendwas ist hier doppeltgemoppelt.

Schwedenbitter 18. Sep 2017 14:50

AW: Verknüpfung mit Dateiendung und Leerzeichen
 
Zitat:

Zitat von nahpets (Beitrag 1381468)
Müsste es dann nicht eher so sein?

Delphi-Quellcode:
InstallExt('.icctmp', 'ICC Verlauf', 'Gespeicherter ICC Verlauf', ParamStr(0), '%1',0);

Danke für Eure Hilfe!

Ich hatte das Problem schon vorher identifiziert. Mit Regedit hatte ich festgestellt, dass %1 fast immer von " umschlossen ist. In meinem Fall waren es zweimal ". Nachdem ich je eines weglöschte, klappte es auch wieder. Das
Delphi-Quellcode:
Format('"%s" "%s"', [OpenWith, ParamString]);
hatte ich nicht im Verdacht. Die Funktion war bei mir in eine andere Unit ausgelagert. Und getreu dem Motto: aus den Augen aus dem Sinn, wäre ich da nicht drauf gekommen.


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