Zugriff auf Aufzählungstyp mittels Variabler

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
niederrheiner
Beiträge: 87
Registriert: Sa 19. Jan 2008, 17:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Rheinberg

Zugriff auf Aufzählungstyp mittels Variabler

Beitrag von niederrheiner »

Hallo an Alle,

ich habe hier einen Aufzählungstyp monat = (Januar, ... Dezember).
In einer Stringvariablen habe ich den Namen eines Monats, z.B. Februar. Nun würde ich gerne mit imonat := ord(smonat) + 1; die Monatszahl ermitteln. Diese Vorgehensweise sagt aber der Compiler wäre falsch.
Wie muss es richtig lauten?

Danke für Eure Hilfe und Tipps.

Bis dann ...
MfG
Günter

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

:= longmonthnames[Integer(Februar)];

caste deinen Aufzählingstyp nach Integer.

Monatsnamen sind übrigends schon aus der fcl verfügbar.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Geht vielleicht inc (smonat) ?

smonat := monat(ord(smonat)+1);

In Delphi kann man mit RTTI die Namen der Ausprägungen eines Aufzählungstyps in einen String bekommen, ohne zusätzlich ein Array von Strings anlegen zu müssen. Ich vermute in Lazarus geht das auch.

-Michael
Zuletzt geändert von mschnell am Mo 4. Feb 2008, 11:54, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Das geht ja wirklich! Wusste ich gar nicht. Danke mschnell.

uses typinfo

Edit1.Text:=GetEnumName(TypeInfo(monat), 1);

niederrheiner
Beiträge: 87
Registriert: Sa 19. Jan 2008, 17:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Rheinberg

Beitrag von niederrheiner »

Hallo an Alle,
danke ersteinmal an alle, die mir auf meine Frage geantwortet haben. Die Lösung des Problems lag in der folgenden Anweisung:

iMonat := GetEnumValue(TypeInfo(Monat),sMonate) + 1;

BTW. welches Delphi-Buch hilft mir am Besten beim Erlernen von Lazarus?

Danke für Eure Hilfe und Tipps.

Bis dann ...
MfG
Günter

Antworten