Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как пpинимать яpлыки пpи пеpетягивании их на контpол

Delphi , Синтаксис , Drag and Drop

Как пpинимать яpлыки пpи пеpетягивании их на контpол

Автор: Nomadic


TForm1 = class(TForm)
  ...
  private
    { Private declarations }
    procedure WMDropFiles(var M: TWMDropFiles); message WM_DROPFILES;
  ...
end;

var
  Form1: TForm1;

implementation

uses
  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);
begin
  if 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 do
  begin
    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.

Вот разбивка функций каждого процедуры:

  1. WMDropFiles: Эта процедура вызывается, когда файл сбрасывается на форму. Она получает объект TWMDropFiles в качестве входного параметра, который содержит информацию о сброшенных файлах.
  2. DragQueryFile: Функция, которая извлекает информацию о файлах, которые были сброшены на форму. В этом случае она используется для получения количества файлов и их путей.
  3. DragFinish: Функция, которая вызывается после обработки сброшенных файлов.

Основной целью этого кода является:

  • Принять сброшенные файлы (включая shortcut) на форме Windows
  • Извлечь путь файла из сброшенного файла(ов)
  • Решить любые shortcut-ссылки (например, файлы .lnk) до их целевых путей
  • Обновить заголовок формы с именем открытого документа

Вот некоторые предложения и улучшения, которые вы могли бы рассмотреть:

  1. Обработка ошибок: Код не обрабатывает ошибки должным образом. Например, если сброшенный файл не является валидным путем или не может быть решен как shortcut-ссылка, может возникнуть ошибка.
  2. Вопросы безопасности: Когда загружаются файлы из внешнего источника (например, файл, который был сброшен пользователем), вам нужно убедиться, что файл безопасен для открытия и обработки.
  3. Организация кода: Процедура WMDropFiles выполняет несколько задач, включая извлечение путей файлов, решение shortcut-ссылок и обновление заголовка формы. Вам может быть полезно разбить это на отдельные процедуры или методы для лучшей организации кода и читаемости.

В целом, этот код предоставляет хороший старт для обработки сброшенных файлов в приложении Delphi.

В статье описывается способ приема ядриков (shortcut) на форме Delphi при помощи метода DragAcceptFiles и класса TShellLink.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Drag and Drop ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:33:28/0.0053989887237549/1