ich bin da auf ein Problem gestoßen bei dem ich nicht weiter komme. Ich erzeuge eine Bitmap und setzte Transparent auf true. TransparentColor soll die Farbe der Form sein (weil ich eigentlich das Bitmap mit CopyRect fülle). So lange ich als Form.Color nicht clDefault verwende klappt alles ohne Probleme. Verwende ich aber clDefault habe ich einen schwarzen Hintergrund. Ich vermute mal das clDefault irgendwie auf die Standardfarbe des Kontrolls (hier die Form) verweist und deshalb kein direkter Farbwert dahinter liegt. In der Unit Graphics ist es so deklariert:
Code: Alles auswählen
clDefault = TColor($20000000);
Ich habe hier noch einen minimal Code angehängt damit man sich besser vorstellen kann was ich meine:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs,LclIntf;
type
{ TForm1 }
TForm1 = class(TForm)
MyBitmap : TBitmap;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
self.Color:= clSilver;//clDefault;
MyBitmap := TBitmap.Create;
MyBitmap.SetSize(400,400);
MyBitmap.TransparentColor:=self.Color;
MyBitmap.Transparent:=true;
MyBitmap.Canvas.Pen.Color:=self.Color;
MyBitmap.Canvas.Brush.Color:=self.Color;
MyBitmap.Canvas.Rectangle(0,0,400,400);
MyBitmap.Canvas.Pen.Color:=clyellow;
MyBitmap.Canvas.Brush.Color:=clred;
MyBitmap.Canvas.Ellipse(20,20,80,80);
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
MyBitmap.Free;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
canvas.Brush.Color:=clgreen;
canvas.Rectangle(150,10,200,500);
canvas.Draw(100,100,MyBitmap);
end;
end.
Bernd