Irgendwie entzieht sich mir der Sinn des Ganzen. Wenn ich doch bereits eine generische TObjectList habe, wieso verwendet man dann nicht einfach die Methoden, die das Objekt bereitstellt oder ergänzt das Objekt um eben diese Methoden? Wenn ich z.B. ein Objekt erstelle, das sagen wir mal ein TImage und ein TLabel enthält, dann sieht das z.B. so aus:
Delphi-Quellcode:
UNIT Bilder;
INTERFACE
USES
Classes, ExtCtrls, StdCtrls, Graphics, Controls;
TYPE
TBild =
CLASS
PRIVATE { Private-Deklarationen }
Var
fBild : TImage;
fTitel : TLabel;
Function GetfBild : TImage;
Procedure SetfBild(
Const Value : TImage);
Function GetfTitel : TLabel;
Procedure SetfTitel(
Const Value : TLabel);
PUBLIC { Public-Deklarationen }
Constructor Create();
Destructor Destroy;
override;
Property Bild : TImage
read GetfBild
write SetfBild;
Property Titel : TLabel
read GetfTitel
write SetfTitel;
END;
IMPLEMENTATION
{ TBild }
Function TBild.GetfBild: TImage;
begin
Result := fBild;
end;
Procedure TBild.SetfBild(
Const Value: TImage);
begin
fBild.Assign(Value);
end;
Function TBild.GetfTitel: TLabel;
begin
Result := fTitel;
end;
Procedure TBild.SetfTitel(
Const Value: TLabel);
begin
fTitel.Assign(Value);
end;
Constructor TBild.Create;
begin
inherited;
fBild := TImage.Create(
nil);
fBild.Visible := False;
fBild.AutoSize := False;
fBild.Stretch := True;
fBild.Proportional := True;
fBild.Center := True;
fBild.Picture.Bitmap.Canvas.Brush.Style := bsClear;
fBild.Picture.Bitmap.Canvas.Pen.Color := clRed;
fBild.Picture.Bitmap.Canvas.Pen.Style := psSolid;
fBild.Picture.Bitmap.Canvas.Pen.Width := 5;
fTitel := TLabel.Create(
nil);
fTitel.AutoSize := False;
fTitel.Alignment := taCenter;
fTitel.Layout := tlCenter;
fTitel.WordWrap := False;
fTitel.Visible := False;
end;
Destructor TBild.Destroy;
begin
If Assigned(fBild)
Then
fBild.Free;
If Assigned(fTitel)
Then
fTitel.Free;
inherited;
end;
end.
So, jetzt brauche ich eine Methode, die das Bild speichert. Also ergänze ich das Objekt um die benötigte Methode. Wäre in diesem Fall, da ich bereits ein TImage verwende, nicht notwendig, da TImage (z.B. in TBitmap oder TPicture) bereits mehrere Methoden zum Speichern bereitstellt.
Wieso muß ich da umständlich ermitteln, wo das Bild im Speicher liegt, wo es beginnt und wo es aufhört, wenn ich das Ganze doch sowieso in einer TObjectList verwalte?
Delphi-Quellcode:
...
USES
Windows, Messages, ..., Bilder, Generics.Collections, ...;
...
PRIVATE { Private-Deklarationen }
Var
BList : Generics.Collections.TObjectList<TBild>;
Wozu dann überhaupt die TObjectList? Die TObjectList weiß doch genau, wo ihre Objekte liegen, darum muß mich doch gar nicht mehr kümmern. Ich greife einfach über den Index auf das jeweilige Objekt zu:
Delphi-Quellcode:
Procedure TFormMain.SaveBitmapFromList(Const Id : Integer; Const Datei : String);
begin
BList[Id].Bild.Picture.Bitmap.SaveToFile(Datei);
end;