Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Text in einer Listbox Suchen


hibbert - Mo 23.09.02 15:08
Titel: Text in einer Listbox Suchen
hallo,
ich möchte gerne einen bestimmten text in einer Listbox suchen und makieren lassen (alles während der user die eingaben im edit feld vornimmt ( ich dachte an onkeydown)) . wenn jemand weiß was ich meine, und auch noch helfen kann, der soll sich bitte schnell melden !!
DANKE
mfg hibbert


DeCodeGuru - Mo 23.09.02 15:17

guck mal in der Delphi-Hilfe unter TStringlist (TListBox.Items TStringlist) nach IndexOf, ItemIndex oder mal unter TListBox nach Selected. Oder schau mal im Forum, kann auch nie schaden :mrgreen:


hibbert - Mo 23.09.02 16:47

danke, für deine antwort, aber irgenwie bekomme ich dass nicht so hin !!
kannste mir vielleicht mal ne beispiel geben ?
DANKE
mfg hibbert


DeCodeGuru - Mo 23.09.02 16:57

versuchs doch mal damit:


Quelltext
1:
ShowMessage(IntToStr(ListBox1.Items.IndexOf('Mein String')));                    


Wenn Result der Funktion = -1 ist, heißt das, dass der Eintrag nicht gefunden wurde.


majolo - Mo 23.09.02 17:59

Hi hibbert,

versuchs mal so:

Quelltext
1:
2:
3:
4:
5:
6:
var s:string;
begin
  S:=IntToStr(Listbox1.Items.IndexOf(Edit1.Text));
  ListBox1.ItemIndex:=StrToInt(s);
   If ListBox1.ItemIndex = -1 then
    Showmessage( Edit1.Text +' konnte nicht gefunden werden');


Meintest du so etwas?Ich hoffe es funzt.
Gruss
majolo


Tino - Mo 23.09.02 23:59

@majolo: Warum benutzt Du einen String? Ein Integer wäre da wohl besser. Also etwa so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var 
  Idx: Integer;
begin
  Idx := Listbox1.Items.IndexOf (Edit1.Text);
  ListBox1.ItemIndex := Idx;
  If Idx = -1 then
    Showmessage (Edit1.Text +' konnte nicht gefunden werden');
end;

Gruß
TINO


hibbert - Di 24.09.02 17:05

Fett danke !!!
Genau dass was ich gesucht habe. doch...
wenn ich z.b. die wörter Hallo Hall Halle Holle Hölle Kind Mutter Vert ... in der liste zu stehen habe und ich den buchstaben h eingebe, soll er automatisch zum ersten wort mit dem h springen ! ( kurz autovervollständigung)
ist das ebenfalls möglich, erspart einem mächtig arbeit !
trozdem DANKE !
mfg hibbert


Delete - Di 24.09.02 17:47

Habe ich mal irgendwo gefunden:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
var 
 LastKey:Word; 

... 


procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word; 
  Shift: TShiftState); 
begin 
  LastKey:=Key; 
end; 

procedure TForm1.ComboBox1Change(Sender: TObject); 
Var 
  Srch : String; 
  ix : Integer; 
Begin 
  Srch := combobox1.Text; 
 if LastKey = $08 then 
  Begin 
    LastKey := 0; 
    Exit; 
  end; 
  LastKey := 0; 
  ix := combobox1.Perform(CB_FINDSTRING,-1,LongInt(PChar(Srch))); 
  if ix > CB_ERR then 
  Begin 
    combobox1.ItemIndex := ix; 
    combobox1.SelStart := Length(Srch); 
    combobox1.SelLength := (Length(combobox1.Text) - Length(Srch)); 
  end; 
end;


majolo - Di 24.09.02 20:44

@Tino: Hast recht.Habe den Source aus dem stehgreif geschrieben.Viel mir auch auf, war aber dann schon abgeschickt.Aber funzen tut der auch.
Gruss
majolo


CenBells - Mi 25.09.02 09:31

oder man setzt im Objektinspektor die Eigenschaft autocomplete = true;
Gruß
Ken


Delete - Mi 25.09.02 10:42

Eine Listbox mit AutoComplete? :?
Was du meinst ist wohl die AutoComplete-Combobox. Aber die gibt es erst ab Delphi 6. Aber -wie Luckies Code zeigt!- so schwer ist es ja nicht.


Delete - Mi 25.09.02 11:39

Listbox? Habe ich gar nicht mehr gelesen. Mit Autocomplete habe ich gleich eine Combobox verbunden. :shock: