Как перетаскивать файлы?
как принимать "перетаскиваемые" файлы.
При получении программой файлов, окну посылается сообщение WM_DROPFILES.
При помощи функции DragQueryFile можно определить количество и имена файлов.
При помощи функции DragQueryPoint можно определить координату мыши в тот момент,
когда пользователь "отпустил" файлы.
Эта программа открывает все "перетащенные" в нее файлы.
Причем, если пользователь перетащил файлы в PageControl1, то в PageControl1 эти файлы и откроются.
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;
Даниил Карапетян.
На сайте http://delphi4all.narod.ru Вы найдете еще более 100 советов по Delphi.
Email: delphi4all@narod.ru
и он будет открыт }
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/
Большинство программ, предназначенных для работы с текстом, предоставляют пользователю возможность перетаскивать файлы в свою программу, а мы что лысые... :-)) ...щас тоже организуем:
Подключаем модуль ShellAPI в области uses
По созданию окна [событие OnCreate] пишем такой код:
Когда вы перетаскиваете файл на своё приложение и отпускаете кнопку мыши, Windows посылает этому окну сообщение wm_DropFiles. Сообщение сопровождается именем файла. Обработчик этого сообщения нужно включить в раздел protected класса формы. Вставьте следующий код:
procedure WMDropFiles (var Msg: TMessage); message wm_DropFiles;
Далее обрабатываем сообщение:
var
FileName: array[0..256] of char;
begin
DragQueryFile(THandle(Msg.WParam), 0, FileName, SizeOf(Filename));
Memo1.Lines.LoadFromFile(FileName);
DragFinish(THandle(Msg.WParam));
end;
или так:
var
i, amount, size: integer;
Filename: PChar;
begin
inherited;
Amount := DragQueryFile(Msg.WParam, $FFFFFFFF, Filename, 255);
for i := 0 to (Amount - 1) do
begin
size := DragQueryFile(Msg.WParam, i, nil, 0) + 1;
Filename := StrAlloc(size);
DragQueryFile(Msg.WParam, i, Filename, size);
listbox1.items.add(StrPas(Filename));
StrDispose(Filename);
end;
DragFinish(Msg.WParam);
end;
http://delphiworld.narod.ru/
DelphiWorld 6.0
Отправить комментарий