AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials [Artikel] Painting only when your window is visible on...
Tutorial durchsuchen
Ansicht
Themen-Optionen

[Artikel] Painting only when your window is visible on...

Ein Tutorial von Luckie · begonnen am 7. Mär 2006 · letzter Beitrag vom 9. Mär 2006
Antwort Antwort
Benutzerbild von Luckie
Luckie
Registriert seit: 29. Mai 2002
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.
Ein Teil meines Codes würde euch verunsichern.
 
Benutzerbild von turboPASCAL
turboPASCAL

 
Delphi 6 Personal
 
#2
  Alt 7. Mär 2006, 19:52
Schön das du die Zeit gefunden hast das mal zu übersetzen. Auch nach Delphi.
Danke.
Matti
  Mit Zitat antworten Zitat
Daniel G
 
#3
  Alt 7. Mär 2006, 20:00
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.

Aber das Tutorial ist nett...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry

 
Delphi 2006 Professional
 
#4
  Alt 7. Mär 2006, 20:17
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
Jens
  Mit Zitat antworten Zitat
Thorben77
 
#5
  Alt 7. Mär 2006, 21:29
Zitat von Daniel G:
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#6
  Alt 7. Mär 2006, 22:17
Erst mal Danke für eure Verbesserungsvorschläge. Werde ich gleich einarbeiten.

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.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry

 
Delphi 2006 Professional
 
#7
  Alt 8. Mär 2006, 12:47
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.
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#8
  Alt 8. Mär 2006, 12:52
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.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry

 
Delphi 2006 Professional
 
#9
  Alt 9. Mär 2006, 08:04
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.
Jens
  Mit Zitat antworten Zitat
DerDan

 
Delphi XE3 Professional
 
#10
  Alt 9. Mär 2006, 09:05
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 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