![]() |
AW: In einem TreeView einen Knoten erstellen
Hi Redeemer
Zitat:
Zum aktuellen Stand: Dank deines Codescnipsels funktioniert es nun soweit. Allerdings erst, nachdem ich den bewussten Knoten wieder zugeklappt habe - der neue Knoten klebt dann als letzter im Childbaum. Grundsätzlich habe ich zwei Möglichkeiten:
Delphi-Quellcode:
Die Prozedur war eigentlich nur ein Test. Der Vorteil: für die angelegte Datei wird bei aufklappen des Parentnodes auch 'automatisch' ein Knoten erzeugt. Automatisch heisst hier: Wenn der ParentKnoten (In meinen Beispielen 'P:\') aufgeklappt wird, startet die Komponente TFileSearcher eine Dateisuche und ruft jedesmal, wenn ein Ordner oder eine Datei gefunden wurde, die Prozedur AddNewNode des PathfinderFrames auf:
procedure TOpenFileFrame.Verzeichniserstellen1Click(Sender: TObject);
var LRealName, LDirectoryPath, NewString: string; ClickedOK: Boolean; begin if FSelectedNode <> nil then begin LRealName := PNameRec(FSelectedNode.Data)^.RealName; //PNameRec(FSelectedNode.Data)^.RealName NewString := 'Geben sie einen Verzeichnisnamen ein '; ClickedOK := InputQuery('Input Box', 'Prompt', NewString); if ClickedOK then { NewString contains new input string. } begin LDirectoryPath := FPopUpPath +'\' + NewString; end; TDirectory.CreateDirectory(LDirectoryPath); end; end;
Delphi-Quellcode:
Der Nachteil: Ich habe keine Möglichkeit, den neu angelegten direkt umzubenennen, wie es zB. im Explorer der Fall ist, sondern ich muss den neuen Namen per Inputbox eingeben.
procedure TOpenFileFrame.AddNewNode(ParentNode: TTreeNode; const aCaption,
aRealName: string; aIsdirectory: Boolean); var Node: TTreeNode; NameRec: PNameRec; Lextension: String; begin Node := TVFilesExplorer.Items.AddChild(ParentNode, aCaption); if aIsdirectory then begin Node.ImageIndex := 1; Node.SelectedIndex := 1; (* Dummy-Knoten anlegen *) // 'alle Dateien', '.pdf', '.Docx', '.bmp', '.nef', '.jpg', '.png TVFilesExplorer.Items.AddChild(Node, 'dummy'); end else begin Node.ImageIndex := 2; Node.SelectedIndex := 2; FPathlist.Add(aRealName); Lextension := ExtractFileExt(aRealName); // Hier wird die Übereinstimmung mit dem aktuellen Node.Enabled := False; // Datefilter (Dateiendung) festgestellt. Wenn nein, if (FFileType = Lextension) then // ist der eingefügte Node nicht Enabled Node.Enabled := true; if (FFileType = 'alle Dateien') then Node.Enabled := true; end; New(NameRec); NameRec^.RealName := aRealName; NameRec^.Caption := aCaption; NameRec^.IsDirectory := aIsdirectory; Node.Data := NameRec; end; Die zweite Möglichkeit wäre (gewesen?), einen Knoten zu erzeugen, diesen in den Editmodus zu versetzen und analog zum Explorer umzubennen - aber gerade dies scheint nicht zuverlässig zu funktionieren. Gruss Delbor |
AW: In einem TreeView einen Knoten erstellen
Zitat:
|
AW: In einem TreeView einen Knoten erstellen
Hi Reedemer
Das hier war dein Beispiel aus Beitrag #10 (um die auskommentierten Zeilen gekürzt):
Delphi-Quellcode:
Mit der von dir eingefügten Zeile wird der Knoten aufgeklappt. Ob das nun wirklich so war oder nicht; der Knoten schien nicht da zu sein - aber er war es definitiv, nachdem ich ihn erst zu- und dann wieder aufgeklappt hatte.
procedure TForm1.uwas1Click(Sender: TObject);
var Node: TTreeNode; begin begin Node := TVFilesExplorer.Items.AddChild(FPopUpNode, 'Neu'); FPopupNode.Expand(True); // <=== Die von dir eingefügte Zeile Node.ImageIndex := 3; Node.SelectedIndex := 3; Node.EditText; end end; Im Moment allerdings steht mir Delphi nicht wirklich zur Verfügung, da ich den Debugmodus nicht starten kann; Kaspersky hat mir die von Delphi erstellte EXE als Virus eingestuft und hindert Delphi daran, eine neue zu erstellen. Und wie ich dem Kerl nun beibringe, dass er das gefälligst lassen soll, hab ich noch nicht mit letzter Sicherheit herausgefunden. Gruss Delbor |
AW: In einem TreeView einen Knoten erstellen
Kaspersky als Delphi-Entwickler... Kein Kommentar.
|
AW: In einem TreeView einen Knoten erstellen
Hi Redeemer
Zitat:
Der hat mir schon öfters EXE-Dateien vor allem von älteren Beispielen gelöscht, aber dass ich das Projekt nicht mehr kompilieren konnte, ist mir noch nie passiert. Gruss Delbor |
AW: In einem TreeView einen Knoten erstellen
Hi zusammen
Ich habe die Lösung gefunden und denke, sie könnte für den einen oder anderen von Interesse sein. Das 'Zauberwort' heisst Treeview.Expanded. Doch der Reihe nach:
Delphi-Quellcode:
Damit zeige ich ein Popupmenü an. Ursprünglich hatte ich dazu das Ereignis OnContextPopup benutzt.
procedure TOpenFileFrame.TVFilesExplorerMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var AnItem: TTreeNode; P: TPoint; begin if Button =(mbRight) then begin AnItem := TVFilesExplorer.GetNodeAt(X, Y); if AnItem <> nil then begin FPopUpNode := AnItem; FPopUpPath := PNameRec(AnItem.Data)^.RealName; FPopUpPoint := Point(x,y); end; P := ClientToScreen(Point(x,y)); PopupMenu1.PopupComponent := TVFilesExplorer; PopupMenu1.Popup(P.X, P.Y); end; end;
Delphi-Quellcode:
Die auskommentierten Zeilen zeigen meinen Fehler: Wenn FPopUpNode expandiert wird, startet der TFilesearcher eine Suche, die alle Dateien und Ordner zurückliefert, die sich im Pfad des FPopUpNode befinden. Dabei wird pro Datei/Ordner ein Knoten erzeugt und der oben in den auskommentiertenn Zeilen erzeugte Knoten offenbar verworfen - auf jeden Fall war der Knoten nachher nicht da.
procedure TOpenFileFrame.Ordnererstellen1Click(Sender: TObject);
var Node: TTreeNode; LIsdirectory: Boolean; NameRec: PNameRec; LDirectoryPath, LCaption, LRealName, X,Y: String; begin if FPopUpNode <> nil then begin LIsdirectory := PNameRec(FPopUpNode.Data)^.IsDirectory; if LIsdirectory then begin // Node := TVFilesExplorer.Items.AddChild(FPopUpNode, 'Neuer Ordner'); // Node.ImageIndex := 3; // Node.SelectedIndex := 3; // // Node.EditText; FPopupNode.Expand(True); end; end; end; Das hab ich wie folgt lösen können:
Delphi-Quellcode:
Das erzeugt mir unmittelbar unter FPopUpNode den gewünschten Knoten. Wie beabsichtigt, soll der Standardname des Knotens von 'Neuer Ordner' wie im Explorer in den gewünschte Namen geändert werden. Also nicht über einen Inputdialog. Dazu werde ich die jetzt auskommentierte Zeile aktivieren.
procedure TOpenFileFrame.TVFilesExplorerExpanded(Sender: TObject;
Node: TTreeNode); begin Node := TVFilesExplorer.Items.AddChildFirst (FPopUpNode, 'St.Gallen in der Ostschweiz'); Node.ImageIndex := 3; Node.SelectedIndex := 3; // Node.EditText; end; Der eigentliche Ordner im Verzeichnis FPopUpNode wird dann erstellt, wenn der ![]() Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz