AGB  ·  Datenschutz  ·  Impressum  







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

Virtualstringtree suchen mit Child-Nodes

Ein Thema von HPB · begonnen am 11. Okt 2013 · letzter Beitrag vom 16. Mär 2016
Antwort Antwort
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#1

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 11. Okt 2013, 15:02
Ich muss gestehen, ich habe übersehen, dass die Dokumente von dem Angebot vererbt ist.
Sorry

Allerdings hat mich der getText auf verwirrt:
Delphi-Quellcode:
var
  pDaten: TOVSTAngebote;
begin
  pDaten := TOVSTAngebote(vstangebote.GetNodeData(Node)^);
  case column of
    0:
      begin
        if pDaten is TOVSTAngebote then
          celltext := TOVSTAngebote(pDaten).FAngebotstitel
            + ' (' + TOVSTAngebote(pDaten).FPKAngebotsNr + ')';
Du castest die Daten auf den Datentyp TOVSTAngebote und prüfst ob die Variable vom Typ TOVSTAngebote Daten vom Typ TOVSTAngebote enthält, um es dann wieder auf TOVSTAngebote zu casten.


Welche Version vom VST nutzt du?

Das ermitteln des Plus Zeichen wird in der Methode DetermineHiddenChildrenFlagAllNodes gemacht.
Die wird u.a. aufgerufen, wenn du deine Suche mit BeginUpdate und EndUpdate einkapselst. Gibt da aber paar Bedingungen.

Delphi-Quellcode:
vst.beginupdate();
try
  vst.iterateSubtree(...);
finally
  vst.endupdate();
end;
Du kannst übrigens auch IsFiltered nutzen.
Ich habe es einmal mit "vstBeginUpdate . . ." versucht. Bringt aber auch keine Lösung.
Ich arbeite mit der Version: 5.2.1
Ich habe mal das Cast und die erneute Prüfung herausgenommen. Auch keine Lösung.
Wo stelle ich "IsFiltered" ein. Ich habe nichts gefunden!
Übrigens ist mir folgendes noch aufgefallen:
Wenn ich alle Nodes expandiere und dann suche, werden sofort alle ChildNodes nicht mehr angezeigt
Warum ist dies so
Gruß HPB
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.043 Beiträge
 
Delphi 12 Athens
 
#2

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 11. Okt 2013, 22:15
Ich habe jetzt nur einen ganz kurzen Blick drauf geworfen... kann es sein, dass du in SucheCallback vst.GetNodeLevel benutzen müsstest um zu schauen, ob das die oberste Ebene ist? Denn so wie ich das verstehe blendest du die Childnodes dort mit aus, obwohl du wie ich es verstehe nur die Oberknoten filtern willst.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#3

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 12. Okt 2013, 15:42
Ich habe jetzt nur einen ganz kurzen Blick drauf geworfen... kann es sein, dass du in SucheCallback vst.GetNodeLevel benutzen müsstest um zu schauen, ob das die oberste Ebene ist? Denn so wie ich das verstehe blendest du die Childnodes dort mit aus, obwohl du wie ich es verstehe nur die Oberknoten filtern willst.
Guten Tag jaenicke,
ja, das ist mir gestern aufgefallen. Mit ItereeSubTree werden ja alle Nodes durchlaufen. Dies schrieb ja auch Generic. Wenn ich nun mit Pos(...) überprüfe, dann fallen ja alle Nodes heraus, die die Bedingungen nicht erfüllen, und dies sind die Subnodes. Ich werde also prüfen ob der selektierte Node der ParentNode ist und dann sollten auch die richtigen Nodes gefunden werden.
Nochmals Dank an allen, die mit bei der Lösung behilflich waren.
Mit Gruß HPB
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 10. Mär 2016, 22:15
Hallo zusammen,

ich habe vieleicht ein ähnliches Problem. Bei meiner Suche werden die Knoten von NodeLevel 3 nicht mehr angezeigt. Ich suche im NL 1 und 2 nach einem Ort und mache mit

vst.IsVisible[Node] die Knoten sichtbar oder nicht.

