Ciao,
in una listbox voglio trascinare dei file selezionati dall'explorer do windows.
ho trovato del codice in rete che funziona bene ad eccezione di un controllo:
in pratica quando rilascio i file trascinati questi devono essere copiati nella listbox solo se il mouse e' sul componente listbox e non se è sulla restante parte della form.
grazie
il codice e' questo:
codice:
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
i, x, cnt : integer;
buffer, F : string;
begin
//If you only want ListBox1 to accept the files
//if they are being dropped directly on it...
questo e' il controllo che non mi funziona,
quando rilascio il mouse sulla listbox questa ferifica non e' valida (false)
se tolgo l' 'IF' i file vengono trascritti anche se li rilascio sul resto della form.
if WindowFromPoint(mouse.CursorPos) = cxListBoxFileWord.Handle then
begin
cnt := DragQueryFile(Msg.Drop, $FFFFFFFF, nil, MAX_PATH);
SetLength(buffer, MAX_PATH *2);
for i := 0 to cnt -1 do
begin
x := DragQueryFile(Msg.Drop, i, nil, MAX_PATH *2);
if (x > 0) and (x < MAX_PATH *2) then
begin
DragQueryFile(Msg.Drop, i, @buffer[1], x +1);
F := Copy(buffer, 1, x);
// do something with F...
if cxListBoxFileWord.Items.IndexOf(F) < 0 then
cxListBoxFileWord.Items.Add(F);
end;
end;
end;
DragFinish(Msg.Drop);
Msg.Result := 0;
end;