Min i Max Typu wyliczeniowego

0

Cześć,
zrobiłem sobie typ wyliczeniowy:

TTypAkcji =   (taNadano, taOtrzymano, taUruchomiono, taAnulowano, taZakonczono);

Teraz chciałbym zrobić pętlę przechodzącą przez wszystkie elementy więc piszę tak:

for typ := taNadano to taZakonczono do
  (...)

ale co jeśli kiedyś dodam nowe wartości?
czy jest możliwość jakiegoś iterowania po wszystkich wartościach typu wyliczeniowego?
np:

for typ := minValue(TTypAkcji) to maxValue(TTypAkcji) do
  (...)

Korzystam z Delphi7 ale jeśli da się takie coś zrobić w Delphi EX2 to tez chętnie się dowiem.

pozdrawiam

0

Dopisuj przed taZakonczono.

0

Nie wiem czy w Delphi jest jakieś wsparcie do tego co chcesz osiągnąć. Ale istnieje generalnie pewna technika pozwalająca obejść ten problem. Do każdego enuma po którym będziesz iterować dodać znaczniki początku i końca np:

TKolor = (
  kPierwszy,

  kNiebieski = kPierwszy,
  kZielony,
  kZolty,
  kCzerwony,

  kOstatni = kCzerwony
);

Wtedy iterujesz tak:

for kolor := kPierwszy to kOstatni do

Modyfikując enum'a dbasz cały czas o to, aby kPierwszy i kOstatni wskazywały odpowiednie wartości.

1
for i:= Integer(Low(TTypAkcji)) to Integer(High(TTypAkcji)) do
//...

EDIT//
i jeszcze może czasami może Ci się przydać Ord np.:

for i:= Ord(taNadano) to Ord(taZakonczono) do
//...

No i oczywiscie można bez rzutowania na integer czyli:

for typ:= Low(TTypAkcji) to High(TTypAkcji) do
//...
0

Sprawdziłem sposób @kAzek i działa bez problemu, kod (w Lazarus'ie):

program Project1;

{$mode objfpc}{$H+}

type
  TAppState = (asStarting, asRunning, asTerminating);
var
  I: TAppState;
begin
  for I := Low(TAppState) to High(TAppState) do
    Write(I, ' ');

  ReadLn;
end.

na wyjściu dostaję:

asStarting asRunning asTerminating
Po dodaniu nowej pozycji też działa:

type
  TAppState = (asStarting, asRunning, asTerminating, asClosed);

i na wyjściu otrzymujemy:

asStarting asRunning asTerminating asClosed
Żeby otrzymać cyferki zamiast identyfikatorów trzeba rzutować, np. na Byte - Write(Byte(I), ' ');;

0

O stałych wyliczeniowych w Delphi możesz przeczytać tu: http://www.delphi.opiumsoft.pl/stale-wyliczeniowe-w-delphi

1 użytkowników online, w tym zalogowanych: 0, gości: 1