Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.646 Beiträge
Delphi 12 Athens
|
AW: Bitmap soll gelegentlich unsichtbar sein
31. Jan 2014, 18:30
Die Gefahr besteht einfach darin, dass Du eine Bitmap selbst erzeugst und eine beschreibbare Property ohne Setter deklariert hast. Kleines Beispielprogramm:
Delphi-Quellcode:
type
TTest1 = class
private
FBitmap: TBitmap;
public
constructor Create;
destructor Destroy; override;
(* ohne Setter *)
property Bitmap: TBitmap read FBitmap write FBitmap;
end;
TTest2 = class
private
FBitmap: TBitmap;
procedure SetBitmap(const Value: TBitmap);
public
constructor Create;
destructor Destroy; override;
(* mit Setter *)
property Bitmap: TBitmap read FBitmap write SetBitmap;
end;
{ TTest1 }
constructor TTest1.Create;
begin
inherited;
FBitmap := TBitmap.Create;
end;
destructor TTest1.Destroy;
begin
FBitmap.Free;
inherited;
end;
{ TTest2 }
constructor TTest2.Create;
begin
inherited;
FBitmap := TBitmap.Create;
end;
destructor TTest2.Destroy;
begin
FBitmap.Free;
inherited;
end;
procedure TTest2.SetBitmap(const Value: TBitmap);
begin
(* Eigener Instanz Eigenschaften zuweisen *)
FBitmap.Assign(Value);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Test: TTest1;
Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
try
Test := TTest1.Create;
try
Test.Bitmap := Bitmap;
finally
Test.Free;
end;
Bitmap.Width := 100; //<- *Bumm*, wilder Zeiger und Speicherleck
finally
Bitmap.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Test: TTest2;
Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
try
Test := TTest2.Create;
try
Test.Bitmap := Bitmap;
finally
Test.Free;
end;
Bitmap.Width := 100; //alles in Butter, da eigene Instanz
finally
Bitmap.Free;
end;
end;
Detlef "Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
|