| |
|
|
| allô Frank,
je hatte avant, dans einem meiner Programme une Windows Listbox par un Listview auszutauschen. dans einem Testlauf volonté ca. 20.000 Zeilen eingefügt wobei avant dem insérer chacun la ligne geprüft wird, si cet déjà vorhanden ist. qui Listbox-Version était dans knapp 4 Minuten par, qui Listview Version habe je pour 20 Minuten et 1/10 qui travail abgebrochen.
dans qui Listbox Frage je ca so ab: exist& = SendMessage(box&,$01A2,-1,addr(edit$))
je cherche pour qui genauen la ligne
chez dem Listview fonctionne cela so: exist& = SearchText(box&,0, GetLines(box&),1,Addr(edit$),10,addr(exist2&))
Genauer String, cherche seulement dans qui betreffenden Spalte. déjà chez 2.000 Zeilen verdammt lente.
-Gibt es aucun Vergleichbare Windows Message, qui entweder du verwenden peux ou bien du mir empfehlen peux.
-peux du den Aufbau qui Funktion encore la fois überdenken, je suis sûrement, dass on le reste optimaliser peux.
-je ne sais pas comme allez mais je serait es so faire: seulement pour dem ersten marque chacun la ligne chercher, chez übereinstimmung aussi cela zweite abfragen usw.
-Habe je une vorhandenen Befehl übersehen?
-Sinnvoll wäre un SearchText-Lite variante, qui puis optimiert ist seulement dans einer Spalte trop chercher et chez qui ersten Fundstelle juste abbricht. Den paramètre pour Fundstellen-Spalte pourrait on hierbei aussi omettre.
si du es schaffst, qui Funktion doppelt so vite trop faire peux je encore rien anfangen, seulement si es zumindest demie so vite comment dans den Listboxes ist wäre es akzeptabel. Avez- du c'est machbar?
Salut, Sven |
|
|
| |
|
|
|
| Habe folgendes dans qui Win32.hlp trouvé, konnte es cependant pas erfolgreich dans un Funktion ou bien 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 message searches for a list view item with le specified c haracteristics. You can send this message explicitly or by using le ListVi ew_FindItem macro.
Paramètres
hwnd
Handle to le list view control.
iStart
index of le item to begin le search with or -1 to start à partir de le beginnin g. The specified item is itself excluded à partir de le search.
plvfi
Pointer to à LV_FINDINFO structure that contains information about what to search for. Retour Value
Returns le index of le item si successful or -1 otherwise.
je halte es pour unwahrscheinlich mais peut-être bremst aussi qui Befehl GetLines(box&) qui ganze l'affaire? Liest qui Befehl seulement une Wert aus ou bien muss il chaque fois le Zeilen de 0 jusqu'à Ende durchzählen? |
|
|
| |
|
|
|
| allô Sven,
c'est moi nie aufgefallen, cela qui Befehl so lente son soll... Wahrscheinlich nécessaire cela System länger, données aus einem Listview trop lesen, comme aus Listboxen. Hat oui im Regelfall aussi plusieurs Spalten.
et cela Listview strebt après, beim effacer ou bien insérer eines Eintrags cela Listview trop aktualisieren. cela kostet enorm Zeit, peux mais léger abgestellt volonté
SendMessage(listview&,11,0,0) Neuaufbau des Listviews SendMessage(li stview&,11,1,0) Wiederaufbau des Listviews (standart).[/CODE
je crois aussi, du versuchst dein Problem verkehrt trop lösen. je serait es so faire, le moi qui 20000 Zeilen insérer serait et zum Sch luss seulement avec DeleteDoubleItems() alle doppelten Einträge effacer serait. 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 la fois... Salut, Frank |
|
|
| |
|
|
|
| Nochmal...
allô Sven,
c'est moi nie aufgefallen, cela qui Befehl so lente son soll... Wahrscheinlich nécessaire cela System länger, données aus einem Listview trop lesen, comme aus Listboxen. Hat oui im Regelfall aussi plusieurs Spalten.
et cela Listview strebt après, beim effacer ou bien insérer eines Eintrags cela Listview trop aktualisieren. cela kostet enorm Zeit, peux mais léger abgestellt volonté
SendMessage(listview&,11,0,0) Neuaufbau des Listviews SendMessage(listview&,11,1,0) Wiederaufbau des Listviews (standart).
je crois aussi, du versuchst dein Problem verkehrt trop lösen. je serait es so faire, le moi qui 20000 Zeilen insérer serait et zum Sch luss seulement avec DeleteDoubleItems() alle doppelten Einträge effacer serait. 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 la fois... Salut, Frank |
|
|
| |
|
|
|
| allô Frank, merci pour qui rasche Antwort.
Hat es quelque chose trop dire, dass DeleteDoubleItems() dans qui Aider pas dokumentiert ist? Beim Effacer doppeler Einträge soll seulement une Column berücksichtigt volonté. plonger dans Spalte 1 Doppelte Einträge sur so devoir vous gelöscht volonté, juste quoi dans den anderen Spalten ist.
là sur längere Zeit la fois plus et la fois moins Zeilen eingefügt volonté, soll qui Aktualisierung eigentlich toujours tout de suite stattfinden et doppelte Zeilen trop aucun Zeit dans qui liste son. c'est aussi pas qui Aktualsierung, qui longtemps braucht mais seulement cela SearchText() Notfalls muss je es plan doch am Ende sur une Double Befehl faire, et mich avec den doppelten Zeilen jusqu'à dahin abfinden. si qui Befehl aussi spaltenweise funktioniert - la hâte du en supplément une concept?
Sven |
|
|
| |
|
|
|
| Hi,
> allô Frank, merci pour qui rasche Antwort. > > Hat es quelque chose trop dire, dass DeleteDoubleItems() dans qui Aider pas dokumentiert ist?
Hmm, dans meiner Aider ist qui Funktion erklärt... la hâte du la fois un Update gemacht ?
> Beim Effacer doppeler Einträge soll > seulement une Column berücksichtigt volonté. plonger dans Spalte 1 Doppelte Einträge sur so devoir vous gelöscht volonté, juste quoi > dans den anderen Spalten ist.
encore einfacher, ensuite peux du qui Whileloop-Boucle oui omettre.
> > là sur längere Zeit la fois plus et la fois moins Zeilen eingefügt volonté, soll qui Aktualisierung eigentlich toujours tout de suite stattfinden > et doppelte Zeilen trop aucun Zeit dans qui liste son.
ensuite baust du DeleteDoubleItems plan häufiger un. Anstatt trop vérifier, si qui Eintrag doppelt ist, benutzt du DeleteDoubleItems.
> c'est aussi pas qui Aktualsierung, qui longtemps braucht mais seulement > cela SearchText() Notfalls muss je es plan doch am Ende sur une Double Befehl faire, et mich avec den doppelten Zeilen > jusqu'à dahin abfinden.
Comme je le disais, kontinuierlich einbauen...
> si qui Befehl aussi spaltenweise funktioniert - la hâte du en supplément une concept?
Hab je oui déjà dit. ici ist qui Syntax:
DeleteDoubleItems(H,S)
Löscht alle doppelt ou bien mehrfach vorkommen Itemtexte dans einer Spalte eines Listviews.
H : Long - Handle eines avec CreateListview() erstellten Listview Controls S : Long - index qui Spalte de H, en mehrfach vorkommende Itemtexte gelöscht volonté devoir (nullbasierend)
une schnelle et bequeme Methode, doppelte, bzw. mehrfache Einträge trop effacer. Um un komplettes Listview avec cela trop Travailler, doit alle Spalten durchlaufen volonté, z.B. 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).
Salut, Frank |
|
|
| |
|
|
|
| allô Frank, je denke je habs kapiert. je fais es sans SearchText et suis dabei encore 3la fois plus rapide comme avec qui Listbox Version.
Listbox tout de suite sur doppelte vérifier: 3:30 Minuten Listbox sans Prüfung: < 1 minute
ListView tout de suite sur doppelte vérifier: > 20 Minuten Listbox sans Prüfung: ca. 1 minute
avec cela peux je vivre!
seulement malheureusement gibts den DeleteDouble Befehl dans dem aktuellen paquet pas. je suis aussi droite verwirrt quoi qui Version et Aider Fichiers angeht.
Aktueller Télécharger:
Version 1.5 dernier Stand: 25.Nov.2003 Funktion inconnu: DeleteDoubleItems
Aider im Web:
Version 1.6 dernier Stand: 25.Nov.2003 DeleteDoubleItems() dans Aider aufgeführt
maintenant suis je mais verwirrt! wohin bekomme je qui Version 1.6, quoi ist ausser dem DeleteDoubleItems encore en supplément gekommen et pourquoi ist qui Entwicklungsstand aussi 25.Nov.2003 comment chez qui 1.5.
Salut, Sven |
|
|
| |
|
|
|
| Hi,
ah, là hab je wohl Mist gebaut. je werd dir qui neue Dll-Version la fois so zuschicken, per Mail. cela Update venez ensuite, si encore quelques Funktionen dazgekommen sommes.
Salut, Frank |
|
|
| |
|
|
|
| wohin gibt es car qui Version 1.6 ? sur qui Website finde je seulement qui 1.5
Gruss Dirk |
|
|
| |
|
|
|
| Hi,
oui, 1.5 ist cela dernier Update. 1.6 Beta ist qui Arbeitstitel meiner Dll-Version, à qui je momentan sporadisch arbeite. Bisher habe je es so gehalten, cela un nouveau Update erfolgt, sobald quelques neue Funktionen dazugekommen sommes. et so wird es aussi weiterhin rester. quand oui c'est ca cela 1.6 Update maintenant erscheint, weiss je encore pas, sicherlich mais encore cet l'an.
Salut, Frank |
|
|
| |
|
|