Thema: Delphi Filestream Problem

Einzelnen Beitrag anzeigen

Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Filestream Problem

  Alt 28. Apr 2005, 17:21
abgesehen von dem problem geht es auch noch eleganter, wenn man eine veralgemeinerung einführt:
Delphi-Quellcode:
type
  TFigurBasis = class...// klasse von der die anderen alle abstammen!
  public
    Constructor Create(...); virtual; abstract;
  end;

  TFigurBasisClass = class of TFigurBasis; // meta klasse deklarieren

  TRechtek = class(TFigurBasis)
    Constructor Create(...); override;
  end;
  
...

procedure TFigurenContainer.OpenFile(Filename: string);
{Figuren aus einer Datei auslesen und zeichnen} 
var Dat: TFilestream;
    Figur: TFigur;
    Typ : TFigurTyp;
const
  cClassReg:array[TFigur] of TFigurBasisClass =
   (TStrecke, TRechteck, TEllips, TPoly);
begin
  clear;
  Dat := TFilestream.Create(Filename, fmOpenRead);
  while dat.Position < (dat.Size) do begin
    Dat.Read(Typ, sizeof(TFigurTyp));
    
// und hier der trick !!!
// Aus der dem typ, über die classReg, die metaKlasse holen
// und mit ihr das objekt instanzieren

    figur := cClassReg[typ].Create(zeichenfläche);

    Figur.SetFTyp(typ);
   
    Figur.ReadObject(dat);
    If Typ<>Strecke then
       TFlaechenfigur(Figur).SetRegion;
    add(Figur);
  end;
  Dat.Free;
end;
MetaKlassen sind in delphi einfach nur praktisch Und wichtig ist der virtuelle, bzw. abstrakte konstructor, damit die objekte vereinheitlicht erzeugt werden können.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat