Deine Frage ist ja inzwischen beantwortet – unabhängig davon löse ich solche Fälle gerne in dieser Art:
Delphi-Quellcode:
TBlock = class
protected
FBitmap: TBitmap;
FText: string;
public
constructor Create;
destructor Destroy; override;
end;
TReportUnit = class
{...}
function AddBlock(Text : String): TBitmap;
end;
implementation
// TBlock kümmert sich um die Erzeugung und Freigabe seines Bitmaps selbst
constructor TBlock.Create;
begin
inherited;
FBitmap := TBitmap.Create;
FText := '';
end;
destructor TBlock.Destroy;
begin
FBitmap.Free;
inherited;
end;
// AddBlock gibt Referenz auf Bitmap zurück
function TReportUnit.AddBlock(Text : String): TBitmap;
var
Block : TBlock;
begin
Block := TBlock.Create;
Block.FText := Text;
// Bitmap wurde im Constructor von TBlock bereits erzeugt
Result := Block.Bitmap;
FBlocks.Add(Block);
end;
Delphi-Quellcode:
var
ReportUnit: TReportUnit;
Bitmap: TBitmap;
begin
ReportUnit := TReportUnit.Create;
Bitmap := ReportUnit.AddBlock('Hysterese Test 1');
Bitmap.LoadFromFile({...});
ReportUnit.Generate;
ReportUnit.Free;
end;
Man kann sich hier fragen, ob es nicht besser wäre, gleich eine Referenz auf den Block zurückzuliefern statt auf das Bitmap. Das hängt vom Anwendungsfall ab.