AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Felder in Klassen über Variable ansprechen
Thema durchsuchen
Ansicht
Themen-Optionen

Felder in Klassen über Variable ansprechen

Ein Thema von RWarnecke · begonnen am 13. Feb 2010 · letzter Beitrag vom 13. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Felder in Klassen über Variable ansprechen

  Alt 13. Feb 2010, 14:30
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 ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Felder in Klassen über Variable ansprechen

  Alt 13. Feb 2010, 14:31
Warum nimmst du kein Array?
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: Felder in Klassen über Variable ansprechen

  Alt 13. Feb 2010, 14:47
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

Re: Felder in Klassen über Variable ansprechen

  Alt 13. Feb 2010, 14:58
Zitat von NamenLozer:
Warum nimmst du kein Array?
Ich habe die im Anhang angehängte Tabelle in einer ObjectListe mit Klasse gespeichert. Dabei ist für jeden Monat ein Eintrag in der ObjectListe. Wenn ich jetzt ein Array benutzen wollte, muss ich den ganzen anderen Kram, der zu der Tabelle schon steht umschreiben und das wollte ich vermeiden.
Miniaturansicht angehängter Grafiken
tabelle_141.jpg  
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Felder in Klassen über Variable ansprechen

  Alt 13. Feb 2010, 15:02
Wenn du eine Objektliste benutzt ist das doch noch einfacher.
Sonst beliebt dir halt nur .FindComponent()
Markus Kinzler
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Felder in Klassen über Variable ansprechen

  Alt 13. Feb 2010, 15:04
Zitat von RWarnecke:
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 ?
TypInfo.pas bietet dazu einige Möglichkeiten:

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,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Felder in Klassen über Variable ansprechen

  Alt 13. Feb 2010, 15:05
Zitat von NamenLozer:
Warum nimmst du kein Array?
Jupp, ein Array-Property wäre hier angebracht.

Delphi-Quellcode:
myclass = class
  property UM[i: Integer]: ...
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Felder in Klassen über Variable ansprechen

  Alt 13. Feb 2010, 15:40
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:
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;
GetUmsatz() ist eine Methode; verhält sich aber zumindest lesend ähnlich wie ein Array.
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: Felder in Klassen über Variable ansprechen

  Alt 13. Feb 2010, 15:52
Zitat von sx2008:
Und ob man runde Klammern oder eckige Klammer schreibt macht logisch keinen Unterschied.
Diese Funktionen als Getter für ein Array-Property und schon hat man eckige Klammern.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

Re: Felder in Klassen über Variable ansprechen

  Alt 13. Feb 2010, 17:05
Bei TList kann man sich ja anschauen wie das gemacht wurde. Da wir dann mit sowas gearbeitet:
function TList.Get(Index: Integer): Pointer;
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz