2009. október 8., csütörtök
Drag and Drop from FileManager
Problem/Question/Abstract:
Drag and Drop from FileManager
Answer:
You need to use these 3 functions from the ShellApi:
DragAcceptFiles - registers whether a window accepts dropped files
DragQueryFile - retrieves the filename of a dropped file
DragFinish - releases memory allocated for dropping files
uses
ShellApi;
..
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Form1.Handle, true);
Application.OnMessage := AppMessage;
end;
{ message handler procedure }
// Delphi 1: type DWord = longint; .. FileIndex := -1;
procedure TForm1.AppMessage(var Msg: Tmsg; var Handled: Boolean);
const
BufferLength: DWORD = 511;
var
DroppedFilename: string;
FileIndex: DWORD;
NumDroppedFiles: DWORD;
pDroppedFilename: array[0..511] of Char;
DroppedFileLength: DWORD;
begin
if Msg.message = WM_DROPFILES then
begin
FileIndex := $FFFFFFFF;
NumDroppedFiles := DragQueryFile(Msg.WParam, FileIndex,
pDroppedFilename, BufferLength);
for FileIndex := 0 to (NumDroppedFiles - 1) do
begin
DroppedFileLength := DragQueryFile(Msg.WParam, FileIndex,
pDroppedFilename, BufferLength);
DroppedFilename := StrPas(pDroppedFilename);
{ process the file name you just received }
end;
DragFinish(Msg.WParam); { important to free memory }
Handled := true;
end;
end;
Notes:
When dropping files, the DroppedFilename is the complete path, not just the filename.ext
It is possible to drag and drop just a directory. So if you are expecting filenames, you have to check for existence yourself.
The filenames come in uppercased.
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése