AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Invalidate, Repaint, Refresh, Update, Paint... ?
Thema durchsuchen
Ansicht
Themen-Optionen

Invalidate, Repaint, Refresh, Update, Paint... ?

Ein Thema von Medium · begonnen am 14. Sep 2009 · letzter Beitrag vom 16. Sep 2009
 
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#1

Invalidate, Repaint, Refresh, Update, Paint... ?

  Alt 14. Sep 2009, 11:45
Aloah!

Ich verzweifel gerade am simplen Neuzeichnen meiner selbst gebauten Komponenten. Diese sind direkt von TGraphicControl abgeleitet, und tragen einen kleinen Timer mit sich herum der sie auf Wunsch blinken lässt. Jeder "Blink" muss dabei dann natürlich neu gezeichnet werden, was ich bisher einfach über ein Repaint gemacht hatte.
Delphi-Quellcode:
procedure TMyGraphObject.BlinkProc(Sender: TObject);
begin
  FIsLit := not FIsLit;
  Repaint;
end;
Und im Paint wird dann anhand von FIsLit in der einen oder anderen Farbe gezeichnet. Nix spannendes.

Nun habe ich ein Projekt, bei dem sehr viele dieser (und anderer) Komponenten auf einem Formular liegen - so ~200-400 Stück. (Es ist ein Prozessabbild, da muss so viel rein ). Die Krux ist nun, dass offenbar jedes Repaint jeder Komponente ein komplettes Neuzeichnen des gesamten Formulars auslöst, wodurch das ganze merkbar lahm wird, wenn da mal so 50 Kästchen blinken sollen. (Und damit meine ich RICHTIG lahm, die Blink-Frequenz ist auf 750ms, und die werden nichtmal mehr geschafft. Dabei sind es alles nur einfache Figuren, keine aufwendigen Farbverläufe o.ä.)
Invalidate, Refresh, und auch ein InvalidateRect mit einem Rect in Größe der Kompo führen ebenfalls alle zu o.g. Verhalten.
Update löst überhaupt kein Neuzeichnen aus.

Abhilfe, und zwar massiv, schafft hier zwar ein Tauschen von Repaint mit Paint, allerdings werden dann natürlich z.B. Labels (generell alle TGraphicControls - also Parent-Canvas nutzende) die auf diesen Komponenten liegen natürlich einfach übernagelt. DAS darf nun aber auch nicht passieren!

Wie kann ich es erreichen, dass wirklich NUR die Elemente mit neu gezeichnet werden, die auch wirklich von meinem gerade übermalt worden sind (anstelle des kompletten Fensters)?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
 


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 10:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz