można zrobić zapisując się do rejestru do rozszerzenia pod kluczem Shell\costam\command i potem nazwe pliku otrzymujesz pod ParamStr(1) ale jeśli chcesz tak jak np WinRAR że rozwija się menu i są ikonki to musisz pokombinować, albo użyć np płatnego komponentu Shell+
zapis w rejestrze (kod przy jakimś np buttonie przypisz lub w oncreate np):
uses Registry;
var rejestr:TRegistry;rozsz,temp:string;
begin
rozsz:='txt'; // do plików z rozszerzeniem txt
rejestr:=TRegistry.Create;
rejestr.RootKey:=HKEY_CLASSES_ROOT;
rejestr.OpenKey('.'+rozsz,true); if not ValueExists('') then rejestr.WriteString('',rozsz+'file');
temp:=rejestr.ReadString('');
rejestr.CloseKey;
rejestr.OpenKey(temp+'\shell\mojprogram',true);
rejestr.WriteString('','Otwórz za pomocą mojego programu');
rejestr.OpenKey(temp+'\shell\mojprogram\command',true);
rejestr.WriteString('','"'+ParamStr(0)+'" "%1"');
rejestr.CloseKey;
rejestr.Free;
end;
a potem jak chcesz się odwołać do pliku który w ten sposób otworzono (np w oncreate):
var plik:TextFile;
begin
if ParamCount<1 then Halt; // jeśli nie wywołano z menu kontekstowego (znaczy sie nie ma parametrów bo można też ręcznie wywołać)
Memo1.Lines.LoadFromFile(ParamStr(1)); // władowanie pliku do memo
end;
kod pisałem z głowy to <ort>na pewno</ort> ma błędy, ale mniej/więcej zarys jest taki :)