2010-11-23 8 views
0

Ich brauche eine Methode, die in der Listbox sucht und alle Wörter hervorhebt, die dem gesuchten Wort entsprechen.Wie in Listbox suchen?

Kann mir jemand helfen?

+12

Und wir brauchen Menschen, die Antworten auf ihre Fragen akzeptieren. Soweit ich das beurteilen kann, haben Sie hier 7 Fragen zu StackOverflow gestellt, aber Sie haben noch keine einzige Antwort akzeptiert. –

Antwort

2

Meinst du sowas?

procedure TForm1.HighLight(aListbox: TListBox; aStr: string); 
var 
    I : integer; 
begin 
    aListbox.ClearSelection; 

    for I := 0 to aListbox.Items.Count-1 do 
    if aListbox.Items[I] = aStr then 
     aListbox.Selected[I] := true; 
end; 

Sie müssen die MultiSelect-Eigenschaft der Listbox auf true festlegen, damit dies funktioniert.

+0

Vielleicht liege ich falsch, aber ich denke, durch hervorgehoben bedeutet er etwas im Stil der Änderung des Hintergrunds oder der Schriftfarbe des Wortes, nicht auswählen. –

+1

Ich dachte daran, aber angesichts der Unbestimmtheit seiner Frage und der Tatsache, dass die Listbox keine Highlights hat, dachte ich, dass er das vielleicht meinte. Schließlich nennen viele Benutzer ausgewählte Objekte "hervorgehoben" oder sogar "blau". Meine Mutter zum Beispiel :-) –

1

Sie haben nicht angegeben, was genau Ihr Problem ist. Brauchen Sie Hilfe beim Suchen? oder brauchst du Hilfe um Wörter hervorzuheben?

Suchen Sie für die Suche nach einem bestimmten Element in der Listbox oder nach einem Wort in allen Elementen? Wenn Sie nach einem Element suchen möchten, können Sie TListBox.Items.IndexOf() verwenden. Wenn Sie nach einem Wort suchen möchten, können Sie es entweder im gesamten Text mit den Funktionen Pos() oder PosEx() in TListBox.Items.Text suchen. oder verwenden Sie diese Funktionen für alle Elemente, indem Sie Elemente mithilfe von TListBox.Items durchlaufen.

Zum Markieren von Wörtern bietet TListBox selbst keine Texthervorhebung. Wenn Sie das brauchen, müssen Sie es selbst zeichnen. Legen Sie die Style-Eigenschaft auf lbOwnerDrawFixed fest und schreiben Sie Ihren benutzerdefinierten Zeichnungscode für das OnDrawItem-Ereignis.

3

Wenn Sie eine schnelle Suche in Listbox ausführen mögen und erhalten Index von ähnlichen Artikeln oder genauen Einzelteil, ist die Lösung wie dieser

var 
    i : integer; 
    s : string; 
begin 
    s := 'My Text' +#0; 
    i := Lst1.Perform(LB_FINDSTRING, $FFFFFFFF, PWideChar(s)); 
end; 

i ist Index von Listbox Artikeln, die mit Ihrer angegebenen Zeichenfolge ähnlich ist.