AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verzeichnis mit Treeview verschieben

Ein Thema von mimi · begonnen am 9. Sep 2005 · letzter Beitrag vom 23. Okt 2005
Antwort Antwort
mimi

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

Verzeichnis mit Treeview verschieben

  Alt 9. Sep 2005, 13: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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.171 Beiträge
 
Delphi 12 Athens
 
#2

Re: Verzeichnis mit Treeview verschieben

  Alt 23. Okt 2005, 06:56
Tut mir Leid, aber eine "gute" Lösung hab ich hierfür auch nicht.
Das Einzige, was du da machen kannst, ist die Ursache für den Fehler zu entfernen.
Du mußt also den Grund herausfinden, warum die Datei gesperrt ist (also nicht verschoben werden kann) und dann diese Sperrung aufheben.

So, nun mal zu mir ^^
Ich habe leider auch soeine Fehlermeldung ... hat eventuell einen ähnlichen Grund.
Zitat:
---------------------------
Fehler beim Löschen der Datei oder des Ordners
---------------------------
Datei kann nicht gelöscht werden: Die Quelldatei oder vom Quelldatenträger kann nicht gelesen werden.
---------------------------
OK
---------------------------
Bei mir ist es aber nicht unbedingt nötig das Löschen auszuführen, alerdings soll im Fehlerfall etwas anderes gemacht werden.
Zuerst hatte ich es so versucht:
Delphi-Quellcode:
Try
  ...
  Result := SHFileOperation(ShellInfo) = S_OK;
Except
  ... was anderes
End;
Allerdings wurde dabei immernoch die "gemeine" Fehlermeldung angezeigt und das "Andere" wurde nicht ausgeführt.
Nach einigen Test bin ich nun darauf gekommen, daß zwar eine Fehlermeldung (samt dem nervigen Fehlergeräuch) ausgegeben, aber in Wirklichkeit wird keine Exception erzeugt, weßhalb natürlich der Except-Block nicht ausgeführt wird.
Und da es sich um keine Exception handelt, welche von Delphi's Fehlerbehandlungroutinen ausgewertet wird, ist es ebenfalls nicht möglich diesen "Fehler" per Try-Except zu unterdrücken.
Da jetzt natürlich das Try-Except "sinnlos" ist, wird es jetzt folgender Maßen behandelt und nun wird im Fehlerfall endlich auch das "Andere" ausgeführt.
Delphi-Quellcode:
Result := SHFileOperation(ShellInfo) = S_OK;
If not Result Then Begin
  ... was anderes
End;
Das Problem mit der erscheinenden "Fehlermeldung" bleibt aber erhalten.
Und da diese Meldung intern von SHFileOperation erzeugt und angezeigt wird, hab ich keine delphiengenen Möglichkeiten diese Meldung loszuwerden.

Gibt es also eine Möglichkeit dieses blöde Fehlerfenster abzustellen?
Ich hab ja leider (im WinSDK) nichts gefunden, womit dieses deaktiviert werden kann
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mimi

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

Re: Verzeichnis mit Treeview verschieben

  Alt 23. Okt 2005, 08:10
das Problem war damals auch das es einfach Textdateien waren die von anderen programmen nicht genutzt werden nur von meinem !
die fehlermeldung abzustellen löst leider nicht das problem.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Verzeichnis mit Treeview verschieben

  Alt 23. Okt 2005, 12:09
Hallo himitsu,

Zitat von himitsu:
Gibt es also eine Möglichkeit dieses blöde Fehlerfenster abzustellen?
hast du bei den Flags in SHFILEOPSTRUCT einmal FOF_NOERRORUI (Kein Fenster im Fehlerfall) verwendet?

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.171 Beiträge
 
Delphi 12 Athens
 
#5

Re: Verzeichnis mit Treeview verschieben

  Alt 23. Okt 2005, 17:45
Nö, hab ich nicht ... denn irgendwie hab ich das mit dem ERROR wohl übersehen -.-''
(hab nur die Attribute für NoConfirmation und AllowUndo)

Werd' es mal damit versuchen, aber es klingt schonmal vielversprechend ^^

[add]
So, das Problem ist gelöst.
Jetzt nur noch das Problem warum SHFileOperation überhaupt einen Fehler (Rückgabewert $0402 1026) meldet,
aber vorher werd' ich da noch einiges umstellen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz