100% found this document useful (1 vote)
15 views2 pages

Windows, Messages, Sysutils, Classes, Graphics, Controls, Forms, Dialogs, Stdctrls

Uploaded by

Compro Qualcosa
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
15 views2 pages

Windows, Messages, Sysutils, Classes, Graphics, Controls, Forms, Dialogs, Stdctrls

Uploaded by

Compro Qualcosa
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure WMDROPFILES(var Msg: TMessage);
procedure LBWindowProc(var Message: TMessage);
procedure AddFile(sFileName: string);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

uses
ShellAPI;

var
OldLBWindowProc: TWndMethod;

procedure TForm1.AddFile(sFileName: string);


begin
ListBox1.Items.Add(sFilename);
end;

procedure TForm1.FormCreate(Sender: TObject);


begin
OldLBWindowProc := ListBox1.WindowProc; // store defualt
WindowProc
ListBox1.WindowProc := LBWindowProc; // replace default
WindowProc
DragAcceptFiles(ListBox1.Handle, True); // now ListBox1 accept
dropped files
end;

procedure TForm1.FormDestroy(Sender: TObject);


begin
ListBox1.WindowProc := OldLBWindowProc;
DragAcceptFiles(ListBox1.Handle, False);
end;

procedure TForm1.LBWindowProc(var Message: TMessage);


begin
if Message.Msg = WM_DROPFILES then
WMDROPFILES(Message); // handle WM_DROPFILES message
OldLBWindowProc(Message);
// call default ListBox1 WindowProc method to handle all other
messages
end;

procedure TForm1.WMDROPFILES(var Msg: TMessage);


var
pcFileName: PChar;
i, iSize, iFileCount: integer;
begin
pcFileName := ''; // to avoid compiler warning message
iFileCount := DragQueryFile(Msg.wParam, $FFFFFFFF, pcFileName,
255);
for i := 0 to iFileCount - 1 do
begin
iSize := DragQueryFile(Msg.wParam, i, nil, 0) + 1;
pcFileName := StrAlloc(iSize);
DragQueryFile(Msg.wParam, i, pcFileName, iSize);
if FileExists(pcFileName) then
AddFile(pcFileName); // method to add each file
StrDispose(pcFileName);
end;
DragFinish(Msg.wParam);
end;

end.

You might also like