Autor Beitrag
mrmiagi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31


Delphi 7 pro
BeitragVerfasst: Do 18.09.03 06:58 
Morgen,
kann mir jemand sagen wie ich eine Suche für nen TreeView erstelle. Oder wie ich vielleicht anfangen sollte?


Zuletzt bearbeitet von mrmiagi am Do 18.09.03 07:34, insgesamt 1-mal bearbeitet
DaBass
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 18.09.03 07:04 
wie soll die hilfe aussehen??

beschreibe das ganze mal etwas genauer!!
mrmiagi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31


Delphi 7 pro
BeitragVerfasst: Do 18.09.03 07:23 
ALso es gibt ein Menüitem "Suchen". Wird auf das geklickt erscheint ein
neues Formular auf dem ein Edit Feld oder so was ähnliches sein soll,
indem das zu suchende Wort eingegeben wird.
Das suchende Wort stellt einen Node im Treeview da. Aber das eingegebende Wort muss nicht immer 100% richtig geschrieben sein, trotzdem sollte ein mögliches Suchergebnis angezeigt werden.
Ich meinte "Suche", sorry!
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 18.09.03 08:04 
Hallo!

Hier eine Funktion die eine Node zurück gibt wenn der Suchstring mit der Text der Node exakt übereinstimmt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
Function TreeViewItemSearch (aInTreeView: tTreeView; aSearchText: String): tTreeNode;
Var
  Loop: Integer;
Begin
  Result := nil;

  If Not Assigned (aInTreeView) or (aSearchText = ''Then
    Exit;

  For Loop := 0 To aInTreeView.Items.Count - 1 Do
    If aSearchText = aInTreeView.Items[Loop].Text Then
      Begin
        Result := aInTreeView.Items[Loop];
        Break;
      End
End;

Zum Testen kannst du eine TreeView auf dem Form platzieren (mit ein paar Text Nodes) und einer Edit-Komponente. In dem OnChange Event der Edit-Komponente rufst du dann die o. g. Funktion auf:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Edit1Change(Sender: TObject);
Var
  Node: tTreeNode;
begin
  Node := TreeViewItemSearch (TreeView1, Edit1.Text);

  If Assigned (Node) Then
    TreeView1.Selected := Node
  Else
    TreeView1.Selected := TreeView1.TopItem;
end;

Am besten stellst du die Eigenschaft HideSelection der TreeView auf False.

Gruß
Tino
mrmiagi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31


Delphi 7 pro
BeitragVerfasst: Do 18.09.03 08:18 
So habe ich das in etwa schon, mir geht es eigentlich jetzt darum, wie für
Sucheingaben die nicht 100% prozentig mit einem Node übereinstimmen,
wie etwa Groß-und Kleinschreibung oder das nur der Anfang oder Schluss eines Nodes bekannt ist, trotzdem gefunden werden?
Aber totzdem schon mal danke!
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 18.09.03 09:38 
mrmiagi hat folgendes geschrieben:
wie etwa Groß-und Kleinschreibung

Du könntest beim Vergleich beide Strings mit Suche in: Delphi-Forum, Delphi-Library UPPERCASE in Großbuchstaben umwandeln.

mrmiagi hat folgendes geschrieben:
oder das nur der Anfang oder Schluss eines Nodes bekannt ist, trotzdem gefunden werden?

Hier könntest du die Funktion Suche in: Delphi-Forum, Delphi-Library POS beim Vergleichen benutzen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
Uses
  SysUtils;
 
Function TreeViewItemSearch (aInTreeView: tTreeView; aSearchText: String): tTreeNode; 
Var 
  Loop: Integer; 
Begin 
  Result := nil

  If Not Assigned (aInTreeView) or (aSearchText = ''Then 
    Exit; 

  For Loop := 0 To aInTreeView.Items.Count - 1 Do 
    If Pos (UpperCase (aSearchText),  UpperCase (aInTreeView.Items[Loop].Text) > 0 Then 
      Begin 
        Result := aInTreeView.Items[Loop]; 
        Break; 
      End 
End;