Da ich meine Knoten unter NodeLevel 3 erst mit

vst.Expanding erzeugen, gehe ich aktuell davon aus, dass diese aus diesem Grund nicht angezeigt werden. Mit einen Doppelklick auf einen Knoten aus NodeLevel werden die Childs aber ganz normal erzeugt.

Im OnInit sagen ich den Knoten unter NodeLevel 2, das Sie Childs haben...

vst.HasChildren[Node] := True; Dadurch werden im Normalfall (bei öffnen ohne vorher die Auswahl durch die Suche eingeschränkt zu haben) vor dem Note das + zum öffnen dargestellt. Dieses ist allerdings nach der Suche nicht mehr sichtbar.

Die Childs lassen sich trotzdem wie vor beschrieben per Doppelklick öffnen.

Jemand ne Idee...

Danke schonmal und Gruß jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 12. Mär 2016, 17:35
Keiner nee Idee...
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.457 Beiträge
 
Delphi 12 Athens
 
#6

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 13. Mär 2016, 06:57
Doch... Moin...

Nachtrag: Upps... du bist ja gar nicht der TE mit der Anforderung und Quelltext aus #1... Vieleicht hilft die Idee ja trotzdem.

Ich gehe mal davon aus das du nicht hunderttausende Daten im Tree hast. Nach jedem Tastendruck in einem Suchedit soll der Tree angepaßt sein.

...dann baue den Tree einfach komplett neu auf. Du erzeugst ja die Nodes aus Objekten welche du dann an den Node hängst. Beim Aufbau prüfst du ob die Daten in deinen Match passen (ContainsText z.B.) bei Match hängst du an... fertsch. Das geht so schnell das du das gar nicht merkst das das neu aufgebaut ist. BeginUpdate etc. darf natürlich nicht fehlen. Das Einzige was du tun mußt, ist die Liste mit den gesamten Objekten aus der SQL Abfrage vorhalten und die Abfrage und den Aufbau trennen...was sowieso sinnvoll ist.

Geändert von haentschman (13. Mär 2016 um 08:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 13. Mär 2016, 14:36
Hallo Haentschman,

danke erstmal für Deine antwort. Grundlegend könnte ich das so aufbauen. Aber trotzdem stelle ich mir die Frage, warum das so ist. Im OnInit des VST sagen ich den Nodes doch, das Sie Childs haben.

Delphi-Quellcode:
procedure TfReportClient.vstKundenInitNode(Sender: TBaseVirtualTree; ParentNode,
  Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
begin
  case vstKunden.GetNodeLevel(Node) of
    1:
     begin
       vstKunden.HasChildren[Node] := True;
     end;
    2:
     begin
       vstKunden.HasChildren[Node] := True;
     end;
    3:
     begin
       vstKunden.HasChildren[Node] := True;
     end;
  end;
end;
Nach dem Programmstart, ist das auch so im VST ersichtlich. Nur wenn ich suche, wird das "+"+ zum öffnen der Childs nicht mehr angezeigt. Doppelklick öffnet aber das Child.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
madas

Registriert seit: 9. Aug 2007
207 Beiträge
 
#8

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 14. Mär 2016, 11:27
Keiner nee Idee...
Vielleicht hilft ja ein einfaches

Delphi-Quellcode:
Tree.Expanded[Node] := True;
Tree.Expanded[Node] := False;
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 14. Mär 2016, 12:40
Zitat von madas:
Vielleicht hilft ja ein einfaches
Das kann ich gerne ausprobieren, aber wäre doch auch irgendwie nicht die richige Lösung.

Beim suchen, prüfen ich ja immer nur im "NodeLevel 1". Daher blende ich ja "NodeLevel 2 und 3" niemals aus. Ich verstehe daher nicht, warum nach dem erstellen die "+" zeichen sichbar sind und nach dem Suchen nicht mehr. Das OnInit wird doch auch nur beim Initialieren der Nodes ausgeführt und hat daher beim suche keine relevance.

Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  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 12:42 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-2025 by Thomas Breitkreuz