Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#13

AW: Verantwortlichkeiten / Wer kümmert sich um Freigeben

  Alt 27. Jul 2012, 00:59
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.
  Mit Zitat antworten Zitat