Hauptseite >Tips zu VB5/6 > Modernisierte Refresh-Methode view this document in English | |
Wenn Sie eine länger laufende Prozedur haben, die ihren Verarbeitungsfortschritt visualisieren soll,
müssen Sie Windows explizit die Gelegenheit geben, die Visualisierung durchzuführen. Beispiel:
Wenn Sie diesen Code ablaufen lassen, werden Sie feststellen, dass das Label mitnichten anzeigt, beim
wievielten Schleifendurchlauf die Routine gerade ist. Mit folgender Ergänzung hingegen klappt's:
Statt Label1.Refresh könnten Sie auch DoEvents verwenden, jedoch führt dies zur
Abarbeitung aller anstehenden Ereignisse, z.B. auch einen
erneuten Klick auf den Button, der die Routine ein weiteres Mal starten würde. Gegen solche unerwünschten
Nebenwirkungen müssten Sie Vorkehrungen treffen, auf die Sie mit der Refresh-Methode getrost
verzichten können.
Seit Windows XP funktioniert das aber nur noch für kurze Zeit; nach einigen Sekunden ohne DoEvents-Rückmeldung meint Windows, das Programm sei zu beschäftigt zum Neuzeichnen, und fertigt deshalb einen Screenshot von ihm an, der über das Formular gelegt wird, bis sich das Programm wieder "vollständig zurückmeldet". Das ist zwar nett gemeint, konterkariert aber unsere obigen Bemühungen. Mit DoEvents wäre das Problem wieder aus der Welt geschafft, aber das wollten wir aus den besprochenen Gründen eigentlich gerade vermeiden. Was tun? Der folgende Ersatz für Refresh schafft Abhilfe:
Dieser Methode - die im Übrigen auch unter allen Win32-Versionen vor XP funktioniert - übergeben Sie das
Fensterhandle (hWnd) desjenigen Controls oder derjenigen Form, die aktualisiert werden soll.
Da ein Label als "windowless control" kein Fensterhandle besitzt, übergeben Sie einfach das Handle der
übergeordneten Form:
|
|
Hauptseite > Tips zu VB5/6 > diese Seite | |
© 2001-2021 Wolfgang Enzinger |