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 15.10.2010, 14:13   #1 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard Listview ein- & ausblenden

Hallo zusammen, Hi Frank, in meinem Projekt habe ich 3 Tabellen. 2 sichtbare & 1 große, unsichtbare (ca 150.000 Einträge). Aus der großen suche ich ich mit 'SearchText" in einem vorher eingegrenzen Bereich von etwa 15.000 Zeilen einen Suchbegriff in einer Spalte. Dieser kann mehrmals vorkommen (5-50 mal). Diese Spalte ist natürlich sortiert, so das dieser Suchbegriff nicht verstreut vorliegt. Bei einem Treffer kopiere ich die komplette Zeile (5 Spalten) mit 'CopyLineTo' in die sichtbare Zieltabelle.
Um die Suchgeschwindigkeit zu erhöhen habe die Listview.dll mit @importDll(,) statisch gelinkt (hab ja jetzt XProfan11.2). Die Suchschleife habe ich aus Frank's Listview-Hilfe hergeleitet:
Code:
zei& = 0
While 1        
   zei&=SearchText(LV&,zei&,ende&,spaltennr,suchbegriff#,2,0) ' suchen
   Case zei& = -1 : BREAK 'wenn keinTreffer, schleife verlassen
   copylineto(LV&,zielLV&,zei&,i&) 'zeile in die anzeigetabelle kopieren
   inc i&    'zeilenindex für anzeigetabelle für den nächsten Treffer erhöhen
   inc zei& 'suchstart-index für die nächste runde erhöhen
endwhile
Dies löppt jedoch bei mehr als ca. 10 Treffern etwas ruckelig.(merkwürdigerweise ruckelt die exe mehr als der Interpreter)
Ich vermute, daß Windows mit der visuellen Aktualisierung der Zieltabelle nicht hinterher kommt & kam deshalb auf die Idee die vis. Akt. während des Kopierens abzuschalten & zum Schluss die Tabelle 1x neu zeichnen lassen. Ich versprech mir da einen Geschwindigkeitsgewinn. Unter den Listview-Funktionen gibt es ja die 'UpdateListview(H)', um ein Neuzeichnen zu erzwingen - jetzt bräuchte ich das Gegenstück dafür: Neuzeichnen abschalten
Gibt es da Möglichkeiten?
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 15.10.2010, 14:50   #2 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Der Grund dafür ist wahrscheinlich:
Xprofan Programme sind nicht multithreadingfähig. Werden Funktionen in der DLL aufgerufen, geschieht das im selben Thread, in dem Messages verarbeitet werden. Solange Code innerhalb der DLL ausgeführt wird, werden keine Messages verarbeitet. In der compilierten EXE werden Messages nach jeder zwanzigsten Zeile verarbeitet - in der Profan.exe, die über den Editor ausgeführt wird, nach jeder Zeile.

Neuzeichnen abschalten:
Erfolg& = External("User32","LockWindowUpdate",Handle_der_Listview&)

Soll wieder aktualisiert werden, das gleiche nochmals aufrufen:
Erfolg& = External("User32","LockWindowUpdate",0)
Code:
 
zei& = 0
External("User32","LockWindowUpdate",LV&)
While 1 
zei&=SearchText(LV&,zei&,ende&,spaltennr,suchbegriff#,2,0) ' suchen
Case zei& = -1 : BREAK 'wenn keinTreffer, schleife verlassen
copylineto(LV&,zielLV&,zei&,i&) 'zeile in die anzeigetabelle kopieren
inc i& 'zeilenindex für anzeigetabelle für den nächsten Treffer erhöhen
inc zei& 'suchstart-index für die nächste runde erhöhen
endwhile
External("User32","LockWindowUpdate",LV&)
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT

Geändert von AHT (15.10.2010 um 15:21 Uhr)
AHT ist offline   Mit Zitat antworten
Alt 15.10.2010, 15:01   #3 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Ich denke zum wieder frei geben sollte es
External("User32","LockWindowUpdate",0) heißen
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 15.10.2010, 15:03   #4 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Danke Bangkok. Hast Recht, das wäre noch besser .
Code:
 
zei& = 0
External("User32","LockWindowUpdate",LV&)
While 1 
zei&=SearchText(LV&,zei&,ende&,spaltennr,suchbegriff#,2,0) ' suchen
Case zei& = -1 : BREAK 'wenn keinTreffer, schleife verlassen
copylineto(LV&,zielLV&,zei&,i&) 'zeile in die anzeigetabelle kopieren
inc i& 'zeilenindex für anzeigetabelle für den nächsten Treffer erhöhen
inc zei& 'suchstart-index für die nächste runde erhöhen
endwhile
External("User32","LockWindowUpdate",0)
PS: Hab den Blödsinn oben editiert.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT

Geändert von AHT (15.10.2010 um 15:22 Uhr)
AHT ist offline   Mit Zitat antworten
Alt 15.10.2010, 15:50   #5 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

Jo! das funzt prächtig, Danke euch beiden!
Ich kann also damit gezielt mehrere einzeln Fenster sperren, aber alle auf einmal wieder entsperren.
Hat mir sehr geholfen
Gibt es Geschwindigskeitstechnisch an der Suchroutine selbst noch was zu verbessern? Vllt. die Abbruchbedingung im Kopf definieren & auf case verzichten?
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 15.10.2010, 15:56   #6 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Nein, du kannst immer nur ein Fenster zur Zeit sperren. Mit 0 hebst du die Sperrung auf.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 15.10.2010, 16:02   #7 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Man kann zwar alles mögliche dafür nehmen, aber vorgesehen ist:
Code:
~SendMessage(LV&, %WM_SETREDRAW, 0, 0)
und
Code:
~SendMessage(LV&, %WM_SETREDRAW, 1, 0)
wenns dann gefüllt ist

PS: %WM_SETREDRAW entspricht 11

Gruß
Thomas
ts-soft ist gerade online   Mit Zitat antworten
Alt 15.10.2010, 16:26   #8 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Vielleicht kann Jörg mal testen, ob die Message genausogut funktioniert wie LockWindowUpdate. Ich habe den Verdacht, das tut es nicht - ist aber nur eine Vermutung..
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 15.10.2010, 17:26   #9 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Zitat:
Zitat von AHT Beitrag anzeigen
Vielleicht kann Jörg mal testen, ob die Message genausogut funktioniert wie LockWindowUpdate. Ich habe den Verdacht, das tut es nicht - ist aber nur eine Vermutung..
Nach meiner Erfahrung arbeitet die Message nicht so gut, vor allem wenn eine große Datenmenge eingeladen wird, versagt sie, das Update erfolgt etwas seltener als ohne Message, wird aber nicht vollständig unterdrückt. Deshalb verwende ich nur noch Lockwindowupdate()
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 15.10.2010, 17:43   #10 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Der Repaint scheint mit LockWindowUpdate auch sicherer zu funktionieren.
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 15.10.2010, 18:27   #11 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

siehe MSDN: http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
Zitat:
The purpose of the LockWindowUpdate function is to permit drag/drop feedback to be drawn over a window without interference from the window itself. The intent is that the window is locked when feedback is drawn and unlocked when feedback is complete. LockWindowUpdate is not intended for general-purpose suppression of window redraw. Use the WM_SETREDRAW message to disable redrawing of a particular window.
Wäre die Message also die richtige Wahl. Wenn die nicht richtig funktioniert
liegts dann wohl am MessageHandling von XProfan.

Gruß
Thomas
ts-soft ist gerade online   Mit Zitat antworten
Alt 15.10.2010, 21:01   #12 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Ich denke mal, wenn z.B. 1000 Datensätze eingelesen werden müssen wirkt die Message nach ein paar Einträgen scheinbar nicht mehr. Bei den paar Dateien, die man mit drag/drop einfügt aber schon, da es ja sehr schnell passiert. An das profansche Messagehandling glaube ich in diesem Fall nicht.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 15.10.2010, 21:45   #13 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Da haste was mißverstanden, LockWindowUpdate ist nur und ausschließlich
für Drag'n Drop, um Dropsymbole über einem Fenster darzustellen.
Für alles andere in der Art sollte man die Message nutzen.

Gruß
Thomas

(Mein Englisch ist zwar auch sch..sse, aber mein Translator funzt gut )
ts-soft ist gerade online   Mit Zitat antworten
Alt 15.10.2010, 21:59   #14 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von JörgG
 
Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
Standard

...wollte trotzdem mal die sendmessage-variante durchspielen. Ist ja wirklich ganz nützlich zu wissen, welche der beiden Varianten für so einem Fall die bessere ist. Und jetzt bietet sich ja die Möglichkeit, wo ich eh am tüfteln bin...
aaaaber - ich krieg die ~SendMessage(LV&, %WM_SETREDRAW, 0, 0) nicht zum laufen Muss ich da vorher noch was definieren? Steh jetzt iwie auf 'm Schlauch....
Gruß Jörg
JörgG ist offline   Mit Zitat antworten
Alt 15.10.2010, 22:07   #15 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Code:
$H Windows.ph

~SendMessage(LV&, 11, 0, 0)
Sollte funktionieren.

// edit
Code:
@SendMessage(LV&, 11, 0, 0)
sollte eigentlich reichen

Geändert von ts-soft (15.10.2010 um 22:13 Uhr)
ts-soft ist gerade online   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
ListView DLL & WindowStyle 512 Hovy Dlls, Includes, Units & Prozeduren 5 18.04.2010 11:37
Wie baue ich listview ein? Peter C. Dlls, Includes, Units & Prozeduren 12 31.03.2009 08:14
listview Peter C. Spezielles 6 29.03.2009 00:41
Listview Peter C. Helfer & Tools 3 28.03.2009 09:30
Listview.dll & Odbc2Lv.prf kelte Dlls, Includes, Units & Prozeduren 2 26.03.2009 19:20



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:12 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