Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 128
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14.07.2010, 23:37   #1 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard Listboxliste durchsuchen

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
JörgG ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 15.07.2010, 03:09   #2 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

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:
Hier eine Liste aller möglichen Flags ( kombinierbar durch OR
Verknüpfung oder Addition).
0 = Groß-Klein-Schreibung nicht beachten (z.B. Frank=frANK) / jede Spalte durchsuchen
/ Suchtext überall erlaubt.
1 = Groß-Klein-Schreibung beachten (z.B. Frank<>frANK)
2 = Der Suchtext wird ausschließlich nur in Spalte SS gesucht (Textsuche für nur eine
Spalte)
4 = Der Suchtext muß am Anfangs eines Worts stehen, damit er gefunden wird.
8 = Der Suchtext muß dem kompletten Itemtext entsprechen, und darf nicht nur ein
Teilstück sein.
Beispiel (Ausschnitt für ca. 20.000 BLZ) bei dem das Suchergebnis in den Sichtbereich gescrollt wird
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
Wenn aber:
Zitat:
aus dieser Liste Suchbegriffe gefunden werden
und wenn in mehreren Spalten nach Begriffen gesucht werden soll, würde ich einen "Such-Button" nehmen.
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)
THFR ist offline   Mit Zitat antworten
Alt 15.07.2010, 06:16   #3 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

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
Bangkok ist offline   Mit Zitat antworten
Alt 03.08.2010, 23:54   #4 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

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
kt1& = listviewHandle
lz& = letzte Zeile in dieser Tabelle
am& = aktuell markierte Zeile

Danke & vG
Jörg
JörgG ist offline   Mit Zitat antworten
Alt 04.08.2010, 07:50   #5 (Direktlink)
MoRoGeP-Träger 2011
 
Benutzerbild von horsthorn
 
Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
Beitrag

@Jörg
Bevor du mit mit selectline(H,Z,1) die Zeile anspringst, solltest du mit
Zitat:
SELECTLINE(hdl&,0,6)
alles demarkieren. Dann springt die Zeile nicht mehr zu den vorher markierten Einträgen.
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)

Win7-Home-Premium 32-Bit - XProfan12.0ß-S14 - Chrome-18.0.1025.142 m
http://www.web-treffpunkt.de
horsthorn ist gerade online   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 04.08.2010, 09:44   #6 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

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
JörgG ist offline   Mit Zitat antworten
Alt 04.08.2010, 10:39   #7 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

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
THFR ist offline   Mit Zitat antworten
Alt 04.08.2010, 10:44   #8 (Direktlink)
MoRoGeP-Träger 2011
 
Benutzerbild von horsthorn
 
Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
Beitrag

@Jörg
Versuche mal
Zitat:
selectline(H%,0,6)
Z% = getselectedline(H%)
selectline(H%,Z%,1)
Bei meinem Datei-Browser funktioniert es nämlich so
__________________
Gruss, horst
Computer werden kleiner und kleiner, bald verschwinden sie völlig.
(Ephraim Kishon 1924-2005)

Win7-Home-Premium 32-Bit - XProfan12.0ß-S14 - Chrome-18.0.1025.142 m
http://www.web-treffpunkt.de
horsthorn ist gerade online   Mit Zitat antworten
Alt 04.08.2010, 12:08   #9 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

@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
JörgG ist offline   Mit Zitat antworten
Alt 04.08.2010, 12:40   #10 (Direktlink)
MoRoGeP-Träger 2011
 
Benutzerbild von horsthorn
 
Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
Beitrag

@Jörg
Du schreibst immer von einem "gestrichelten" Rand !?
Bei mir sieht das so aus:

__________________
Gruss, horst
Computer werden kleiner und kleiner, bald verschwinden sie völlig.
(Ephraim Kishon 1924-2005)

Win7-Home-Premium 32-Bit - XProfan12.0ß-S14 - Chrome-18.0.1025.142 m
http://www.web-treffpunkt.de
horsthorn ist gerade online   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 04.08.2010, 13:11   #11 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

Zitat:
Du schreibst immer von einem "gestrichelten" Rand !?
Bei mir sieht das so aus:
Jo! Bei mir auch so ähnlich. Wenn du mit der Maus einen Eintrag ancklickst, wird er ja blau & kriegt den Focus. der gestrichelte ist aber dann schwer zu erkennen (hängt evtl. vom verwendeten Style ab).
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
JörgG ist offline   Mit Zitat antworten
Alt 04.08.2010, 13:29   #12 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

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
die Position ermitteln und einen Mausklick per Code auslösen. Dann müsste die Zeile den Focus bekommen.
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
THFR ist offline   Mit Zitat antworten
Alt 04.08.2010, 14:31   #13 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

Hi Thomas, keine schlechte Idee, werd das mal durchspielen. Was mir alledings Sorgen macht ist folgendes:
Zitat:
12 = X Position (Pixel) - innerhalb der Listview Abmessungen - des angeklickten Items
16 = Y Position (Pixel) - innerhalb der Listview Abmessungen - des angeklickten Items
Ich hoffe, das Frank das in diesem Fall nicht so meint wie er es schreibt
mal sehen...
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Alt 04.08.2010, 15:24   #14 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

Kurzer Zwischenbericht:
-das mit dem EditFeld beeinflusst den Focus leider auch nicht
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Alt 04.08.2010, 16:26   #15 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

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.
Frabbing ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ä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



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:11 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2