Советы по Delphi

         

Drag & Drop c Win95 Explorer I


Вот что я почерпнул из эхоконференций:

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs,
ComCtrls;
type
TForm1 = class(TForm)procedure FormCreate(Sender: TObject);private{ Private declarations }PROCEDURE FileIsDropped ( VAR Msg : TMessage ) ; Message WM_DropFiles ;public{ Public declarations }end;
var
Form1: TForm1;
implementation
uses
shellapi;
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles( Handle,True ) ;end;

PROCEDURE TForm1.FileIsDropped ( VAR Msg : TMessage ) ;
VAR
hDrop : THandle ;fName : ARRAY[0..254] OF CHAR ;NumberOfFiles : INTEGER ;fCounter : INTEGER ;Names : STRING ;BEGIN
hDrop := Msg.WParam ;NumberOfFiles := DragQueryFile(hDrop,-1,fName,254);Names := '' ;FOR fCounter := 1 TO NumberOfFiles DO BEGINDragQueryFile(hDrop,fCounter,fName,254);// Здесь вы получаете один к одному имя вашего файла
Names := Names + #13#10 + fName ;END ;
ShowMessage('Бросаем '+IntToStr(NumberOfFiles) + ' файла(ов) : ' + Names );DragFinish ( hDrop);END ;

end.

[000089]


Прислал Aleksey :

{Так можно заставить окно принимать файлы, перетаскиваемые из проводника}
{ОБЯЗАТЕЛЬНО ПОМЕСТИТЕ В СЕКЦИЮ PRIVATE СТРОКИ
procedure CreateParams(var Params: TCreateParams); override;procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES;и не забудьте - ShellAPI поместить в uses}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited
CreateParams(Params);Params.ExStyle := Params.ExStyle or WS_EX_ACCEPTFILES; {сделаем окно способным принимать файлы}end;

procedure TForm1.WMDropFiles(var Message: TWMDropFiles);
var
aFile: array [0..255] of Char;//FilesCount : Integer;begin
inherited
;// FilesCount := DragQueryFile(Message.drop, $FFFFFFFF, nil, 0); {так можно узнать сколько файлов перетягивается}
begin{здесь можно поставить цикл открытия всех перетаскиваемых файлов
for N := 0 to FilesCount - 1 do DragQueryFile(Message.drop, N, aFile, 256);а в данном случае открывается только первый файл в списке}DragQueryFile(Message.drop, 0, aFile, 256);Memo1.Lines.LoadFromFile(aFile);end;DragFinish(Message.Drop);end;

procedure TForm1.FormCreate(Sender: TObject); {Form1.OnCreate}
begin
DragAcceptFiles(Handle, True); {сделаем окно неравнодушным к пролетающим над ним файлам}end;
[000117]



Содержание раздела