| |
Fortgeschrittene ProgrammierungList box Einträge > 30000 | | | Autor: seb-software | Datum: 18.01.18 03:35 |
| Hallo, guten Abend
Ist nicht so lange her, da wurde mir sehr gut geholfen: "Stefan und Franki Danke"
Nun ein neues Problem. Mein Programm VB 6.0 beinhaltet eine ListBox, die mit ca 78.000 Einträgen
gefüttert werden soll. Es läuft eigentlich Problemlos, Nur...
Das auslesen des ListIndex bis 32766 alles ok. Die ausgelesenen Werte sind identisch. Ab ListIndex
größer als 32766 geht der ListIndex in`s Minus über. Also -32767. Von da an rückwärts -32766, -32756
usw bis ListIndex 0 (Null). Dann beginnt der ListIndex wieder bei Plus (+1) usw.
Beim Auslesen des Textes ist auch genau wieder der 1. Eintrag zu lesen obwohl in der Listbox alle
78.000 Einträge eingelesen wurden.
Beispiel:
ListIndex.
1 - Eintrag 1
2 - Eintrag 2
3... - Eintrag 3
32766 - Eintrag 32766
-32767 - Eintrag 32767
-32766 - Eintrag 32768
-32765... - Eintrag 32769
0 (Null) - Eintrag 68950
1 - Eintrag 68951
2 - Eintrag 68952
3... usw
der letzte ist dann wirklich Eintrag 78.000
Vielen Dank für eine Antwort und Hilfe.
Gruss seb- Dieter
Beitrag wurde zuletzt am 18.01.18 um 03:50:58 editiert. | |
Re: List box Einträge > 30000 | | | Autor: Zardoz | Datum: 18.01.18 12:49 |
| Hallo seb-Dieter,
die Listbox wurde ursprünglich nur für 2^15 Einträge
entworfen. Der Rückgabewert für den Listindex ist
daher vom Typ Integer (2 Bytes). Mit Api-Funktionen
lassen sich auch Listindex-Werte > 2^15 auslesen.
Probier' mal dies:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const LB_GETCURSEL = &H188
Private Sub List1_Click()
Dim Idx As Long
Idx = SendMessage(List1.hWnd, LB_GETCURSEL, 0, 0)
MsgBox CStr(Idx)
End Sub Gruss,
Zardoz | |
Re: List box Einträge > 30000 | | | Autor: seb-software | Datum: 18.01.18 16:03 |
| Vielen Dank stefan und zardoz
Werde ich mich heute abend mal beimachen und dann berichten.
Gruss Dieter | |
Re: List box Einträge > 30000 | | | Autor: seb-software | Datum: 18.01.18 16:42 |
| Hallo, das funktioniert Super. Ich bekomme nun als idx z.B. 51500
Nun möchte ich aber den Eintrag 51500 aus der List1 Box auslesen:
file1 = form4.list1.list(form4.list1.listindex) und das funktioniert so nicht.
wie bekomme ich dort idx=51500 unter ?
Vielen Dank | |
Re: List box Einträge > 30000 | | | Autor: Blackbox | Datum: 18.01.18 16:44 |
| Hallo Zardoz
die Listbox in VB6.0 ist ein COM (ActiveX)-Wrapper der dementsprechenden WinAPI-Listbox der Common-Controls. MS hat auch diese Listbox auf Integer festgelegt was meint, das bei 32678 das Ende der Fahnenstange erreicht ist.
Die Listbox-Items haben aber auch die DATA-Methode ... oder? | |
Re: List box Einträge > 30000 | | | Autor: Blackbox | Datum: 18.01.18 17:08 |
| Hallo Dieter,
es ist "gefühlt unanständig" eine primitive Listbox mit derart vielen Werten zu füllen. Wer wühlt sich durch soviele Einträge durch? UI-technisch würde ich schon mal einen Filter vorsetzen. Lassen sich diese Daten nicht in irgendwelche Kategorien verwalten? | |
Re: List box Einträge > 30000 | | | Autor: Rippler | Datum: 18.01.18 17:19 |
| Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const LB_GETTEXTLEN = &H18A
Const LB_GETTEXT = &H189
Private Sub Command1_Click()
Dim lIndex As Long
lIndex = 51500
MsgBox HoleText(Text1.Text)
End Sub
Private Function HoleText(i As Long) As String
Dim lenText As Long
Dim Buffer As String
lenText = SendMessage(List1.hWnd, LB_GETTEXTLEN, i, 0)
If lenText > 0 Then
Buffer = String(lenText, vbNull)
lenText = SendMessage(List1.hWnd, LB_GETTEXT, i, ByVal Buffer)
HoleText = Buffer
End If
End Function | |
Re: List box Einträge > 30000 | | | Autor: seb-software | Datum: 18.01.18 17:19 |
| Das sind alles Musiktitel. Wenn die alle in einer Listbox alph. sortiert sind, sehe ich sofort die doppelten Einträge. Klar habe ich die ganzen Titel nach Interpret sortiert und sind separat abrufbereit. Allerdings artet es in Arbeit aus, wenn ich über 1600 Ordner nach doppelten Einträgen durchforsten will.
Gruss Dieter | |
Re: List box Einträge > 30000 | | | Autor: Rippler | Datum: 18.01.18 17:23 |
| sry
aufruf ist:
MsgBox HoleText(lIndex) | |
Re: List box Einträge > 30000 | | | Autor: Manfred X | Datum: 18.01.18 19:15 |
| Hallo!
Und warum schreibst Du diese "Items" nicht
sortiert zeilenweise in eine Textdatei ??? | |
Re: List box Einträge > 30000 | | | Autor: Franki | Datum: 20.01.18 04:19 |
| Hallo Dieter,
na ja, ca. 78K Titel auf doppelte Einträge zu überprüfen ist nicht so einfach, selbst wenn dau das optisch reduzierst und doppelte Einträge sehen kannst ist das eine Mammutaufgabe wirklich doppelte Einträge ausfiltern zu können.
Denn was ist denn wirklich doppelt? Nur der Dateiname, der Name des Interprten plus Titel oder was sonst. Wenn du identische Dateien ausfiltern möchtest, dann müsstes du das auf Dateiebene machen per Vergleich.
Aber wie auch immer, selbst wenn es Aufwand ist und dein Rechner ein paar Stunden rödelt, dann ist die Aufgabe erledigt. Danach sollstest du dafür sorgen, dass es gar nicht erst zu doppelten Einträgen kommen kann.
Ich habe in Sachen Musiktitel schon vor über 15 Jahren eine Anwendung geschrieben wo die Titel und deren Zusatzinformationen in einen Datenbank stehen. Die Anwendung läuft heute noch und es gibt diverse Suchfunktionen (Über SQL auf die DB) womit sehr schnell der gewünschte Titel geladen bzw. abgewspielt werden kann.
"Alle Titel anzeigen" ist bei meiner Anwendung nicht notwendig, denn das wird nur bei der Inventur einmal jährlich benötigt für die GEMA. Aber da kann das auch ruhig ein paar Minuten dauern (Inkl. Aufbereitung mit Details für den Bericht).
Also wo genau líegt deine Anforderung? Die Menge der Titel ist eher nicht das Problem für eine DB.
Gruß
Frank | |
Re: List box Einträge > 30000 | | | Autor: seb-software | Datum: 20.01.18 20:06 |
| Hallo, Rippler
Ja, das habe ich nach ca 30 Minuten rausgefunden. Wollte hier schon schreiben wo da wohl ein Fehler sein kann. Hatte mich über die Text.Box gewundert. Aber ist gefunden und es läuft alles Problemlos. Nochmals vielen Dank
Gruss Dieter | |
Re: List box Einträge > 30000 | | | Autor: seb-software | Datum: 20.01.18 20:09 |
| Ja, eine Data Methode haben sie. Aber da hatte ich wieder das Problem, dass ich ja einen Wert von z.B. 62000 nicht in die ItemData reinschreiben kann (Überlauf) eben. Aber wie ich schon (siehe Rippler) geschrieben habe, das Problem ist mit seiner Routine bewältigt.
Nochmals allen vielen Dank für die sicherlich interessanten Anregungen, und Hilfestellungen nebst Code-Beispiele.
In diesem Sinne - einen schönen Abend noch
Gruss Seb - Dieter | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|