1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ShellApi ;
Const
WM_COPYGLOBALDATA = $49 ;
MSGFLT_ADD = 1 ;
type
TForm2 = class(TForm)
Label1: TLabel;
...
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
...
private
{ Déclarations privées }
protected
procedure WM_DropFiles(var Msg: TMessage); message WM_DROPFILES;
public
{ Déclarations publiques }
end;
var
Form2: TForm2;
...
ChangeWindowMessageFilter : function(Msg: uint; dwFlag : dword):BOOL; stdcall;
implementation
{$R *.dfm}
{ =========================================================== }
procedure TForm2.FormCreate(Sender: TObject);
begin
//la fenêtre accepte le glissement d'objets
ChangeWindowMessageFilter(WM_DROPFILES,1);
// ChangeWindowMessageFilterEx(Handle, WM_COPYGLOBALDATA, MSGFLT_ADD);
// ChangeWindowMessageFilterEx(Handle, WM_DROPFILES, MSGFLT_ADD);
DragAcceptFiles(Handle, True);
end;
{ =========================================================== }
procedure TForm2.WM_DropFiles(var Msg: TMessage);
// d'après le FAQ
var hDeposer: THandle;
countFiles, i: integer;
FileName: Array[0..255]Of Char;
begin
//Récupérer dans hDeposer le handle envoyé par le message WM_DROPFILES
hDeposer := THandle(Msg.wParam);
//Compter le nombre de fichiers déposés.
countFiles := DragQueryFile(hDeposer, UINT(-1), nil, 0);
for i := 0 to pred(countFiles) do
begin
//Déterminer le nom du ième fichier déposé
DragQueryFile(hDeposer, i, FileName, 255);
//Ajouter le nom du fichier dans le listbox
ListBox1.Items.Add(FileName);
end;
//Indiquer à Windows la fin du déposer
DragFinish(hDeposer);
end;
{ =========================================================== }
...
end. |
Partager