Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Listbox: Strings in Listboxen suchen
Programm-Listbox8
Beispiel zweier Listboxen (Single- und Multiselect). Beispiel wie Strings in den
Boxen gesucht werden können. In der Behandlung besteht ein Unterschied!
Die AUSWERTUNG markierter Zeilen wird hier nicht behandelt.
Version 1.0 12.09.2003. Das Programm kann frei benutzt werden, per
Schäden kann keine Haftung übernommen werden.
Autor: Gerhard Putschalka
homepage: http://members.telering.at/g.putschalka/index.html
email: g.putschalka@web.de
Declare Dlg%,X%,Single%,Multi%,SingleBox&,MultiBox&,TxtBer#,Ende%,Edit%,Ergeb&,Zw$
Dim TxtBer#,255 max. Textlänge einer Listboxzeile (sollte hier genügend grande sein)
SetTrueColor 1
Cls @RGB(255,255,255)
Let Dlg%=@CreateDialog(%Hwnd,Suchen in SingleSelect und in MultiSelect Listbox,250,40,465,360)
@createtext(Dlg%,Geben Sie einen Suchbegriff ein und drücken Sie den Button,30,5,424,16)
@createtext(Dlg%,>suchen< der jeweiligen Listbox.,30,25,250,16)
@createtext(Dlg%,Suchbegriff:,30,280,80,16)
Listbox mit einzeiliger Auswahlmöglichkeit
Let SingleBox& = control(LISTBOX,,$50B000C1,20,50,200,200,Dlg%,101,%HINSTANCE)
wird hier $50B000C3 angegeben, wird der Listboxinhalt sortiert.
Listbox mit mehrzeiliger Auswahlmöglichkeit
Let MultiBox& = control(LISTBOX,,$50B008C1,240,50,200,200,Dlg%,101,%HINSTANCE)
wird hier $50B008C3 angegeben, wird der Listboxinhalt sortiert.
Let Single% = @CreateButton(Dlg%,suchen,70,250,80,20)
Let Ende% = @CreateButton(Dlg%,beenden,190,250,80,20)
Let Multi% = @CreateButton(Dlg%,suchen,300,250,80,20)
Let Edit% = @CreateEdit(Dlg%,,120,280,200,20)
Texte in die Listbox stellen
@AddString(SingleBox&,Beispiel)
@AddString(SingleBox&,einer)
@AddString(SingleBox&,Listbox)
@AddString(SingleBox&,mit der)
@AddString(SingleBox&,Möglichkeit der)
@AddString(SingleBox&,Einfachauswahl)
@AddString(SingleBox&,von)
@AddString(SingleBox&,Zeilen)
Texte in die Listbox stellen
@AddString(MultiBox&,Beispiel)
@AddString(MultiBox&,einer)
@AddString(MultiBox&,Listbox)
@AddString(MultiBox&,mit der)
@AddString(MultiBox&,Möglichkeit der)
@AddString(MultiBox&,Mehrfachauswahl)
@AddString(MultiBox&,von)
@AddString(MultiBox&,Zeilen)
1. Schleife bis beenden Button gedrückt wurde
whilenot @GetFocus(ende%)
WaitKey
auswerten per Mehrzeilen-Box
If getfocus(Multi%)
@createtext(Dlg%, ,30,310,450,16)
zum Suchen gibt es hier nur eine Möglichkeit
hier muß (sollte) eine Bereichsvariable benutzt werden.
String TxtBer#,0 = @GetText$(Edit%)
Ergeb& = @Sendmessage(MultiBox&,$018F,-1,TxtBer#) API: LB_FINDSTRING
das Markieren des Eintrags (wenn gewollt) muß das extra erfolgen
If (Ergeb& < 0) nicht gefunden
@Sendmessage(MultiBox&,$0185,0,Ergeb&) lösche die Markierung (API: LB_SETSEL)
@createtext(Dlg%,Der Suchbegriff ist in der Multi-Listbox nicht vorhanden,30,310,450,16)
Else
@Sendmessage(MultiBox&,$0185,1,Ergeb&) setze Markierung (API: LB_SETSEL)
Let Zw$ = Der Suchbegriff ist in der Multi-Listbox. Eintrag =,@Str$(Ergeb&)
@createtext(Dlg%,Zw$,30,310,450,16)
EndIf
auswerten per Einzelzeilen-Box
ElseIf getfocus(Single%)
@createtext(Dlg%, ,30,310,450,16)
-------- nur 1 Gruppe davon auswählen:
zum Suchen gibt es hier drei Möglichkeiten:
1. Der Profanbefehl @SelectString. Sucht und markiert
Let Ergeb& = @SelectString(SingleBox&,-1,@GetText$(Edit%))
2. oder die API Funktion LB_SELECTSTRING (mit Sendmessage und $018C) entspricht der
Profanfunktion. Hier muß (sollte) eine Bereichsvariable benutzt werden.
String TxtBer#,0 = @GetText$(Edit%)
Let Ergeb& = @SendMessage(SingleBox&,$018C,-1,TxtBer#)
3. oder die API Funktion LB_FINDSTRING (mit Sendmessage und $018F)
hier muß (sollte) eine Bereichsvariable benutzt werden. Der gefundene Begriff
wird hier NICHT markiert! Ergeb& liefert aber die Zeilennummer.
String TxtBer#,0 = @GetText$(Edit%)
Let Ergeb& = @SendMessage(SingleBox&,$018F,-1,TxtBer#)
--------
If (Ergeb& < 0) nicht gefunden
@Sendmessage(SingleBox&,$0186,-1,0) löschen der Markierung
@createtext(Dlg%,Der Suchbegriff ist in der Single-Listbox nicht vorhanden,30,310,450,16)
Else
Let Zw$ = Der Suchbegriff ist in der Single-Listbox. Eintrag =,@Str$(Ergeb&)
@createtext(Dlg%,Zw$,30,310,450,16)
EndIf
Endif
EndWhile
Dispose TxtBer#
End