![]() |
TBitmap als Buffer nutzen
Hallo
Folgendes Problem ich verwende eine abgeleitet TPaintBox in der ich einmal ein TBitmap erzeuge und das als Buffer benutze. Nun habe ich das Problem das jede Menge GDI Handles da drauf gehen. Irgendwie so in der Art wie wenn jedesmal die Handles für PEN und co erzeugt werden
Delphi-Quellcode:
Die Ressourcen gehen der reihe nach flöten (im Taskmanger sieht mans wies raufegehn) wenn das System in die DoPaint funktion reingeht
constructor TMyPaintBox.Create(AOwner : TComponent);
begin inherited; fBuffer := TBitmap.Create; fBuffer.Canvas.Lock; ControlStyle := ControlStyle + [csOpaque]; end; destructor TMyPaintBox.Destroy; begin fBuffer.Canvas.UnLock; FreeAndNil(fBuffer); inherited; end; procedure TMyPaintBox.BeginPaint; begin if assigned(fBuffer) then begin if fBuffer.Width <> ClientWidth then fBuffer.Width := ClientWidth; if fBuffer.Height <> ClientHeight then fBuffer.Height := ClientHeight; end; end; procedure TMyPaintBox.WMEraseBkgnd(var Message: TWmEraseBkgnd); begin Message.Result := 1; end; procedure TMyPaintBox.Invalidate; begin fChanged := TRUE; //DoPaint; inherited; end; procedure TMyPaintBox.DoPaint; begin BeginPaint; if assigned(fPainter) then begin fPainter.ClientRect := ClientRect; fBuffer.Canvas.Brush.Color := clWhite; fBuffer.Canvas.FillRect(ClientRect); // hier zeichnen end; fChanged := FALSE; end; procedure TMyPaintBox.Paint; begin if (fBuffer.Width <> ClientWidth) or (fBuffer.Height <> ClientHeight) or fChanged then DoPaint; BitBlt(Canvas.Handle, 0, 0, Width, Height, fBuffer.Canvas.Handle, 0, 0, SRCCOPY); end; Das mit dem Canvas.Lock und so war nur ein Test um zu kontrollieren, ob es was mit dem FreeDviceContext des VCL zu tun hat .... da ja alle GDI Handle am Ende der Windows Message Freigegeben werden -> und dann jedesmal der State des Canvas wieder [] ist .... |
AW: TBitmap als Buffer nutzen
Hat sich erledigt - gefunden es war wo ein CreateRectRgn drinnen ... das nicht mehr freigegeben wurde ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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