![]() |
Knoten makieren über Buttonclick event
Hallo liebe Delphi user,
seit einiger Zeit sitze ich nun an meinem Programm und halte mich nun schon fast eine Woche an diesem Problem auf. Ich habe eine art Browser / Explorer geschaffen wo über deine ADS Datenbank HTML Seiten in eine Navbar mit TreeView eingelesen und in einem TWebBrowser angezeigt werden können. Mein Problem besteht jetzt darin das ich oben (wie auch im Windows Explorer) einen Vor- und Zurückbutton habe. Diese besitzen ausserdem noch eine Historylist die in einem PopupMenu dargestellt wird und durch einen Dyn. Array erzeugt wird (wenn eine neue Seite aufgerufen wird). Diese Liste beschränkt sich auf maximal 10 Einträge. Soweit funktioniert die Navigation mit Vor und zurück usw auch ABER ... wenn ich auf zurück Klicke bleibt die Makierung der TreeView auf dem zuletzt angeklickten Knoten / Item stehen und ich kriege es einfach nicht hin, das die Makierung sozusagen beim Buttonclick "mit springt". Ich habs nun mitlerweile über den AbsolutIndex probiert ... nada ... und auch über die ItemId (beim klick auf item ) und dann versucht über GetNode das Item wieder anzusprechen was auch gescheitert ist. GetNode sollte ja eigentlich einen Knoten zurück liefern und somit könnte ich ja über die Select function den Knoten / das Item wieder ansprechen oder nicht ? Nur warum gibt mir GetNode keinen Knoten zurück ? Ich bin mittlerweile total Ratlos. Hatte allerdings noch einen Tip bekommen dies über einen Pointer zu realisieren nur hab ich damit noch nie gearbeitet und weiss nicht wirklich wie ich das anstellen soll. Würde mich über Hilfe freuen mfg ePex |
Re: Knoten makieren über Buttonclick event
Herzlich willkommen in der Delphi-PRAXiS, epex.
Jeder Node in deiner TreeView hat zwei wesentliche Eigenschaften: Text und Data. In Text wird eingetragen, was der Benutzer sehen soll und in Data wird ein Zeiger auf die eigentlichen Daten gespeichert. Das kann die RecNo einer Query sein oder der Primary Key eines Tabelleneintrages - oder auch ein Zeiger auf eine interne Speicherstruktur, ein Objekt, einen Record ... Deine History-Funktion kannst du auf mindestens zwei Arten implementieren: Speicherst du beim Aufbau der TreeView auch in der internen Speicherstruktur einen Zeiger auf den TreeNode, dann hast du später eine Möglichkeit diesen einfach zum selektierten Knoten zu machen. Verzichtest du auf diesen Rückverweis, dann musst du den Pfad zum Knoten aus deinen internen Daten herleiten. Freundliche Grüße vom marabu |
Re: Knoten makieren über Buttonclick event
Danke für die schnelle Antwort
also in meinem Datenbank Record wird schon die ID als lfdNr gespeichert ja nur kann ich nicht einfach den Knoten wegspeichern im Array oder Record und dann später wieder aufrufen über die Select function ? Das wäre ja schliesslich am einfachsten. Könntest du mir sonst ein Beispiel geben für deine "Beschreibung" ? ePex |
Re: Knoten makieren über Buttonclick event
Hallo,
Zitat:
Delphi-Quellcode:
Später kannst du dann über den Knoten den Record der Query identifizieren oder über die Datensatznummer des Records den zugehörigen Knoten:
// ...
tn := TreeView.Nodes.AddChildObject(Query.FieldByName('NAME').AsString, Pointer(Query.RecNo)); NodeMap.AddObject(IntToStr(Query.RecNo), tn); // ...
Delphi-Quellcode:
Der zweite von mir beschriebene Weg ist interessant, wenn die Daten über Strings identifiziert werden, wie zum Beispiel die Namen von Dateien über einen Pfad. So kann man auf die Assoziation von Knoten und Record verzichten und kann über einen Suchalgorithmus den Knoten bei Bedarf im Baum lokalisieren. Performanter ist der erste Weg.
var
tn: TTreeNode; begin Query.RecNo := Integer(TreeView.Selected.Data); with NodeMap do TTreeNode(Objects[IndexOf(IntToStr(Query.RecNo))]).Selected := True; end; Freundliche Grüße |
Re: Knoten makieren über Buttonclick event
Hiho
wollte mich nur nochmal melden nach der woche also hab auf arbeit viel rumprobiert und rumgespielt und lass beim createn der form nun einfach alle knoten in die liste mit id wegspeichern und ruf sich dann einfach beim buttonklick über den indexof wieder ab also genauso wie du geschrieben hast ;) danke für deine hilfe hat gut geholfen sry für die nichtvorhandene rechtschreibung aber bin nen bisschen in eile :D so long epex bis zum nächsten mal ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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