AGB  ·  Datenschutz  ·  Impressum  







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

Knoten makieren über Buttonclick event

Ein Thema von epex · begonnen am 3. Jun 2007 · letzter Beitrag vom 8. Jun 2007
Antwort Antwort
epex

Registriert seit: 3. Jun 2007
Ort: schwerin
11 Beiträge
 
Delphi 2005 Professional
 
#1

Knoten makieren über Buttonclick event

  Alt 3. Jun 2007, 12:59
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
  Mit Zitat antworten Zitat
marabu

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

Re: Knoten makieren über Buttonclick event

  Alt 3. Jun 2007, 13:15
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
  Mit Zitat antworten Zitat
epex

Registriert seit: 3. Jun 2007
Ort: schwerin
11 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Knoten makieren über Buttonclick event

  Alt 3. Jun 2007, 14:36
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
  Mit Zitat antworten Zitat
marabu

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

Re: Knoten makieren über Buttonclick event

  Alt 4. Jun 2007, 07:47
Hallo,

Zitat von epex:
... kann ich nicht einfach den Knoten wegspeichern im Array oder Record und dann später wieder aufrufen über die Select function? ...
das ist genau der erste Weg, den ich beschrieben habe. Wenn die Query, mit der du dir die Daten für das Befüllen der TreeView besorgt hast, offen bleibt, dann hast du die Daten ja immer verfügbar. Um den jeweiligen Knoten und seinen zugehörigen Record wechselseitig miteinander zu verknüpfen kannst du eine Zwischenstruktur in Form einer assoziativen Liste einführen. Dazu kannst du eine private Form-Variable NodeMap vom Typ TStringList verwenden. Beim Befüllen der TreeView trägst du dann jeden Knoten dort ein:

Delphi-Quellcode:
// ...
tn := TreeView.Nodes.AddChildObject(Query.FieldByName('NAME').AsString, Pointer(Query.RecNo));
NodeMap.AddObject(IntToStr(Query.RecNo), tn);
// ...
Später kannst du dann über den Knoten den Record der Query identifizieren oder über die Datensatznummer des Records den zugehörigen Knoten:

Delphi-Quellcode:
var
  tn: TTreeNode;
begin
  Query.RecNo := Integer(TreeView.Selected.Data);
  with NodeMap do
    TTreeNode(Objects[IndexOf(IntToStr(Query.RecNo))]).Selected := True;
end;
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.

Freundliche Grüße
  Mit Zitat antworten Zitat
epex

Registriert seit: 3. Jun 2007
Ort: schwerin
11 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Knoten makieren über Buttonclick event

  Alt 8. Jun 2007, 17:32
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
so long epex
bis zum nächsten mal
  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 18:26 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