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:
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;
Die Ressourcen gehen der reihe nach flöten (im Taskmanger sieht mans wies raufegehn) wenn das System in die DoPaint funktion reingeht
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 ....