Hier eine kleine Beispielklasse, ohne tieferen Sinn. Ich habe sie konstruiert, weil mir so was in einer anderen Klasse aufgefallen ist. Wie man sieht habe ich eine einfache Klasse, in der eine Bitmap genutzt wird. Die Bitmap wird in Create erstellt, und in Destroy freigegeben. Sie hat die Eigenschaft Bmp, die auf die Funktion GetBmp über read zugreift. Soweit, so gut.
Nun will ich in der Prozedur Button1Click die Bmp Eigenschaft Transparent eigentlich nur auf True setzten. Nun wird dabei aber auch die Funktion GetBmp ausgeführt. Zum Beweis zählt die Bmp von 0 bis Integer-Ende. Beim der ersten Ausgabe sollte eingentlich die Zahl 0 ausgegeben werden, wird aber die 1 ausgegeben. Das Zeichen, das beim setzen von Transparent bereits hochgezählt wurde.
Mir ist schon klar, dass wenn ich etwas mit Bmp mache, sie auch aufgerufen wird, aber mir war nicht klar, dass es bereits das Setzten eine Eigenschaft ist.
Delphi-Quellcode:
type
TTest = class
private
FBmp: TBitmap;
FIndex: Integer;
function GetBmp: TBitmap;
public
constructor Create;
destructor Destroy; override;
property Bmp: TBitmap read GetBmp;
end;
implementation
constructor TTest.Create;
begin
inherited;
FBmp := TBitmap.Create;
FBmp.Width := 32;
FBmp.Height := 32;
FIndex := 0;
end;
destructor TTest.Destroy;
begin
FBmp.Free;
inherited
end;
function TTest.GetBmp: TBitmap;
begin
FBmp.Canvas.TextOut(0, 0, IntToStr(FIndex));
Inc(FIndex);
Result := FBmp;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Test: TTest;
begin
Test := TTest.Create;
try
Test.Bmp.Transparent := True; //ruft die Eigenschaft Bmp auf
Canvas.Draw(0, 0, Test.Bmp);
finally
Test.Free;
end;