Hi Redeemer
D2009. Wenn's nicht geht, liegt's vielleicht an D5. Probier doch mal nur das Hinzufügen in einem Minimalbeispiel ganz ohne Popup.
Zuerst war ich überrascht, was Delphi5 angeht - aber dann bemerkte ich, dass das so im Eingangspost steht. Meine aktuell eingesetzte Version kannst du jedem meiner Beiträge entnehmen.
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:
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;
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:
Delphi-Quellcode:
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;
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.
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