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

Как перетаскивать файлы (как принимать "перетаскиваемые" файлы)?

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

При получении программой файлов, окну посылается сообщение WM_DROPFILES.

При помощи функции DragQueryFile можно определить количество и имена файлов.

При помощи функции DragQueryPoint можно определить координату мыши в тот момент,

когда пользователь "отпустил" файлы.

Эта программа открывает все "перетащенные" в нее файлы.

Причем, если пользователь перетащил файлы в PageControl1, то в PageControl1 эти файлы и откроются.

Code:

...
public
   procedure WMDropFiles(var Msg: TWMDropFiles);
     message WM_DROPFILES;
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.DFM}
 
uses ShellAPI, stdctrls;
 
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
HF: THandle;
s: array [0..1023] of char;
i, FileCount: integer;
p: TPoint;
ts: TTabSheet;
memo: TMemo;
begin
HF := Msg.Drop;
FileCount := DragQueryFile(HF, $FFFFFFFF, nil, 0);
for i := 0 to FileCount - 1 do begin
   DragQueryFile(HF, i, s, sizeof(s));
   ts := TTabSheet.Create(nil);
   DragQueryPoint(HF, p);
   if PtInRect(PageControl1.BoundsRect, p)
     then ts.PageControl := PageControl1
     else ts.PageControl := PageControl2;
   ts.Caption := ExtractFileName(s);
   memo := TMemo.Create(nil);
   memo.Parent := ts;
   memo.Align := alClient;
   memo.Lines.LoadFromFile(s);
end;
DragFinish(HF);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
PageControl1.Align := alLeft;
PageControl2.Align := alClient;
DragAcceptFiles(Form1.Handle, true);
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
DragAcceptFiles(Form1.Handle, false);
end;

 

 

Даниил Карапетян.

Email: delphi4all@narod.ru


Code:

{ На эту форму можно бросить файл (например из проводника)
и он будет открыт }
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,StdCtrls,
ShellAPI {обязательно!};
 
type
TForm1 = class(TForm)
   Memo1: TMemo;
   FileNameLabel: TLabel;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
protected
 {Это и есть самая главная процедура}
   procedure WMDropFiles(var Msg: TMessage); message wm_DropFiles;
end;
 
var
Form1: TForm1;
implementation
{$R *.DFM}
 
procedure TForm1.WMDropFiles(var Msg: TMessage);
var
  Filename: array[0 .. 256] of Char;
  Count   : integer;
begin
{ Получаем количество файлов (просто пример) }
  nCount := DragQueryFile( msg.WParam, $FFFFFFFF,
    acFileName, cnMaxFileNameLen);
{ Получаем имя первого файла }
DragQueryFile( THandle(Msg.WParam),
    0, { это номер файла }
    Filename,SizeOf(Filename) ) ;
{ Открываем его }
with FileNameLabel do begin
  Caption := LowerCase(StrPas(FileName));
  Memo1.Lines.LoadfromFile(Caption);
end;
{ Отдаем сообщение о завершении процесса }
DragFinish(THandle(Msg.WParam));
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
{ Говорим Windows, что на нас можно бросать файлы }
DragAcceptFiles(Handle, True);
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
{ Закрываем за собой дверь золотым ключиком}
DragAcceptFiles(Handle, False);
end;
end.

 

Источник:

http://dmitry9.nm.ru/info/

Программа Delphi, позволяющая пользователям опускать файлы на форму и автоматически открывать их в компоненте Memo.

Вот шаг за шагом, как она работает:

  1. Процедура WMDropFiles вызывается, когда пользователь опускает файлы на форму. Эта процедура получает параметр TMessage, содержащий информацию о опущенных файлах.
  2. Программа использует функцию DragQueryFile для получения количества и имен опущенных файлов.
  3. Для каждого файла программа создает новый лист табличной формы и устанавливает его заголовок в имя файла. Она также загружает содержимое файла в компонент Memo на этом листе.
  4. Программа использует функцию DragFinish для указания, что операция опускания файлов завершена.

Процедура FormCreate вызывается при создании формы и настраивает форму для принятия опущенных файлов, вызвав функцию DragAcceptFiles с параметром True.

Процедура FormDestroy вызывается при уничтожении формы и настраивает форму для прекращения принятия опущенных файлов, вызвав функцию DragAcceptFiles с параметром False.

Обратите внимание, что это только пример кода, и вы можете захотеть изменить его, чтобы соответствовать вашим конкретным потребностям. Например, вы можете захотеть обрабатывать ошибки более надежно или предоставлять дополнительную обратную связь пользователю.

Также помните, что для работы этого кода вам нужно добавить компонент Memo на вашу форму и установить его имя в "Memo1".

Статья описывает способ перетаскивания файлов в программу на языке Delphi и обработку полученных файлов с помощью функции DragQueryFile, а также использование сообщения WM_DROPFILES для открытия файлов.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-03-21 09:53:34/0.0036859512329102/0