Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Liste von vielen unterschiedlichen Grafikobjekten mit unterschiedlichen Propertie

  Alt 29. Jul 2014, 15:55
Da du ja die Eigenschaften von mehreren unterschiedliche Objekte zusammenfassen möchtest, brauchst du zunächst etwas, was du vergleichen kannst um gleiche Eigenschaften zusammenzufassen.

Oder anders ausgedrückt, wir benötigen eine Klasse, die eine Eigenschaft darstellen kann (aber nur die Eigenschaft selber, ohne den Wert)
Delphi-Quellcode:
TProperty = class
public
  constructor Create( const PropName : string; PropType : integer );
  function Equals( Obj : TObject ) : Boolean; override;
  function SameValueAs( Other : TProperty ) : Boolean;
published
  property PropName : string read FPropName;
  property PropType : integer read FPropType;
end;

function TProperty.Equals( Obj : TObject ) : Boolean;
begin
  Result := (Self = Obj) or Assigned( Obj ) and ( Self.ClassType = Obj.ClassType ) and SameValueAs( Obj as TProperty );
end;

function TProperty.SameValueAs( Other : Tproperty ) : Boolean;
begin
  Result := (Self = Other) or Assigned( Other ) and SameText( Self.FPropName, Other.FPropName ) and (Self.FPropType = Other.FPropType );
end;
Die nächste Klasse, wäre dann die, wo man auf den Eigenschaftswert zugreifen kann
Delphi-Quellcode:
TPropertyValue = class
public
  constructor Create( Instance : TObject; const PropName : string );
  // True, wenn gleiche Eigenschaft und gleicher Wert
  function Equals( Obj : TObject ) : Boolean; override;
  function SameValueAs( Other : TPropertyValue ) : Boolean;
published
  property Prop : TProperty read FProp;
  property ValueStr : string read GetValueStr write SetValueStr;
end;
Um jetzt ein ganze Instanz zu verwalten benötigen wir eine Klasse, die eine Liste mit den Property-Werten anbietet:
Delphi-Quellcode:
TObjectProperties = class abstract
public
  property Count : Integer read GetCount;
  property PropValue[Index : Integer] : TPropertyValue read GetPropValue;
end;
und diese Klasse benötigen wir für eine Instanz
Delphi-Quellcode:
TSingleObjectProperties = class( TObjectProperties )
public
  constructor Create( Instance : TObject );
end;
und für mehrere
Delphi-Quellcode:
TMultiObjectProperties = class( TObjectProperties )
public
  procedure Add( Object : TSingleObjectProperties );
  procedure Remove( Object : TSingleObjectProperties );
end;
Das ist jetzt alles etwas schematisch, aber das Prinzip sollte jetzt klar geworden sein.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat