TForm1 = class(TForm)
...
private{ Private declarations }procedure WMDropFiles(var M: TWMDropFiles); message WM_DROPFILES;
...
end;
var
Form1: TForm1;
implementationuses
StrUtils, ShellAPI, ComObj, ShlObj, ActiveX;
procedure TForm1.FormCreate(Sender: TObject);
begin
...
DragAcceptFiles(Handle, True);
...
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
...
DragAcceptFiles(Handle, False);
...
end;
procedure TForm1.WMDropFiles(var M: TWMDropFiles);
var
hDrop: Cardinal;
n: Integer;
s: string;
begin
hDrop := M.Drop;
n := DragQueryFile(hDrop, 0, nil, 0);
SetLength(s, n);
DragQueryFile(hDrop, 0, PChar(s), n + 1);
DragFinish(hDrop);
M.Result := 0;
FileOpen(s);
end;
procedure TForm1.FileOpen(FileName: string);
beginif CompareText(ExtractFileExt(FileName), '.lnk') = 0 then
FileName := ResolveShortcut(Application.Handle, FileName);
DocName := ExtractFileName(FileName);
Caption := Application.Title + ' - ' + DocName;
...
end;
function ResolveShortcut(Wnd: HWND; ShortcutPath: string): string;
var
obj: IUnknown;
isl: IShellLink;
ipf: IPersistFile;
pfd: TWin32FindDataA;
begin
Result := '';
obj := CreateComObject(CLSID_ShellLink);
isl := obj as IShellLink;
ipf := obj as IPersistFile;
ipf.Load(PWChar(WideString(ShortcutPath)), STGM_READ);
with isl dobegin
Resolve(Wnd, SLR_ANY_MATCH);
SetLength(Result, MAX_PATH);
GetPath(PChar(Result), Length(Result), pfd, SLGP_UNCPRIORITY);
Result := PChar(Result);
end;
end;
Программа на Delphi!
Код, который я предоставил, является простым примером, как принимать и обрабатывать файлы, которые были сброшены на форму Windows при помощи класса TForm.
Вот разбивка функций каждого процедуры:
WMDropFiles: Эта процедура вызывается, когда файл сбрасывается на форму. Она получает объект TWMDropFiles в качестве входного параметра, который содержит информацию о сброшенных файлах.
DragQueryFile: Функция, которая извлекает информацию о файлах, которые были сброшены на форму. В этом случае она используется для получения количества файлов и их путей.
DragFinish: Функция, которая вызывается после обработки сброшенных файлов.
Основной целью этого кода является:
Принять сброшенные файлы (включая shortcut) на форме Windows
Извлечь путь файла из сброшенного файла(ов)
Решить любые shortcut-ссылки (например, файлы .lnk) до их целевых путей
Обновить заголовок формы с именем открытого документа
Вот некоторые предложения и улучшения, которые вы могли бы рассмотреть:
Обработка ошибок: Код не обрабатывает ошибки должным образом. Например, если сброшенный файл не является валидным путем или не может быть решен как shortcut-ссылка, может возникнуть ошибка.
Вопросы безопасности: Когда загружаются файлы из внешнего источника (например, файл, который был сброшен пользователем), вам нужно убедиться, что файл безопасен для открытия и обработки.
Организация кода: Процедура WMDropFiles выполняет несколько задач, включая извлечение путей файлов, решение shortcut-ссылок и обновление заголовка формы. Вам может быть полезно разбить это на отдельные процедуры или методы для лучшей организации кода и читаемости.
В целом, этот код предоставляет хороший старт для обработки сброшенных файлов в приложении Delphi.
В статье описывается способ приема ядриков (shortcut) на форме Delphi при помощи метода DragAcceptFiles и класса TShellLink.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.