![]() |
Delphi-Version: XE3
Mit RTTI verschachtelte Eigenschaften einer Komponente auslesen
Hallo, ich habe eine Komponente (damals noch mit Delphi 2 erstellt) für Feiertage. Dies enthält 26 Eigenschaften mit gleichem Namen+Nummerierung. Diese enthalten wiederum jeweils drei Eigenschaften. Ich möchte nun in einer Schleife mittels RTTI von sämtlichen Feiertagen, also 01 - 26 immer das Datum auslesen. Ich habe mit RTTI keinerlei erfahrung. Kann mir jemand helfen?
Die Komponente Sieht so aus:
Delphi-Quellcode:
type
TFeiertagStatus = (Day_Off, Work_Day, not_defined); TTag = class(TPersistent) private FDatum, FBeschreibung : String; FStatus : TFeiertagStatus; protected public published Property Datum : String read FDatum write FDatum; Property Beschreibung : String read FBeschreibung write FBeschreibung; Property Status : TFeiertagStatus read FStatus write FStatus; end; TFeiertag = class(TComponent) private LAdvent : TDateTime; FJahr : integer; FFeiertag01 : TTag; FFeiertag06 : TTag; FFeiertag12 : TTag; FFeiertag03 : TTag; FFeiertag04 : TTag; FFeiertag05 : TTag; FFeiertag08 : TTag; FFeiertag09 : TTag; FFeiertag10 : TTag; FFeiertag11 : TTag; FFeiertag17 : TTag; FFeiertag13 : TTag; FFeiertag14 : TTag; FFeiertag24 : TTag; FFeiertag25 : TTag; FFeiertag26 : TTag; FFeiertag23 : TTag; FFeiertag07 : TTag; FFeiertag15 : TTag; FFeiertag16 : TTag; FFeiertag18 : TTag; FFeiertag19 : TTag; FFeiertag20 : TTag; FFeiertag21 : TTag; FFeiertag22 : TTag; FFeiertag02 : TTag; function IsLeapYear(AYear : Integer) : Boolean; function GetKarfreitag(AJahr: Integer): String; function GetOstersonntag(nYear: Integer): String; function GetOstermontag(AJahr: Integer): String; function GetChristiHimmelfahrt(AJahr: Integer): String; function GetPfingstsonntag(AJahr: Integer): String; function GetPfingstmontag(AJahr: Integer): String; function GetFronleichnam(AJahr: Integer): String; function GetBuss_und_Bettag(AJahr: Integer): String; function GetMuttertag(AJahr: Integer): String; function GetVolkstrauertag(AJahr: Integer): String; function GetTotensonntag(AJahr: Integer): String; function GetAdvent1(AJahr: Integer): String; function GetAdvent2(AJahr: Integer): String; function GetAdvent3(AJahr: Integer): String; function GetAdvent4(AJahr: Integer): String; function GetJahr: integer; procedure SetJahr(Value:integer); procedure Ermitteln; procedure NeuErmitteln; protected public constructor Create(AOwner:TComponent);override; destructor Destroy;override; published Property Jahr : integer read GetJahr write SetJahr; Property Feiertag01 : TTag read FFeiertag01 write FFeiertag01; Property Feiertag02 : TTag read FFeiertag02 write FFeiertag02; Property Feiertag03 : TTag read FFeiertag03 write FFeiertag03; Property Feiertag04 : TTag read FFeiertag04 write FFeiertag04; Property Feiertag05 : TTag read FFeiertag05 write FFeiertag05; Property Feiertag06 : TTag read FFeiertag06 write FFeiertag06; Property Feiertag07 : TTag read FFeiertag07 write FFeiertag07; Property Feiertag08 : TTag read FFeiertag08 write FFeiertag08; Property Feiertag09 : TTag read FFeiertag09 write FFeiertag09; Property Feiertag10 : TTag read FFeiertag10 write FFeiertag10; Property Feiertag11 : TTag read FFeiertag11 write FFeiertag11; Property Feiertag12 : TTag read FFeiertag12 write FFeiertag12; Property Feiertag13 : TTag read FFeiertag13 write FFeiertag13; Property Feiertag14 : TTag read FFeiertag14 write FFeiertag14; Property Feiertag15 : TTag read FFeiertag15 write FFeiertag15; Property Feiertag16 : TTag read FFeiertag16 write FFeiertag16; Property Feiertag17 : TTag read FFeiertag17 write FFeiertag17; Property Feiertag18 : TTag read FFeiertag18 write FFeiertag18; Property Feiertag19 : TTag read FFeiertag19 write FFeiertag19; Property Feiertag20 : TTag read FFeiertag20 write FFeiertag20; Property Feiertag21 : TTag read FFeiertag21 write FFeiertag21; Property Feiertag22 : TTag read FFeiertag22 write FFeiertag22; Property Feiertag23 : TTag read FFeiertag23 write FFeiertag23; Property Feiertag24 : TTag read FFeiertag24 write FFeiertag24; Property Feiertag25 : TTag read FFeiertag25 write FFeiertag25; Property Feiertag26 : TTag read FFeiertag26 write FFeiertag26; end; |
AW: Mit RTTI verschachtelte Eigenschaften einer Komponente auslesen
Da es sich um published Properties handelt, hab ich mal die old school RTTI bemüht, die auch der OI nutzt.
Delphi-Quellcode:
Übrigens:
uses
TypInfo; procedure WriteDates(f: TFeiertag); var props: PPropList; i: Integer; begin for i := 0 to GetPropList(TypeInfo(TFeiertag), [tkClass], props) - 1 do if props^[i].PropType^ = TypeInfo(TTag) then Writeln(TTag(GetObjectProp(f, props^[i])).Datum); end; ![]() |
AW: Mit RTTI verschachtelte Eigenschaften einer Komponente auslesen
Zitat:
|
AW: Mit RTTI verschachtelte Eigenschaften einer Komponente auslesen
Danke Stevie,
GetPropList(TypeInfo(TFeiertag), [tkClass], props) löst bei mir eine EAccessViolation aus :gruebel::gruebel::gruebel: Wird dann aber ausgeführt :gruebel::gruebel::gruebel: Danke Zacherl, ich hab die Komponente einfach aus meinem damaligen Delphi 2 ins XE3 übernommen. Deinen Ansatz muß ich mir mal anschauen:thumb::thumb: |
AW: Mit RTTI verschachtelte Eigenschaften einer Komponente auslesen
Vorteil Index/Arrray-Property
Du kannst für Beides den selben Getter und Setter verwenden die vielen Felder/Varaiblen können ein Array werden (die sind auch schön durcheinander deklariert :lol:) Zitat:
|
AW: Mit RTTI verschachtelte Eigenschaften einer Komponente auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo himitsu,
nein die Exception wird auch angezeigt wenn das Testprogramm ohne Debugger ausgeführt wird. Die ganzen Get-functions sind alle unterschiedlich. Da werden die verschiedenen Feiertage berechnet. |
AW: Mit RTTI verschachtelte Eigenschaften einer Komponente auslesen
Danke Stevie,
das hat mir gestern so den letzten Nerv geraubt, weil ichs nicht hinbekommen habe, nun klappts .... :dancer2: |
AW: Mit RTTI verschachtelte Eigenschaften einer Komponente auslesen
Danke Stevie,
habs bis jetzt nicht mehr angeschaut. Nun funktionierts. :dancer2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz