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
Seite 2 von 3     12 3      
Benutzerbild von Jens Hartmann
Jens Hartmann

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

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 13. Mär 2016, 15: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
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 13. Mär 2016, 18:10
Das habe ich nie benutzt. Ich habe einfach immer ChildCount auf 1 gesetzt. Damit hatte ich dieses Problem bisher nicht.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

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

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 14. Mär 2016, 06:32
Zitat von jaenicke:
Das habe ich nie benutzt. Ich habe einfach immer ChildCount auf 1 gesetzt. Damit hatte ich dieses Problem bisher nicht.
Aber das ergibt jetzt meiner Meinung nach keinen Sinn. Der ChildCount ist bei mir unterschiedlich. Außerdem sind die Nodes ja vorhanden. Es fehlt ja nur das + zum öffnen. Mit einem Doppelklick, öffnet sich ja dann das Node. Siehe hierzu die Bilder im Anhang...

Gruß Jens
Miniaturansicht angehängter Grafiken
mit-suche-und-doppelk.jpg   mit-suche.jpg   ohne-suche.jpg  
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 14. Mär 2016, 07:11
Ja, das ist mir schon klar. Ich habe aber nicht HasChildren gesetzt, sondern immer ChildCount auf 1. Wenn dann ausgeklappt wurde, habe ich den echten Wert für ChildCount gesetzt usw.
Das mag nicht die schönste Lösung sein, aber HasChildren hatte ich nicht gefunden und es funktioniert problemlos.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
madas

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

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 14. Mär 2016, 12: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
 
#16

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 14. Mär 2016, 13: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
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 14. Mär 2016, 20:04
Also ich benutze auch die Events OnInit() und OnInitChildren() und bei mir funktioniert das problemlos. Der einzige Unterschied ist, dass ich im OnInit() nicht die Property HasChildren[Node] benutze, sondern über den Var-Parameter InitialStates den initialen Status der Node zurückgebe. Hab mich zwar schnell mit dem Texteditor durch das Event geklickt und keine großen Auffälligkeiten gefunden was dort anders gemacht wird, aber vielleicht hilft es ja. Bei mir funktioniert es jedenfalls problemlos. Und ich benutzte einige tausende Nodes als ChildNodes die erst initialisiert werden wenn ich sie wirklich brauche.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

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

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 14. Mär 2016, 22:32
Also bei mir klappt das auch mit dem

InitialStates := InitialStates + [ivsHasChildren]; Hier mal ein Teil des Codes...

Delphi-Quellcode:
//InitNode
procedure TfReportClient.vstKundenInitNode(Sender: TBaseVirtualTree; ParentNode,
  Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
  NodeLevel : Integer;
begin
 NodeLevel := vstKunden.GetNodeLevel(Node);
 case NodeLevel of
   1: InitialStates := InitialStates + [ivsHasChildren];
   2: InitialStates := InitialStates + [ivsHasChildren];
   3: InitialStates := InitialStates + [ivsHasChildren];
 end;
end;

//EditChange Suche
procedure TfReportClient.edtSearchChange(Sender: TObject);
begin
  vstKunden.BeginUpdate;
  vstKunden.IterateSubtree(nil, SpeedSearch, Pointer(edtSearch.Text), [], true);
  vstKunden.EndUpdate;
end;

//Methode SpeedSearch
procedure TfReportClient.SpeedSearch(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
  Kunden_Daten : PCustomersData;
  NodeLevel, i : integer;
  ws: string;
begin
  try
    NodeLevel := vstKunden.GetNodeLevel(Node);
    if NodeLevel = 1 then
      begin
        ws := string(Data);
        //Diverse Suchoptionen
        //...
        //...
        //...
        { Sucht im Kundennamen von Anfang des Strings }
        vstKunden.IsVisible[Node] :=
          (ws = '') or (pos(AnsiUpperCase(ws),
          AnsiUpperCase(TOCustomers(Kunden_Daten.FCustomer_Object).Kunden_Kundenname)) = 1);
      end
  except
    //Fehlerbehandlung
  end;
end;
Vieleicht fehlt ja irgendetwas auf...

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
 
#19

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 15. Mär 2016, 21:00
Also wo auch immer das dran liegt. Ich bekomme es nicht in den Griff...

Noch jemand einen Vorschlag...
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
 
#20

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 15. Mär 2016, 23:23
So, ich habe das ganze jetzt gelöst. Allerdings wirklich nur auf die Art und Weise, dass ich den Nodes jeweils ein Child zugefügt habe. Beim initialsieren (Expanding) des Nodes, führe ich erste ein...

vst.DeleteChildren(Node) aus und füge erst dann die richtigen Nodes mit den Daten zu.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:41 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