Moin Rebugger,
zum ersten Problem:
Code:
[b]uses[/b]
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, SynEdit,
shellapi; [color=#000080]// SHELLAPI einbinden für DragQueryFile[/color]
[b]type[/b]
TForm1 = [b]class[/b](TForm)
SynEdit1: TSynEdit;
[b]procedure[/b] FormCreate(Sender: TObject);
[b]private[/b]
[color=#000080]{ Private-Deklarationen }[/color]
[color=#000080]// Routine für die Verarbeitung der Message WM_DROPFILES[/color]
[b]procedure[/b] GetDroppedFileNames([b]var[/b] msg : TWMDropFiles); message WM_DROPFILES;
[b]public[/b]
[color=#000080]{ Public-Deklarationen }[/color]
[b]end[/b];
[b]var[/b]
Form1: TForm1;
[b]implementation[/b]
[color=#000080]{$R *.DFM}[/color]
[b]procedure[/b] TForm1.GetDroppedFileNames([b]var[/b] msg : TWMDropFiles);
[b]var[/b]
sFileName : [b]string[/b];
dwFileCount : cardinal;
i : cardinal;
dwReqdLength : cardinal;
[b]begin[/b]
[color=#000080]// Anzahl der per Drag 'n' Drop übergebenen Dateipfade[/color]
[color=#000080]// Hier sollte es nur eine sein, bei mehreren würde nur[/color]
[color=#000080]// die letzte Datei im SynEdit Fenster stehenbleiben[/color]
dwFileCount := DragQueryFile(msg.Drop,$FFFFFFFF,[b]nil[/b],0);
[b]for[/b] i := 0 [b]to[/b] dwFileCount - 1 [b]do[/b]
[b]begin[/b]
[color=#000080]// Pfadlänge ermitteln[/color]
dwReqdLength := DragQueryFile(msg.Drop,i,[b]nil[/b],1);
[color=#000080]// Dateinamen abfragen[/color]
sFileName := StringOfChar(#00,dwReqdLength+1);
DragQueryFile(msg.Drop,i,PChar(sFileName),dwReqdLength+1);
[color=#000080]// Datei laden[/color]
SynEdit1.Lines.LoadFromFile(sFileName);
[b]end[/b];
[b]end[/b];
[b]procedure[/b] TForm1.FormCreate(Sender: TObject);
[b]begin[/b]
[color=#000080]// Anmelden, dass Dateien per Drag 'n' Drop angenommen werden[/color]
DragAcceptFiles(self.Handle,true);
[b]end[/b];
Deine zweite Frage habe ich eventuell nicht so ganz verstanden.
Dateiverknüpfungen (z.B. *.txt wird bei Doppelclick mit Notepad geöffnet) werden über die Registry angelegt.
Unter HKEY_CLASSES_ROOT muss dazu ein Key angelegt werden, der den Dateityp zum Namen hat (Beispiel: .txt), darin wird ein Standardwert angelegt (Typ REG_SZ / String). Was darin steht, dient als weiterer Verweis, um im Beispiel zu bleiben: txtfile.
Unter dem jetzt zu ermittelnden Key HKEY_CLASSES_ROOT\txtfile wird noch eine Key Struktur angelegt, so dass das ganze dann so aussieht:
HKEY_CLASSES_ROOT\txtfile\shell\open\command
Hier wird wieder ein Standardwert angelegt, der den Pfad des Programmes enthält, das mit dem Dateityp verknüpft werden soll, sowie %1 damit auch etwas übergeben wird.
Wichtig:
Sowohl der Pfad, als auch %1 sollten jeweils in doppelete Anführungsstriche eingeschlossen werden, damit Leerzeichen im Pfad nicht zu Fehlern führen.