![]() |
Felder in Klassen über Variable ansprechen
Hallo zusammen,
ich habe eine Klasse mit mehreren Feldern. Davon haben 10 Stück den Namen UM1...UM5...UM10. Wie kann ich diese Felder über eine Schleife ansprechen ? |
Re: Felder in Klassen über Variable ansprechen
Warum nimmst du kein Array? :gruebel:
|
Re: Felder in Klassen über Variable ansprechen
RTTI wäre hier ein Stichwort. Aber du hast Delphi 2oo6 und da habe ich leider keinerlei Ahnung, wie viel Unterstützung das integriert hat.
Oder du machst es, wie NamenLozer erwähnt hat. Oder du definierst eine get- und set-Methode, der du einen Index und einen Wert übergeben kannst, quasi eine passende Mapper-Methode. Somit kannst du nach außen hin aber trotzdem deine Properties belassen. |
Re: Felder in Klassen über Variable ansprechen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Felder in Klassen über Variable ansprechen
Wenn du eine Objektliste benutzt ist das doch noch einfacher. :gruebel:
Sonst beliebt dir halt nur .FindComponent() |
Re: Felder in Klassen über Variable ansprechen
Zitat:
Delphi-Quellcode:
{ Get info record for property }
PropInfo := GetPropInfo(MyObject.ClassInfo, PropertyName); if Assigned(PropInfo) then SetStrProp(MyObject, PropInfo, Value); Die fortlaufenden Namen der Property kann man dann durch Stringoperationen zusammenbauen. Die Klasse muss mit {$M+} kompiliert sein und die Properties müssen public sein. Viele Grüße, |
Re: Felder in Klassen über Variable ansprechen
Zitat:
Delphi-Quellcode:
myclass = class
property UM[i: Integer]: ... |
Re: Felder in Klassen über Variable ansprechen
Arrays können auch virtuell sein, d.h. für den Programmierer als Anwender sieht es wie ein Array aus, ist aber keines.
Hier ein Beispiel zur Anregung der grauen Zellen
Delphi-Quellcode:
GetUmsatz() ist eine Methode; verhält sich aber zumindest lesend ähnlich wie ein Array.
funtion TForm1.GetUmsatz(jahr, Monat:integer):Currency;
begin // liefert den Umsatz für ein best. Jahr und Monat zurück end; function TForm1.GetJahresUmsatz(jahr:integer):Currency; var i : integer; begin Result := 0.0; for i := 1 to 12 do Result := Result + GetUmsatz(jahr, i); end; Und ob man runde Klammern oder eckige Klammer schreibt macht logisch keinen Unterschied. Frage: warum hast du nur UM1 bis UM10, wenn es doch offensichtlich um Umsätze geht und ein Jahr 12 Monate hat? |
Re: Felder in Klassen über Variable ansprechen
Zitat:
|
Re: Felder in Klassen über Variable ansprechen
Bei TList kann man sich ja anschauen wie das gemacht wurde. Da wir dann mit sowas gearbeitet:
Delphi-Quellcode:
function TList.Get(Index: Integer): Pointer;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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 by Thomas Breitkreuz