Klar:
Ich übergebe entweder Printer.Canvas oder Self.Canvas, je nach dem ob ich meine Graphik einfach auf dem Bildschirm oder auf dem Drucker ausgeben möchte. BackgroundBitmap ist global definiert und wird im Konstruktor der Form angelegt.
Delphi-Quellcode:
FBackgroundBitmap := TBitmap.Create;
FBackgroundBitmap.Canvas.Pen.Width := 2;
FBackgroundBitmap.Canvas.Pen.Color := clBlack;
FBackgroundBitmap.Transparent := True;
FBackgroundBitmap.Width := 3;
FBackgroundBitmap.Height := 3;
Delphi-Quellcode:
procedure DrawOuterRect(ACanvas: TCanvas; ARect: TRect; Layer: Integer; Background: Boolean; Offset: Integer);
var
BorderColor: TColor;
begin
Offset := Max(1, GetLogicalUnit(ACanvas, Offset));
ACanvas.Pen.Width := Max(1, GetLogicalUnit(ACanvas, Border));
BorderColor := LayerColorScheme(Layer);
ACanvas.Brush.Color := BorderColor;
if (Background) then
begin
BackgroundBitmap.Canvas.Brush.Color := BorderColor;
BackgroundBitmap.Canvas.FillRect(Rect(0,0,FBackgroundBitmap.Width, FBackgroundBitmap.Height));
BackgroundBitmap.Canvas.MoveTo(Round(FBackgroundBitmap.Width/2), Round(FBackgroundBitmap.Height/2));
BackgroundBitmap.Canvas.LineTo(Round(FBackgroundBitmap.Width/2), Round(FBackgroundBitmap.Height/2));
BackgroundBitmap.Canvas.Brush.Color := LayerColorScheme(Layer);
ACanvas.Brush.Bitmap := BackgroundBitmap;
end //if(Background)
else
ACanvas.Brush.Style := bsSolid;
ACanvas.Pen.Color := GraphUtil.GetShadowColor(BorderColor, -100);
ACanvas.Rectangle(ARect);
end;