Hallo zusammen,
ich habe hier eine TreeList mit einer Verzeichnisstruktur und ziehe Dateien aus dem Explorer mit folgendem Code hinein:
Code:
procedure TCSITEFORM.WMDROPFILES(var Msg: TMessage);
var
DropH: HDROP;
DroppedFileCount: Integer;
FileNameLength: Integer;
FileName: string;
I: Integer;
DropPoint: TPoint;
AnItem : TcxTreeListNode;
begin
case Msg.Msg of
WM_DROPFILES : begin
DropH := Msg.WParam;
try
DragQueryPoint(DropH, DropPoint);
AnItem := DOCTREELIST.GetNodeAt(DropPoint.X, DropPoint.Y) ;
if AnItem <> nil then
begin
DroppedFileCount := DragQueryFile(DropH, $FFFFFFFF, nil, 0);
for I := 0 to Pred(DroppedFileCount) do
begin
FileNameLength := DragQueryFile(DropH, I, nil, 0);
SetLength(FileName, FileNameLength);
DragQueryFile(DropH, I, PWideChar(FileName), FileNameLength + 1);
CreateNodefromDrop(AnItem, String(PWideChar(FileName)));
end;
end;
finally
DragFinish(DropH);
end;
Msg.Result := 0;
end;
else OldLBWindowProc(Msg);
end;
end;
Das funktioniert einwandfrei nur möchte ich jetzt auch wie Dateien (Nodes) aus der Treelist in den Explorer zurück ziehen.
Ich habe mir dazu die Komponente von Anders Melander angeschaut und versucht die "Source Demo" an zu passen. Hier wird einfach eine Datei aus einer Liste in den Explorer gezogen (kopiert).
Ich habe eine FileDragSource aber ich bekomme das nicht so angepasst, denn ich benötige die Treelist sowohl als source als auch als target. Target mit dem Code oben um Dateien von außen hinein zu ziehen und in der Treelist zu "verschieben" und Source um Dateien in den Explorer zurück zu ziehen.
Ich nutze die vorhandenen Events wie onDragDrop zum "verschieben" der Dateien in die Verzeichnisse innerhalb der TreeList.
Die FileDropSource von anders Melander bringt das aber leider durcheinander und erlaubt das kopieren innerhalb der Treelist, was ich aber nicht möchte.
Ich dachte mir jetzt ich könnte die FileDropSource von Anders Melander erst beim Verlassen der TreeList aktivieren aber sobald ich einen Node ziehe feuet onExit und onMouseLeave sofort.
Geht also nicht.
LG
Mirko