Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

Verzeichnis mit Treeview verschieben

  Alt 9. Sep 2005, 14:20
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;
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat