Einzelnen Beitrag anzeigen

guidobrose
(Gast)

n/a Beiträge
 
#1

Erzeugen und Freigeben von Objekten und Speicher

  Alt 4. Jun 2007, 10:35
Ich hätte einmal eine grundsätzliche Frage zu Objekten.

Ich möchte die Objects Eigenschaft des StringGrid verwenden, um zusätzliche Formatierungsoptionen für die einzelne Zelle zu speichern. Ggf. soll über die neue Eigenschaft IsBitmap auch eine Grafik angezeigt werden können.

Hier einmal eine beispielhafte Deklaration des Objektes für die Eingenschaften:
Delphi-Quellcode:
type

  TCellOption = class(TObject)
  public
    Font: TFont;
    IsBitmap: Boolean;
    Bitmap: TBitmap;
  end;

  ...
Hier wäre jetzt die Zuweisung an jede Zelle des StringGrid:

Delphi-Quellcode:
  ACellOption:=TCellOption.Create;
  StringGrid.Objects[..]:=ACellOption;
Jetzt kann ich allerdings noch nichts an Font zuweisen, weil ja noch keine Instanz davon erzeugt wurde, also könnte es so aussehen:

Delphi-Quellcode:
  ACellOption:=TCellOption.Create;
  ACellOption.Font:=TFont.Create;
  ACellOption.Font.Assign(Font);
  StringGrid.Objects[..]:=ACellOption;
Genauso wird dann auch mit Bitmap verfahren nur zunächst ohne ein Bitmap zuzuweisen, da es ja nicht in jeder Zelle unbedingt benötigt wird.

Erste Frage:

Wenn ich die so erzeugten Objekte wieder freigeben möchte, welche Methoden muss ich dann aufrufen?

StringGrid.Objects[..].Free?

Damit ist die Instanz von TFont aber noch nicht freigegeben, oder?

Sollte ich also geschickterweise die create und destroy-Methoden von TCellOption überschreiben und darin die Instanz von TFont (und TBitmap) erzeugen und freigeben?

Zweite Frage:

Wie verhält es sich mit dem Speicherbedarf, wenn ich direkt eine Instanz von TBitmap pro Zelle erzeuge, ohne das ich sie evtl. wirklich benötige?

Danke und Gruß,
Guido
  Mit Zitat antworten Zitat