![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hi Leute, ich lade eine komplette SQL-Tabelle (ca. 25000 Datensätze) aus dem Inet in eine Listboxliste. Das geht recht flott.
Jetzt sollen aus dieser Liste Suchbegriffe gefunden werden, und das so komfortabel & SCHNELL wie möglich. Nun gibt es ja mehrere Suchverfahren... Ich dachte daran, eine Suchroutine zu bauen, die während der Eingabe des Suchbegriffes die bis dahin gefundenen Treffer in eine Trefferliste anzeigt. Nun läßt sich die Listbox (soweit ich weiß) in einer Schleife Satz für Satz mit den entsprechenden Stringfunktionen durchsuchen. Erreiche ich aber mit dieser Strategie die gewünschte Geschwindigkeit? Gibt es für diesen Zweck bessere Methoden? Auf was sollte ich achten bzw. was vermeiden? Sollte ich doch lieber den Suchbegriff mit Enter abschließen & dann erst suchen? Vllt vorher die Listbox in eine .dbf schreiben & dann in dieser mit dbase-funktionen durchsuchen? Wollte im Vorweg einfach ein paar nützliche Tips sammeln, bevor ich anfange zu coden Danke & viele Grüße Jörg |
|
|
|
|
|
|
#2 (Direktlink) | ||
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Mit der Listview.dll geht das ruck, zuck!
ListviewA (wenn gewünscht unsichtbar) mit den Daten, ListviewB mit den gefundenen. Nach jeder Eingabe im Suchedit werden die Daten im ListviewB erneuert. Div. Suchbedingungen sind einstellbar. Zitat:
Code:
While 1
clear y&
WaitInput
case (%Key = 2): BREAK
y&=GetControlParas(bereich#)
If trim$(GetText$(HP2&)<>"")'suchen BLZ
SelectLine(LV_Help&,0,6)
such$ = trim$(GetText$(HP2&))
y&=SearchText(LV_Help&,0,GetLines(LV_Help&),0,addr(such$),6,addr(x&))
Case (y&<>-1): SelectLine(LV_Help&,Str$(y&),1)
EndIf
EndWhile
Zitat:
So mache ich es in meinem Wörtebuch. Zum Beispiel wird der Suchbegriff "morgen" aus 33.000 Zeilen in weniger als 1sec in der 2.Liste (29 Fundstellen) aufgelistet. ![]() Gruß Thomas Geändert von THFR (15.07.2010 um 12:09 Uhr) |
||
|
|
|
|
|
#3 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Mit SelectString(N1,N2,S) dürfte es am schnellsten sein.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#4 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hallo zusammen, Danke für die Vorschläge. Habe mich für die listview.dll von Frabbing entschieden & mich da erstmal ein wenig reingearbeitet & viel getestet, deshalb die Pause. Das ist wirklich ein mächtiges Werkzeug - Respekt Frank!
Die momentane Situation: -Mein Listview ist erstellt & gefüllt -Über waitinput, Usermessage & $1400 merke ich, ob eine Taste A-Z gedrückt wurde (%key= 65-90) -ich springe dann mit den zuletzt gedrückten keycode in eine proc, das eine inputbox für den Suchbegriff mit den übergebenen, mit chr$ gewandelten keycode, vorbelegt. -den Suchbegriff übergebe ich nach Enter an searchtext (die Spalte enthält Name,Vorname) -mit getselectedline hole ich mir die momentan markierte zeile -mit selectline(H,Z,2) demarkiere ich diese zeile -mit selectline(H,Z,1) markiere & scrolle ich in die mit searchtext gefundene Zeile endproc So! Jetzt habe ich also mein listview mit der markierten Zeile, hübsch in den sichtbaren Bereich gescrollt. Und jetzt möchte ich ab der gefundenen & markierten Zeile im Listview mit den Cursortasten weiterzappen... Aber nööööööh - mein Listview hüpft erstmal zur ersten oder irgendeiner zuletzt mit der Maus markierten Zeile. Ich habe alles mögliche versucht (setfocus, selectline(Tip von Horst)) kein Erfolg... - Im Grunde genommen brauch ich das "setItemState(H,L,1)" von getItemState(H,L,1). Vllt ist es da & heißt nur anders, aber ich find es nicht. Und deshalb ist jetzt der Punkt gekommen, wo ich das Furum brauche: Was habe ich übersehen? Und: Kann ich verhindern, daß der DefaultWert in der Inputbox markiert ist? Ich möchte, daß man an diesen Buchstaben gleich weitere Zeichen ANFÜGEN kann; jetzt wird dieser DefaultWert gleich mit dem nächsten Zeichen überschrieben. Code:
'proc stxt
'nimmt das zeichen, das gerade über die tastatur empfangen wurde & übergibt es der Inputbox für den suchbegriff
'parameter: keycode vom waitinput, %umessage $1400
parameters sc%
sna$=input$("Name,Vorname","",chr$(sc%)) 'eingabe suchname; als vorgabe wird der getippte buchstabe des users eingetragen
tz& = searchtext(kt1&,0,lz&,1,addr(sna$),6,0) 'suche in kundenliste starten; bei treffer wird der zeilenindex in tz& (trefferzeile) gespeichert;suchbereich erstmal 0-letzte Zeile (lz&)
if tz& > -1 'wenn der suchname gefunden wurde
am& = getselectedline(kt1&) 'aktuell markierten zeilenindex in am& merken
selectline(kt1&,am&,2) 'aktuell markierte zeile demarkieren
selectline(kt1&,tz&,1) 'zur trefferzeile scrollen & selektieren
endif
endproc
lz& = letzte Zeile in dieser Tabelle am& = aktuell markierte Zeile Danke & vG Jörg |
|
|
|
|
|
#5 (Direktlink) | |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
@Jörg
Bevor du mit mit selectline(H,Z,1) die Zeile anspringst, solltest du mit Zitat:
Das mache ich grundsätzlich bei jedem Selectline-Einsatz als erstes.
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
|
|
#6 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hi Horst, selectline(kt1&,0,6) hilft leider nicht, es wird zwar die alte Markierung entfernt aber das kleine gestrichelte Rechteck um die Zeile bleibt erhalten, obwohl eine andere Zeile die Markierung bekommen hat. Beim drücken Cursor hoch/runter hopst die neue Markierung ab dieser gestrichelten Zeile hoch oder runter.
Ich muß also diese gestrichelte Zeile über irgendeinen Befehl neu setzen können - und zwar auf meine frisch markierten Zeile... Gruß Jörg |
|
|
|
|
|
#7 (Direktlink) |
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Jörg, du meinst das Springen im Scrollbereich, wenn nach der Maus die Pfeiltasten benutzt werden? Das kommt auch bei anderer Software vor.
Ob dem über GetScrollPos bzw. SetScrollPos beizukommen ist, muß du mal erforschen und testen oder es hat schon jemand erarbeitet und veröffentlicht es hier. Gruß Thomas |
|
|
|
|
|
#8 (Direktlink) | |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
@Jörg
Versuche mal Zitat:
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
|
#9 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
@Thomas, setscrollpos bleibt wirkungslos
@ Horst, zeigt ebenfalls keine Wirkung. Ausser, das alles markiert wird, aber bei der nächsten Pfeiltaste springt die Markierung ab der Zeile weiter, die den gestrichelten Rand hat. Mit getItemState(Handle&,zeile&,1) kann ich ja den Status über Focus, Markierung etc. abfragen. Daraus geht hervor das ich zwar die Markierung beliebig neu setzen kann aber der Focus (gestrichelter Rand) wird erst beim Mausklick oder mit der nächsten PfeiltastenAktion neu gesetzt. Leider habe ich in der ListViewDoku nichts gefunden, was den Focus-Status setzt. (sowas wie setItemState......) Doku Listview: Version 2.11 - Freeware Letzter Stand: 25.März 2009 Gruß Jörg |
|
|
|
|
|
#10 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
|
#11 (Direktlink) | |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Zitat:
Wenn du aber jetzt per Programm (nicht mit der Maus oder Pfeiltaste!) die Markierung zb. 5 Zeilen tiefer setzt, wird diese ja blau (die andere Zeile hast du vorher auch per Programm demarkiert. Und jetzt solltest du sehen, das die Zeile, die du gerade demarkiert hast, einen gestrichelten (den Focus) hat. Drückst du jetzt auf eine Pfeiltaste zb. runter, startet das runterzappen nicht ab der frisch markierten Zeile sondern ab der Zeile, die den Focus (gestrichelter Rand) hat. Der Focus entscheidet also, ab wo weitergehüpft wird - nicht die Markierung. Gruß Jörg |
|
|
|
|
|
|
#12 (Direktlink) |
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Jörg, habe auch schon festgestellt, dass das mit dem Scrollbalken nichts bringt.
Du kennst doch die Zeile, ggf. über Code:
GetOwnControlParas(B,H,S,Z) 'Feldparameter auslesen Oder, siehe Beispiel Eigene_Eingaben.prf, in einem Item der Zeile ein EDIT-Feld (Nullgröße) erzeugen und zerstören. Auch dann müsste die Zeile den Focus bekommen. Etwas Besseres fällt mir im Moment nicht ein. Gruß Thomas Geändert von THFR (04.08.2010 um 14:18 Uhr) Grund: Falscher Code |
|
|
|
|
|
#13 (Direktlink) | |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hi Thomas, keine schlechte Idee, werd das mal durchspielen. Was mir alledings Sorgen macht ist folgendes:
Zitat:
mal sehen... Gruß Jörg |
|
|
|
|
|
|
#14 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Kurzer Zwischenbericht:
-das mit dem EditFeld beeinflusst den Focus leider auch nicht Gruß Jörg |
|
|
|
|
|
#15 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Habe leider nur wenig Zeit. Aber den Focus neu setzen kannst du mit der Message LVM_SETITEMSTATE.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| webseite durchsuchen | blondi89 | Allgemein | 1 | 14.02.2008 22:49 |
| Tool zum Logfiles durchsuchen | Schemo | Viren-Forum | 2 | 31.10.2007 13:35 |
| fetsplatten durchsuchen? | vRaz3r | Visual Basic, Visual Basic.NET | 0 | 16.06.2007 17:21 |
| system durchsuchen | Bearchen | Homepagegestaltung | 12 | 01.06.2006 16:27 |
| pc nach musikdateien durchsuchen | hobby-musiker | Windows XP | 2 | 27.01.2006 17:16 |