Hallo,
habe wieder ein problem mit der Treeview:
ich möchte einen Eintrag per Draq und drop in einer TreeView verschieben(geht auch, code ist aus diesem forum).nun wollte ich gerne da ich mit verzeichnisen arbeite das qullverzeichnis zum zielverzeichnis verschieben.
in der ShowMessageBox sieht alles richtig aus nur er sagt:
Delphi-Quellcode:
---------------------------
Fehler beim Verschieben der Datei oder des Ordners
---------------------------
Datei kann nicht verschoben werden: Die Quelldatei oder vom Quelldatenträger kann nicht gelesen werden.
---------------------------
OK
---------------------------
den code habe ich wie gesagt aus dem forum und leicht angepasst:
Delphi-Quellcode:
function MoveDir(const fromDir, toDir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_Move;
fFlags := FOF_NoConfirmMkDir + FOF_NOCONFIRMATION;
pFrom := PChar(fromDir + #0);
pTo := PChar(toDir + #0)
end;
Result := (0 = ShFileOperation(fos));
end;
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
AnItem: TTreeNode;
AttachMode: TNodeAttachMode;
HT: THitTests;
str:String;
begin
if TreeView1.Selected = nil then Exit;
HT := TreeView1.GetHitTestInfoAt(X, Y);
AnItem := TreeView1.GetNodeAt(X, Y);
if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then
begin
if (htOnItem in HT) or (htOnIcon in HT) then AttachMode := naAddChild
else if htNowhere in HT then AttachMode := naAdd
else if htOnIndent in HT then AttachMode := naInsert;
TreeView1.Selected.MoveTo(AnItem, AttachMode);
// Showmessage(Edit1.Text+#13+ListenDir + GetTreeViewPath(TreeView1.Selected));
str:=Edit1.Text;
Edit1.Text:='';
SetCurrentDir('');
MoveDir(str,ListenDir + GetTreeViewPath(TreeView1.Selected));
end;
// in listenDir steht folgendes:
// D:\Daten\eigene\delphi\tools\programmstarter\system\listen\
// + der Knotenname der gerade ausgewählt wurde
ich weiß einfach nicht mehr weiter, für jeden tip währe ich dankbar !
(ich nuzte zum erstenmal wieder eine TreeView, und habe diese komponenten noch nicht ganz verstanden
)
Edit:
in edit steht folgendes:
Edit1.Text:=ListenDir + GetTreeViewPath(TreeView1.Selected);
und den GetTreeViewPath habe ich auch wieder aus dem Forum hier:
Delphi-Quellcode:
function GetTreeViewPath(Uebergeordnet:TTreeNode):String;
Var
Node : TTreeNode;
Path : String;
Begin
if Uebergeordnet <> NIL then begin
Node := Uebergeordnet;
Path := '';
Repeat
Path := Node.Text + '\' + Path;
Node := Node.Parent;
Until ( Node = Nil );
result:=Path;
end
else
result:='';
End;