Einzelnen Beitrag anzeigen

Alallart

Registriert seit: 8. Dez 2015
153 Beiträge
 
#1

Was mache ich falsch? Es wird die falsche Eigenschaft aufgerufen

  Alt 16. Jan 2023, 13:12
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;

Geändert von Alallart (16. Jan 2023 um 13:38 Uhr)
  Mit Zitat antworten Zitat