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.