AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi [gelöst] Verknüpfung mit Dateiendung und Leerzeichen
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Schwedenbitter · begonnen am 18. Sep 2017 · letzter Beitrag vom 18. Sep 2017
Antwort Antwort
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

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

  Alt 18. Sep 2017, 12:37
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 InstallExt(...); erhalte ich mittels ParamStr(1) komplette Pfade inkl. Leerzeichen.
Aber nach dem 2. Durchlauf von InstallExt(...); werden plötzlich die Leerzeichen als Trenner erkannt und die Dateinamen zerstückelt; also z.B. ParamStr(1) = 'Z:\RAD' und 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 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?
Alex Winzer

Geändert von Schwedenbitter (18. Sep 2017 um 14:55 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: Verknüpfung mit Dateiendung und Leerzeichen

  Alt 18. Sep 2017, 13:19
Ä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;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.993 Beiträge
 
Delphi 12 Athens
 
#3

AW: Verknüpfung mit Dateiendung und Leerzeichen

  Alt 18. Sep 2017, 13:38
Das InstallExt quoted die Werte doch bereits im \Shell\Open\Command:
             Reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString]));

Was mich eher wundert, ist der nochmal gequotete ParamStr "%1" beim Aufruf:
InstallExt('.icctmp', 'ICC Verlauf', 'Gespeicherter ICC Verlauf', ParamStr(0), '"%1"',0);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Verknüpfung mit Dateiendung und Leerzeichen

  Alt 18. Sep 2017, 13:58
Ja, stimmt irgendwie:

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

Müsste es dann nicht eher so sein?

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.
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Verknüpfung mit Dateiendung und Leerzeichen

  Alt 18. Sep 2017, 14:50
Müsste es dann nicht eher so sein?

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 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.
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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