AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Maus auf Form: andere Priorität beim Repaint?
Thema durchsuchen
Ansicht
Themen-Optionen

Maus auf Form: andere Priorität beim Repaint?

Ein Thema von alzaimar · begonnen am 18. Dez 2006 · letzter Beitrag vom 20. Dez 2006
Antwort Antwort
Seite 2 von 2     12   
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: Maus auf Form: andere Priorität beim Repaint?

  Alt 19. Dez 2006, 18:32
Zitat von alzaimar:
... Das Verfahren ... nennt sich im Fachjargon: "Extreme-Hair-Raufing".
Solche Verfahren benachteiligen Menschen mit einem dritten Knie und sind deshalb extreme unfair ...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: Maus auf Form: andere Priorität beim Repaint?

  Alt 19. Dez 2006, 20:25
Zitat von marabu:
Ein Repaint() gefolgt von einem Application.ProcessMessages - das muss schon sein, da sonst das auf WM_PAINT basierende UpdateWindow() nicht funktioniert - sollte den gewünschten Erfolg bringen, wenn (1) die Komponente von TWinControl abgeleitet wurde und (2) Windows keinen Einspruch erhebt.
Nein, da habe ich andere Erfahrungen gemacht.

Zitat von MSDN:
The UpdateWindow function updates the client area of the specified window by sending a WM_PAINT message to the window if the window's update region is not empty. The function sends a WM_PAINT message directly to the window procedure of the specified window, bypassing the application queue. If the update region is empty, no message is sent.
Somit ist Application.ProcessMessages hinfällig. Auch habe ich die Erfahrung gemacht, dass mit der Rückkehr von UpdateWindow() ohne Fehler das Fenster auch fertig gezeichnet wurde. Daher ist das Aufrufen von Application.ProcessMessages zu dem Zeitpunkt eh zu spät.

Wie ich das rausgefunden habe? Ich habe in meiner Anwendung eine Lupe selbst implementiert. Wenn ich Aktionen an einem grafischen Objekt gemacht habe (z.B. verschoben), so habe ich alle solche Aktionen mit Invalidate(Rect) begleitet, damit das grafische SubSystem meiner App das System und die App nicht ausbremst (bei bis zu 10.000 Objekte auch dringend nötig). Im Paint Handler wird das ClipRect des TCanvas honoriert, was die Systemlast auch immens mindert. Ok, das zu Einleitung. Ich hatte den Fehler festgestellt, dass beim verschieben der Objekte die Lupe immer ein verpätetes Bild darstellte. Dies war das Problem des Invalidate, welches in höherer Ebene gefolgt wurde von einem BitBlt() für die Lupe. Nach dem Einfügen von einem UpdateWindow(Handle) vor dem BitBlt() ist das Bild nun immer hunderprozentig korrekt und somit war sichergestellt, dass mit der Rückkehr von UpdateWindow() die Canvas schon aktuell ist. Auch auf den lahmsten Kisten läuft es, also liegt es nicht am schnellen Rechner.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: Maus auf Form: andere Priorität beim Repaint?

  Alt 20. Dez 2006, 07:50
Hallo Thomas,

gut dass du das klar gestellt hast, aber hier steht nicht Erfahrung gegen Erfahrung: Ich hatte lediglich nach WM_PAINT schon aufgehört zu lesen.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17:53 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