Należy odpowiednio obsłużyć komunikat WM_DROPFILES
. Więcej informacji do znalezienia w google. Łopatologicznie nie ma sensu, dawanie gotowca też nie ma sensu. Należy kombinować samodzielnie. Powtórzę to - niestety po raz kolejny w krótkim okresie czasu, dawając Wam gotowce, się Was krzywdzi. Dodam tylko, że należy zrobić sprawdzanie (są do tego odpowiednie moduły na necie i przykłady do wygooglowania) czy system nie jest przypadkiem Vistą lub nowszym. Jeżeli tak, to do akceptowania drag and drop należy zastosować poniższą procedurę. Jeżeli nie to wystarczy użycie funkcji DragAcceptFiles
z modułu ShellApi
. Oczywiście obsługując komunikat WM_DROPFILES
nalezy sprawdzać czy przeciągany element nie jest katalogiem, na przykład przy użyciu funkcji DirectoryExists
. Jeżeli interesują Ciebie też pliki o konkretnym rozszerzeniu to również je sprawdzaj. Natomiast ten wątek przenoszę do działu Newbie, ponieważ dotyczy on podstaw. I tam o takowe należy pytać.
procedure SetDragAndDropOnSystemsWIthUAC(Wnd : HWND; IsEnabled : boolean);
type
TChangeWindowMessageFilter = function(Msg : Cardinal; Action : Word) : Bool; stdcall;
const
Msg_Add = 1;
WM_COPYGLOBALDATA = $49;
var
DllHandle : THandle;
ChangeWindowMessageFilter : TChangeWindowMessageFilter;
begin
DllHandle := LoadLibrary('user32.dll');
if DllHandle > 0 then
begin
ChangeWindowMessageFilter := GetProcAddress(DllHandle, 'ChangeWindowMessageFilter');
if Assigned(ChangeWindowMessageFilter) then
begin
DragAcceptFiles(Wnd, IsEnabled);
ChangeWindowMessageFilter(WM_DROPFILES, Msg_Add);
ChangeWindowMessageFilter(WM_COPYGLOBALDATA, Msg_Add);
end;
end;
end;