Neuer Dateityp anmelden und mit Anwendung
verknüpfen
Einfacher Aufruf mit mehreren Instanzen
Möchte man eine, unter Windows
mit der eigenen Anwendung verknüpfte Datei per Doppelklick
öffnen, so fügt man folgende Zeilen hinter dem Ereignis
OnCreate der Form1 (Hauptform) hinzu:
| |
if
ParamCount > 0
then
LadeDatei(ParamStr(1));
// (ParamStr(1)) ist ein String und
enthält den Pfad zur Datei |
Um das Ganze etwas mehr zu
konkretisieren, ist die zu öffnende Datei eine textbasierende
Datei und soll z.B. in der ListBox1 geöffnet werden so würde das
wie folgt aussehen:
| |
if
ParamCount > 0
then
ListBox1.Items.LoadFromFile(ParamStr(1)); |
Aufruf mit unterdrücken mehrerer Instanzen
Nun gut, jetzt ist es aber so,
dass beim Öffnen der Datei (Doppelklick auf Datei), immer eine neue Instanz der Anwendung
geöffnet wird. Dies kann zwar so auch gewünscht sein, muss aber
nicht. Möchte man, dass die Datei in die bereits geöffneten
Anwendung geladen wird, so wird das Ganze etwas umfangreicher,
aber nicht unmöglich. Ok, dann lasset das Spiel beginnen...
Zunächst installiert man die Komponente MainInstance,
welche
hier heruntergeladen werden kann. Ist dies vollbracht, so
zieht man die Komponente auf die Hauptform und trägt im
Quellcode unter private
folgende Zeile ein:
| |
.
.
.
type
TForm1 = class(TForm)
.
.
.
private
{ Private-Deklarationen }
procedure NeedFileOpen(var
Msg: tMessage); message
wmMainInstanceOpenFile; // <-
diese hier !!!
public
{ Public-Deklarationen }
.
.
. |
Dann irgendwo im Quelltext
folgende Prozedur hinkopieren:
| |
procedure
TForm1.NeedFileOpen(var Msg:
tMessage);
var
Path : string;
PC : array[0..MAX_PATH]
of Char;
begin
GlobalGetAtomName(Msg.wParam, PC, MAX_PATH);
Path := Trim(StrPas(PC));
LadeDatei(Path);
// (Path) ist ein String und enthält den
Pfad zur Datei
end; |
|
Quelle:
www.delphi-fundgrube.de |
Anstelle LadeDatei
muss der Code zum Laden der Datei hinterlegt sein, wie im
Beispiel oben z.B.: ListBox1.Items.LoadFromFile(Path).
Windows-Dateiverknüpfung (Typ) über eigener Anwendung
So, und nun zu guter Letzt, was
ja eigentlich an den Anfang gehört, wie man eine
Dateiverknüpfung unter Windows aus der eigenen Anwendung heraus
erstellt. Dazu folgende Funktion in den Quelltext der Anwendung
verpflanzen:
| |
function
InstallExt(Extension, ExtDescription, FileDescription, OpenWith,
ParamString:
String; IconIndex:
Integer): Boolean;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
try
with Reg
do
begin
RootKey := HKEY_CLASSES_ROOT;
OpenKey(Extension, True);
WriteString('', ExtDescription);
CloseKey;
OpenKey('\' + ExtDescription, True);
WriteString('', FileDescription);
CloseKey;
OpenKey('DefaultIcon', True);
WriteString('', OpenWith +
','+IntToStr(IconIndex));
CloseKey;
OpenKey('\' + ExtDescription +
'\Shell\Open\Command', True);
WriteString('', '"' + OpenWith +
'" "' + ParamString +
'"');
CloseKey;
end;
Result :=
True;
except
Result :=
False;
end;
finally
Reg.Free;
end;
end; |
|
Quelle:
www.delphipraxis.net |
Aufgerufen wird die
Funktion dann wie folgt:
| |
InstallExt('.xyz', 'MeineAnwendung', 'schöne-Anwenung', Application.ExeName, '"%1"',0); |
Wobei ".xyz" durch die zu
registrierende Endung und "MeineAnwendung" gegen den
Anwendungsnamen zu tauschen ist. Bei "schöne Anwendung" kann
eine kurze Dateityp-Beschreibung stehen.
|