Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   [Artikel] Painting only when your window is visible on... (https://www.delphipraxis.net/64747-%5Bartikel%5D-painting-only-when-your-window-visible.html)

Luckie 7. Mär 2006 17:30


[Artikel] Painting only when your window is visible on...
 
Auf meiner Homepage gibt es eine neuen Artikel: "Painting only when your window is visible on the screen"

Er beruht auf dem gleichnamigen Artikel von Raymond Chen: Painting only when your window is visible on the screen Nur dass er in Deustch ist und ein entsprechendes Demo Programm in Delphi dabei ist. Wie der Titel schon sagt, geht es darum, dass man den Clientbereich des Fensters nur dann aktualisieren braucht, wenn er überhaupt sichtbar ist. Demonstrieren tue ich das an hand eines kleinen Delphi Programmes zum besseren Verständnis.

Zitat:

Wie man sieht, sind es häufig die Details, die aus einer Anwendung, eine Anwendung mit dem gewissen Etwas machen.

turboPASCAL 7. Mär 2006 19:52

Re: Painting only when your window is visible on the screen
 
Schön das du die Zeit gefunden hast das mal zu übersetzen. Auch nach Delphi. ;)
Danke.

Daniel G 7. Mär 2006 20:00

Re: Painting only when your window is visible on the screen
 
Nice, aber...Hat das jemand Korrektur gelesen? Weil da doch einige Schlechtschreibfehler drinne sind...Und die Grammatik gefällt mir an dieser Stelle auch nicht wirklich:

Zitat:

Da wir eigentlich nur ein Fenster und einen Timer brauchen und der Übersichtlichkeit halber, verwende ich ein einfaches nonVCL Programm, ich verzichte also auf die VCL und benutze nur Windows API Funktionen
Klingt etwas ungeschickt. Ich würde es so schreiben:

Zitat:

Da wir eigentlich nur ein Fenster und einen Timer brauchen, verwende ich der Übersichtlichkeit wegen ein einfaches nonVCL Programm, verzichte also auf die VCL und benutze nur Windows API Funktionen.
Nur so nebenbei bemerkt. :duck:

Aber das Tutorial ist nett... :wink:

SirThornberry 7. Mär 2006 20:17

Re: Painting only when your window is visible on the screen
 
wird durch invalidate nicht genau der Effekt auch erreicht? Ich dachte es wäre so das erst wenn das Fenster sichtbar wird dann die wm_Paint nachricht kommt (kann mich natürlich auch täuschen -> wird dann gleich getestet)

Ich hab grad getestet und es ist wirklich so. Wenn man "Control.Invalidate" aufruft wird nur eine wm_paint ausgelöst wenn die Komponente sichtbar ist. Wenn die Komponente nicht sichtbar ist wird erst sobald die Komponente sichtbar ist die wm_paint ausgelöst

Thorben77 7. Mär 2006 21:29

Re: Painting only when your window is visible on the screen
 
Zitat:

Zitat von Daniel G
Zitat:

Zitat von Luckie
Da wir eigentlich nur ein Fenster und einen Timer brauchen, verwende ich der Übersichtlichkeit wegen ein einfaches nonVCL Programm, verzichte also auf die VCL und benutze nur Windows API Funktionen.


Selbst so ist das noch nicht ganz richtig, es fehlen noch ein paar Bindestriche:
Zitat:

Da wir eigentlich nur ein Fenster und einen Timer brauchen, verwende ich der Übersichtlichkeit wegen ein einfaches nonVCL-Programm, verzichte also auf die VCL und benutze nur Windows-API-Funktionen.
MfG

PS: Das sind Deppen Leer Zeichen :wink:

Luckie 7. Mär 2006 22:17

Re: Painting only when your window is visible on the screen
 
Erst mal Danke für eure Verbesserungsvorschläge. Werde ich gleich einarbeiten.

Zitat:

Zitat von SirThornberry
Wenn man "Control.Invalidate" aufruft wird nur eine wm_paint ausgelöst wenn die Komponente sichtbar ist. Wenn die Komponente nicht sichtbar ist wird erst sobald die Komponente sichtbar ist die wm_paint ausgelöst

Das mag ja bei einer VCL Komponente so sein, InvalidateRect ist aber die API Funktion.

SirThornberry 8. Mär 2006 12:47

Re: Painting only when your window is visible on the screen
 
Invalidate macht über umwege auch nix anderes als InvalidateRect aufzurufen. Werds aber heut abend mal probieren ob es bei direkter verwendung der Api dann wirklich nicht geht.

Luckie 8. Mär 2006 12:52

Re: Painting only when your window is visible on the screen
 
Aber auch wenn es so sein sollte, der Sinn ist ja, dass der Timer nur läuft und Systemressourcen braucht, wenn das Fenster auch sichtbar ist.

SirThornberry 9. Mär 2006 08:04

Re: Painting only when your window is visible on the screen
 
also ich habs grad getestet und auch bei Verwendung InvalidateRect wird erst die wm_paint-message ausgelöst wenn das Fenster wieder sichtbar ist.

@Luckie: Auf diese Art und weise werden ja auch nur systemressourcen benötigt wenn das Fenster sichtbar ist (zum painten). Und die Ressourcen für den Timer spaart man sich auch noch. Aber hat wohl alles auf irgendeine Art vor und Nachteile. Wollte nur der Vollständigkeit halber eben erwähnen das es auch noch andere Möglichkeiten gibt das "painting only when windows is visible" zu erreichen.

DerDan 9. Mär 2006 09:05

Re: Painting only when your window is visible on the screen
 
Ich glaub das was Lucki erreichen will passt nicht ganz zu seinem Titel,

der Titel müßte lauten "Minimieren der Resourcen bei unsichtbarem Fenster" oder so ähnlich ...

weil gemalt wird definitif nichts, wenn ein Fenster nicht sichtbar ist...


mfg


DerDan


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz