![]() |
"Öffnen mit" und Dateiproblem
Hi,
mein Programm soll Dateien auch aus dem Explorer öffnen können. Deshalb habe ich einfach ParamStr(1) mit Absicherungen usw. eingebunden. Wenn ich eine Datei über "Öffnen mit" (Explorer) öffne, dann wird ein Application.Terminate sofort nach dem Start der Anwendung aufgerufen. Dies ist ein eindeutiger Hinweis darauf, dass er aus irgendeinem Grund keinen Zugriff auf den Skinordner hat, OBWOHL der Pfad stimmt (habe es überprüft). Woran könnte das liegen ? Ich habe alles auf Terminates (und Close) geprüft und konnte nichts finden.
Delphi-Quellcode:
var paramfiles : Array of String;
... begin if (ParamCount > 0) and (FileExists(ParamStr(1))) then begin SetLength(paramfiles, ParamCount); for i := 0 to ParamCount - 1 do paramfiles[i] := ParamStr(i); FileType := LowerCase(Trim(ExtractFileExt(ParamStr(1)))); for ArrayIndex := 0 to 10 do if FileExt[ArrayIndex] = FileType then Break; if FileType <> '' then begin case ArrayIndex of // Audio oder Video 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11: begin AddFiles(paramfiles); end; // Playlist end; end; end; end; |
Re: "Öffnen mit" und Dateiproblem
Hallo,
sollte sich ein solches Problem nicht innerhalb kürzester Zeit mit dem Debugger lösen lassen? :gruebel: |
Re: "Öffnen mit" und Dateiproblem
Hallo Nils,
ParamCount enthält die Anzahl n der tatsächlichen Programmparameter, die zugehörigen Werte stehen in ParamStr(1)..ParamStr(n). In ParamStr(0) findest du den vollständigen Namen der .exe-Datei. Der Wert von ArrayIndex ist nach der FOR-Schleife undefiniert, du solltest nicht mehr darauf zugreifen. Wenn die Extensions bereits in einem Array FileExt vorliegen, kannst du mit StrUtils.AnsiIndexText prüfen:
Delphi-Quellcode:
Gruß Hawkeye
var
Extension : string; begin Extension := ExtractFileExt(ParamStr(i)); case AnsiIndexText(Extension, FileExt) of 0..High(FileExt): (* vorhanden *) else (* nicht vorhanden *) end; end; |
Re: "Öffnen mit" und Dateiproblem
Wenn du das wirklich per "Öffnen mit" machen willst (also per Rechtklick, "Öffnen mit" -> Deine Anwendung), dann kannst du das Array of String schonmal vergessen. Es wird immer nur die fokussierte Datei an das ausgewählte Programm übergeben.
Ansonsten geh mal die Kommentare im Code durch ;-)
Delphi-Quellcode:
[/quote]
var paramfiles : Array of String;
... begin if (ParamCount > 0) and (FileExists(ParamStr(1))) then begin SetLength(paramfiles, ParamCount); for i := 0 to ParamCount - 1 do paramfiles[i] := ParamStr(i); FileType := LowerCase(Trim(ExtractFileExt(ParamStr(1)))); // Das soll doch sicherlich zur Typen-Bestimmung dienen, oder? for ArrayIndex := 0 to 10 do if FileExt[ArrayIndex] = FileType then Break; if FileType <> '' then begin // aber hier ist ArrayIndex möglicherweise unbestimmt - das ist ja nur ne for-Schleifen-Variable! case ArrayIndex of // Audio oder Video 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11: begin // Sicher, das nichts ungutes passieren kann, wenn bei AddFiles auch der Dateiname der Exe mit reinkommt? AddFiles(paramfiles); end; // Playlist end; end; end; end; |
Re: "Öffnen mit" und Dateiproblem
Ich bezweifele, dass dort ein Fehler passiert, aber ich werde es mir nachher noch anschauen, da ich gerade kein Delphi habe (Debian).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 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