AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem mit Invalidate
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Invalidate

Ein Thema von punker76 · begonnen am 20. Jun 2006 · letzter Beitrag vom 21. Jun 2006
 
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Problem mit Invalidate

  Alt 20. Jun 2006, 23:56
Invalidate vermerkt nur das Neuzeichnen, fasst mehrere als "dreckig" markierte Bereiche zusammen und löst dann irgendwann ein neuzeichnen aus. Folgende Tipps:

1. Der Canvas deiner Form hat eine Eigenschaft ClipRect, welches den zu aktualisierenden Bereich enthält. Der Bereich ausserhalb dieses Rechtecks braucht nicht gezeichnet zu werden, alle Zeichenoperationen werden unterdrückt bzw. sind umsonst. Daher passe dein BitBlt() an:
1a. Du kannst im Paint überhaupt mal schauen, ob du den Bereich des BitBlt() überhaupt zeichnen musst
1b. Passe BitBlt() so an, dass er nur noch den wirklich nötigen Teil malt.

Delphi-Quellcode:
Var
  lSectionRect,
  lDrawRect: TRect;
Begin
  lDrawRect := Rect(0, 0, FBuffer.Width, FBuffer.Height);

  If IntersectRect(Canvas.ClipRect, lDrawRect, lSectionRect) Then
  Begin
    BitBlt(Canvas.Handle,
             lSectionRect.Left,
             lSectionRect.Top,
             lSectionRect.Right - lSectionRect.Left,
             lSectionRect.Bottom - lSectionRect.Top,
           FBuffer.Canvas.Handle,
             lSectionRect.Left,
             lSectionRect.Top,
           SRCCOPY);
  End;
End;
2. Wenn du was neuzeichnen willst, dann markiere nicht immer die gesamte Form als "dreckig" mit Invalidate, sondern nur den Bereich, der wirklich neu gezeichnet werden muss (z.B. nur der Balken der sich geändert hat). Dazu nutze InvalidateRect()

/EDIT:
Du kannst ruhig mehrere InvalidateRect() Aufrufe machen - Windows fügt diese dreckigen Bereiche zusammen und optimiert die Malbereiche im Paint auch dahingehend. Das ist auch ein Vorteil zur Optimierung, da man so schon einige Paint Aufrufe sparen kann.
  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 05:58 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