![]() |
items suchen in TreeView
Habe weder im Forum noch in der Delphi-Hilfe was zum Thema "Suchen in einem TreeView" gefunden.
Möchte über Eingabe in ein Edit-Feld ein TreeView durch eben diesen Eingabewert ins Edit durchsuchen lassen. Meine Werte für den Baum lese ich aus einer Datenbank. Die Items sollen dann entweder farbig markiert werden oder es sollen eben anderweitig markiert werden. Hat jemand ein solche Suchfunktion schon mal angewendet oder weiß, wie es gehen könnte? Vielen Dank im Voraus. |
Re: items suchen in TreeView
Hallo,
wie man TreeView direkt durchsucht, weiß ich auch nicht. Aber ansich müsstest du über eine Schleife alle treenodes durchgehen können, und dann deinen Suchtext abfragen können. Und wenn du die Einträge aus einer Datenbank einliest, warum suchst du dann nicht in der Datenbank. Bei Sql kann du mit SELECT doch sehr elegant die Datenbank suchen lassen. :gruebel: Gruß Horst :duck: |
Re: items suchen in TreeView
Code:
nicht getestet!
Procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); begin case node.Text of 'AAA': treeview1.canvas.font.Color:=clGreen ; ... 'BBB': treeview1.canvas.font.Color:=clred ; end; ......... ......... Gruß,Bernd |
Re: items suchen in TreeView
Das mit der Schleife habe ich mir auch schon gedacht. Aber damit habe ich noch wie was gemacht.
Mit SQL-Befehlen habe ich außerdem auch noch nie gearbeitet. Gibt es sonst noch Möglichkeiten oder könntest du mir mal ein Beispiel für eine solche Schleife geben? Ein großes DANKE schon mal. |
Re: items suchen in TreeView
Das ist doch schon mal gut @huberlix
aber mir fehlt leider immer noch was, womit ich den Tree durchsuchen kann. Kann mir jemand einer solchen Schleife helfen? |
Re: items suchen in TreeView
Etwa so in der Art?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer; begin TreeView1.Visible := true; for i := 0 to TreeView1.Items.Count -1 do begin if i = 2 then // aber wie bringe ich hier einen String //z. B. aus einem Edit unter? begin ShowMessage('Suchwert gefunden!'); end; end; end; |
Re: items suchen in TreeView
Versteh ich jetzt nicht ganz.
Wenn mich nicht alles täuscht wird TreeView1CustomDrawItem für jeden Node durchlaufen. D.h. der Codeschnipsel von mir müsste reichen. Musst halt in der CaseAnweisung irgendwie deine DBWerte abfragen |
Re: items suchen in TreeView
HY!
Bernd hat völlig recht. Du musst gar nicht suchen, wenn Du das Ergebnis nur Visualisieren willst. Es reicht aus, z.B. die Variablen FSuchText_1,FSuchText_2:String entsprechend der Suchanfrage(n) zu setzen und dann mit Treeview.Invalidate ein Neuzeichnen der Baumansicht zu erzwingen. @Bernd: Ich klau mal gerade Deinen Code: :zwinker:
Delphi-Quellcode:
Viele Grüsse
Procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); Begin Case node.Text of FSuchText_1: treeview1.canvas.font.Color:=clGreen ; FSuchText_2: treeview1.canvas.font.Color:=clred ; end; End; Procedure TForm1.StartNewSearch; Begin FSuchText_1: Edit1.Text ; FSuchText_2: Edit1.Text; Treeview.Invalidate; End; OLLI |
Re: items suchen in TreeView
O.K., sorry, stimmt, is einfacher. :wall:
Aber wenn ich
Delphi-Quellcode:
schreibe, dann bekomme ich einen Fehler, dass ein Ordinaltyp erforderlich sei.
...
case node.Text of ... |
Re: items suchen in TreeView
Also das mit der CaseAnweisung funktioniert nicht. StringTypen sind da nicht erlaubt.
Jetzt hab ich mal ein Treeview mit den Werten A,B,C und D vorbelegt, und mit if/then nach ABCD abgefragt. Der Baum wird vierfarbig gezeichnet. Hier die Prozedur:
Code:
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); begin If node.Text= 'A' then treeview1.canvas.font.Color:=clGreen else If node.Text= 'B' then treeview1.canvas.font.Color:=clred else If node.Text= 'C' then treeview1.canvas.font.Color:=clyellow else If node.Text= 'D' then treeview1.canvas.font.Color:=clblue ; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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