| |
|
|
| ¡Hola Franco,
Yo hatte antes, en un meiner Programas una Windows Listbox por una Listview auszutauschen. In una Testlauf voluntad ca. 20.000 Zeilen eingefügt wobei antes el Einfügen cada Línea geprüft se, si esta ya disponible es. El Listbox-Versión war en knapp 4 Minuten por, el Listview Versión Yo después de 20 Minuten y 1/10 el Arbeit abgebrochen.
In el Listbox Cuestión Yo dies así de: exist& = SendMessage(box&,$01A2,-1,addr(edit$))
Yo búsqueda después de el genauen Línea
En el Listview se ejecuta el así: exist& = SearchText(box&,0, GetLines(box&),1,Addr(edit$),10,addr(exist2&))
Genauer String, Búsqueda sólo en el betreffenden Spalte. Schon en 2.000 Zeilen verdammt langsam.
-Gibt lo no Vergleichbare Windows Message, el entweder du uso kannst oder du me empfehlen kannst.
-¿Puede du el Aufbau el Función una vez más überdenken, Yo bin sicher, dass al todavía optimieren kann.
-Yo weiß no como va pero yo sería lo así hacer: sólo después de el ersten Signo cada Línea Suchen, en übereinstimmung auch el zweite abfragen usw.
-Posesiones Soy un vorhandenen Befehl übersehen?
-Sinnvoll wäre una SearchText-Lite Variante, el darauf optimiert es sólo en uno Spalte a suchen y en ersten Fundstelle igual abbricht. Den Parámetro para Fundstellen-Spalte podría uno hierbei auch weglassen.
Wenn du lo schaffst, el Función doppelt así rápidamente a hacer kann Todavía nichts anfangen, sólo si zumindest halb así rápidamente como en el Listboxes es wäre lo akzeptabel. Meinst Si es usted el es machbar?
Saludo, Sven |
|
|
| |
|
|
|
| Posesiones folgendes en el Win32.hlp gefunden, podría lo sin embargo no erfolgreich en un Función oder Message umsetzen.
LVM_FINDITEM wParam = (WPARAM) (int) iStart; lParam = (LPARAM) (const LV_FINDINFO FAR *) plvfi;
// Corresponding macro int ListView_FindItem(HWND hwnd, int iStart, const LV_FINDINFO FAR* plvfi);
The LVM_FINDITEM mensaje searches for a list view item with the specified c haracteristics. You can send this mensaje explicitly or by using the ListVi ew_FindItem macro.
Parámetros
hwnd
Handle to the list view control.
iStart
Index of the item to begin the search with or -1 to start from the beginnin g. The specified item is itself excluded from the search.
plvfi
Pointer to a LV_FINDINFO structure that contains information about what to search for. Volver Value
Returns the index of the item if successful or -1 otherwise.
Yo halte lo para unwahrscheinlich aber tal vez bremst auch el Befehl GetLines(box&) el todo Sache? Liest el Befehl sólo una Valor de oder muss él cada veces el Zeilen de 0 a Ende durchzählen? |
|
|
| |
|
|
|
| ¡Hola Sven,
me está nie aufgefallen, el el Befehl así langsam ser se... Wahrscheinlich benötigt el Sistema länger, Daten de una Listview a lesen, como de Listboxen. Sombrero sí en el Regelfall auch mehrere Spalten.
Und el Listview strebt danach, beim löschen oder einfügen uno Eintrags el Listview a aktualisieren. Das kostet enorm Tiempo, kann aber ligeramente abgestellt voluntad
SendMessage(listview&,11,0,0) Neuaufbau des Listviews SendMessage(li stview&,11,1,0) Wiederaufbau des Listviews (standart).[/CODE
Yo glaube auch, du versuchst dein Problema verkehrt a lösen. Yo sería lo así hacer, el Yo el 20000 Zeilen einfügen sería y para Sch luss sólo con DeleteDoubleItems() todos doppelten Einträge löschen sería. So :
[CODE]SendMessage(listview&,11,0,0) Neuaufbau des Listviews verhinde rn !
Whileloop GetColumns(listview&) DeleteDoubleItems(listview&,(&loop-1)) EndWhile
SendMessage(listview&,11,1,0) Wiederaufbau des Listviews (standart).
Teste veces... Saludo, Franco |
|
|
| |
|
|
|
| Nochmal...
¡Hola Sven,
me está nie aufgefallen, el el Befehl así langsam ser se... Wahrscheinlich benötigt el Sistema länger, Daten de una Listview a lesen, como de Listboxen. Sombrero sí en el Regelfall auch mehrere Spalten.
Und el Listview strebt danach, beim löschen oder einfügen uno Eintrags el Listview a aktualisieren. Das kostet enorm Tiempo, kann aber ligeramente abgestellt voluntad
SendMessage(listview&,11,0,0) Neuaufbau des Listviews SendMessage(listview&,11,1,0) Wiederaufbau des Listviews (standart).
Yo glaube auch, du versuchst dein Problema verkehrt a lösen. Yo sería lo así hacer, el Yo el 20000 Zeilen einfügen sería y para Sch luss sólo con DeleteDoubleItems() todos doppelten Einträge löschen sería. So:
SendMessage(listview&,11,0,0) Neuaufbau des Listviews verhindern !
Whileloop GetColumns(listview&) DeleteDoubleItems(listview&,(&loop-1)) EndWhile
SendMessage(listview&,11,1,0) Wiederaufbau des Listviews (standart).
Teste veces... Saludo, Franco |
|
|
| |
|
|
|
| ¡Hola Franco, danke para el rasche Antwort.
Sombrero hay algo a sagen, dass DeleteDoubleItems() en el Ayuda no dokumentiert es? Beim Löschen doppeler Einträge se sólo una Column berücksichtigt voluntad. Tauchen en Spalte 1 Doppelte Einträge en así debería Sie gelöscht voluntad, igual qué en el otro Spalten es.
Como encima längere Tiempo veces mehr y veces weniger Zeilen eingefügt voluntad, se el Aktualisierung eigentlich siempre inmediatamente stattfinden y doppelte Zeilen a keiner Tiempo en el Liste ser. Es auch no el Aktualsierung, el largo braucht pero sólo el SearchText() Notfalls muss Yo eben doch al Ende encima una Double Befehl hacer, y mich con el doppelten Zeilen a dahin abfinden. Falls el Befehl auch spaltenweise funktioniert - hast du dazu una Concepto?
Sven |
|
|
| |
|
|
|
| Hi,
> ¡Hola Franco, danke para el rasche Antwort. > > Sombrero hay algo a sagen, dass DeleteDoubleItems() en el Ayuda no dokumentiert es?
Hmm, en meiner Ayuda Es el Función erklärt... Hast du veces una Actualización gemacht ?
> Beim Löschen doppeler Einträge se > sólo una Column berücksichtigt voluntad. Tauchen en Spalte 1 Doppelte Einträge en así debería Sie gelöscht voluntad, igual qué > en el otro Spalten es.
Noch einfacher, entonces kannst du el Whileloop-Bucle sí weglassen.
> > Como encima längere Tiempo veces mehr y veces weniger Zeilen eingefügt voluntad, se el Aktualisierung eigentlich siempre inmediatamente stattfinden > y doppelte Zeilen a keiner Tiempo en el Liste ser.
Dann baust du DeleteDoubleItems eben häufiger una. Anstatt a prüfen, si el Eintrag doppelt es, benutzt du DeleteDoubleItems.
> Es auch no el Aktualsierung, el largo braucht pero sólo > el SearchText() Notfalls muss Yo eben doch al Ende encima una Double Befehl hacer, y mich con el doppelten Zeilen > a dahin abfinden.
Como ya he dicho, kontinuierlich einbauen...
> Falls el Befehl auch spaltenweise funktioniert - hast du dazu una Concepto?
Hab Yo sí ya dijo. Hier Es el Syntax:
DeleteDoubleItems(H,S)
Löscht todos doppelt oder mehrfach vorkommen Itemtexte en uno Spalte uno Listviews.
H : Largo - Handle uno con CreateListview() erstellten Listview Controls S : Largo - Index el Spalte de H, deren mehrfach vorkommende Itemtexte gelöscht voluntad debería (nullbasierend)
Un schnelle y bequeme Método, doppelte, o. mehrfache Einträge a löschen. Um una komplettes Listview así a bearbeiten, necesario todos Spalten durchlaufen voluntad, z.B. así:
SendMessage(listview&,11,0,0) Neuaufbau des Listviews verhindern !
Whileloop GetColumns(listview&) DeleteDoubleItems(listview&,(&loop-1)) EndWhile
SendMessage(listview&,11,1,0) Wiederaufbau des Listviews (standart).
Saludo, Franco |
|
|
| |
|
|
|
| ¡Hola Franco, Yo denke Yo habs kapiert. Yo mache lo sin SearchText y bin esta todavía 3veces más rápido como con el Listbox Versión.
Listbox inmediatamente en doppelte Prüfen: 3:30 Minuten Listbox sin Prüfung: < 1 Minute
ListView inmediatamente en doppelte Prüfen: > 20 Minuten Listbox sin Prüfung: ca. 1 Minute
Damit kann Yo leben!
Nur desafortunadamente gibts el DeleteDouble Befehl en el aktuellen Paket no. Yo bin auch bastante verwirrt lo que el Versión y Ayuda Archivos angeht.
Aktueller Descargar:
Versión 1.5 Letzter Stand: 25.Nov.2003 Función unbekannt: DeleteDoubleItems
Ayuda en el Web:
Versión 1.6 Letzter Stand: 25.Nov.2003 DeleteDoubleItems() en Ayuda aufgeführt
Jetzt bin Yo aber verwirrt! Wo bekomme Yo el Versión 1.6, qué es salvo el DeleteDoubleItems todavía dazu gekommen y por qué es el Entwicklungsstand auch 25.Nov.2003 como en el 1.5.
Saludo, Sven |
|
|
| |
|
|
|
| Hi,
ah, como tener Yo wohl Mist gebaut. Yo werd dir el neue Dll-Versión veces así zuschicken, por Mail. Das Actualización kommt entonces, si todavía algunos Características dazgekommen son.
Saludo, Franco |
|
|
| |
|
|
|
| Wo hay porque el Versión 1.6 ? Auf el Website finde Yo sólo el 1.5
Gruss Dirk |
|
|
| |
|
|
|
| Hi,
sí, 1.5 es el letzte Actualización. 1.6 Beta es el Arbeitstitel meiner Dll-Versión, a el Yo actualmente sporadisch arbeite. Bisher Yo lo así mantenido, el una neues Actualización es, sobald algunos neue Características dazugekommen son. Und así lo auch weiterhin bleiben. Wann genau el 1.6 Actualización ahora erscheint, blanco Todavía no, sicherlich aber todavía dieses Jahr.
Saludo, Franco |
|
|
| |
|
|