Einzelnen Beitrag anzeigen

delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
274 Beiträge
 
Delphi 10.3 Rio
 
#1

Record- oder Klassenfelder als property zuweisen und lesen, wie?

  Alt 24. Feb 2023, 21:04
Hallo,

bitte guckt nicht zu sehr auf meine Ausdrucksweise, ich weiß echt nicht weiter. Fragestellung unten.

Delphi-Quellcode:
  { TDataItem }

  TDataItem = record
    DataType: TDataType;
    Field1: Typ1;
    Field2: Typ2; //Für mehrere Datenfelder
    Fieldnum: Integer; //Feldnummer
    case Longword of
     0: (BinData : Pointer); //für binäre Daten
     1: (dworddata: Longword); //für ganzzahlige positive Zahlenwerte
     2: (Int32data: Integer); //für ganzzahlige positive wie negative Zahlenwerte
     3: (Floatdata: Double); //für Gleitkommazahlen
     4: (Int16data: smallint); //für 16 Bit Integerzahlen
     5: (Strgdata : PString); //für Strings
  end;


  { TGenericItem }

  TGenericItem = class(TObject)
  private
    FData: TDataItem;
    function GetDataType: TDataType;
    function GetData: TDataItem;
    procedure SetDataType(AValue: TDataType);
    procedure SetData(AValue: TDataItem);
  public

    constructor Create;
    destructor Destroy; override;

    property Data: TDataItem read GetData write SetData;

  end;

  { TCustomColumn }

  TCustomColumn = class(TComponent)
  private
    FLeft: Integer;
    FTop: Integer;
    FItem: TGenericItem;
    procedure SetItem(AValue: TGenericItem);
  public
    constructor Create(AOwner: TComponent);
    property [B]Item[/B]: TGenericItem read FItem write SetItem;
  end;
Wie kann ich jetzt mein Item in TCustomColumn lesen und schreiben, ohne dass Exceptions geworfen werden.

Delphi-Quellcode:
function TGridColumn.GetWidth: Integer;
var AItem: TDataItem;
begin
  AItem := Item.Data; //das hier wird nicht akzeptiert, wie mache ich das besser? Wenn ich an die Eigenschaft nur den ganzen Datentyp zuweisen kann, brauche ich ja die Daten der übrigen Felder
                                 //die hier nicht beeinflusst werden. Ok, beim Getter nicht aber beim Setter.
  Result := AItem.Fieldnum; //sowas in der Art will ich am Ende haben, für alle im Datentyp enthaltenen Felder
end;
Wie kann ich bei zusammengesetzten Typen die Daten als Eigenschaft lesen uns schreiben. Sorry, ich weiß echt nicht wie ich es anders ausdrücken soll.

Am Ende will ich Record- und Klassentypen als property lesen und schreiben und dabei auch einzelne Datenfelder dieser Typen verändern können, wie im Beispiel die Fieldnum oder die Inhalte von Field1 und Field2, wobei ich als Interface nur die property mit dem gesamten Datentyp habe, der die Felder enthält.
  Mit Zitat antworten Zitat