Я связал расширение файла с моей программой Delphi 2009.Я использовал метод вызова командной строки, чтобы передать имя файла в мою программу Delphi, чтобы его можно было открыть.
Однако я обнаружил, что при выборе нескольких файлов и одновременном нажатии на них все файлы открываются в отдельном экземпляре моей программы. Я спросил об этом , и, очевидно, решение состоит в том, чтобы использовать один из двух других методов Windows: DDE или IDropTarget .
Но DDE устарела и MSDNрекомендует метод IDropTarget.Также Ларс Труидженс в своем ответе мне говорит, что IDropTarget мог бы подойти лучше, если я уже использую возможности перетаскивания, которыми я являюсь.
В настоящее время это мой обработчик сброса:
private
procedure WMDropFiles(var WinMsg: TMessage);
message wm_DropFiles;
procedure TLogoAppForm.FormShow(Sender: TObject);
begin
DragAcceptFiles(Handle, true);
end;
procedure TLogoAppForm.WMDropFiles(var WinMsg: TMessage);
// From Delphi 3 - User Interface Design, pg 170
const
BufSize = 255;
var
TempStr : array[0..BufSize] of Char;
NumDroppedFiles, I: integer;
Filenames: TStringList;
begin
NumDroppedFiles := DragQueryFile(TWMDropFiles(WinMsg).Drop, $ffffffff, nil, 0);
if NumDroppedFiles >= 1 then begin
Filenames := TStringList.Create;
for I := 0 to NumDroppedFiles - 1 do begin
DragQueryFile(TWMDropFiles(WinMsg).Drop, I, TempStr, BufSize);
Filenames.Add(TempStr);
end;
OpenFiles(Filenames, '');
Filenames.Free;
end;
DragFinish(TWMDropFiles(WinMsg).Drop);
WinMsg.Result := 0;
end;
Теперь он принимает один или несколько файлов и открывает их по мере необходимости.Это очень старый код из книги по Delphi 3, но он все еще работает.
Я не могу найти какую-либо документацию о том, как реализовать IDropHandler в Delphi, и, в частности, о том, как заставить его работать собработчик удаления (выше), который я использую.
Может кто-нибудь сказать мне, как использовать IDropHandler, чтобы щелчок по выбранным файлам с моим расширением файла передавал их моему обработчику удаления, и моя программа могла открывать все файлынажали?