Versuch es mal hiermit.
Ich habe jetzt nur das Zeichnen verhindert, aber das könnte genauso gut auch umgeleitet werden auf ein leeres Bitmap mit der gleichen Größe
Delphi-Quellcode:
TLayerBitmap = class( TBitmap )
private
FCanDraw : Boolean;
protected
procedure Draw( ACanvas : TCanvas; const Rect : TRect ); override;
procedure DrawTransparent(ACanvas: TCanvas; const Rect: TRect; Opacity: Byte); override;
public
property CanDraw : Boolean read FCanDraw write FCanDraw;
end;
{ TLayerBitmap }
procedure TLayerBitmap.Draw( ACanvas : TCanvas; const Rect : TRect );
begin
if not FCanDraw then
Exit;
inherited;
end;
procedure TLayerBitmap.DrawTransparent(ACanvas: TCanvas; const Rect: TRect; Opacity: Byte);
begin
if not FCanDraw then
Exit;
inherited;
end;
Und das funktioniert deswegen, weil bei
TCanvas.Draw irgendwann einmal das hier aufgerufen wird
Delphi-Quellcode:
procedure TCanvas.Draw(X, Y: Integer; Graphic: TGraphic);
begin
if (Graphic <> nil) and not Graphic.Empty then
begin
...
Graphic.Draw(Self, Rect(X, Y, X + Graphic.Width, Y + Graphic.Height));
...
end;
end;
Und wenn man das sieht, dann weiß man auch, dass die Umleitung auf ein leeres Bitmap den gleichen Effekt hat, als wenn man das Zeichnen abbricht
Darum sollte meine Bitmap-Ableitung genau das erfüllen, was dir da vorschwebt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)