poniamo di avere una dichiarazione simile
interface
uses ... TypInfo
type TOperazione = (Edit, Consulta);
private
FOperazione: TOperazione;
all'interno della stessa unit posso dichiarare
procedure Gestione(Sender: TObject; Const AOperationType: TOperazione);
ma se devo passare il tipo TOperazione ad un'altra unit, mi trovo in difficoltà, "Enumerator" e' un tipo , googlando non trovo come dichiararlo,
devo trasformare il tipo Enumerator in string per poterlo passare
procedure Tfrm_MenuAree.AnagrafeOperatori(iPannello: integer);
var
frm_AnagrafeOperatori: Tfrm_AnagrafeOperatori;
begin
frm_AnagrafeOperatori := Tfrm_AnagrafeOperatori.Create(nil);
frm_AnagrafeOperatori.StatoPulsanti(GetEnumName(TypeInfo(TOperazione), integer(Edit)));
VisualizzaForm(frm_AnagrafeOperatori ,0 ,0);
e nella procedure ricevente
.. sarebbe piu' corretto passare l'Enumerator TOperazione
procedure Tfrm_AnagrafeOperatori.StatoPulsanti(AOperazione: <Enumerator>);
ma <Enumerator> a cosa corrisponde ? .. TObject non viene accettato.
//riceve Enumerator trasformato in string, ma e' poco utile
procedure Tfrm_AnagrafeOperatori.StatoPulsanti(sStato: string);
begin
//
end;
grazie.
Potresti spostare la dichiarazione del tipo enum in una unit a parte e utilizzarla dove ti serve, oppure puoi fare un semplice cast a integer e passare quello. O ancora, puoi usare la funzione Ord per ottenere il valore associato all'elemento dell'enum:
TMyType = (mtCane, mtGatto); //mtCane= 0; mtGatto= 1
...
a := integer(mtCane); // a = 0
b := integer(mtGatto); // b = 1
...
c := Ord(mtCane); // c = 0
d := Ord(mtGatto); // d = 1
Ricorda anche che puoi assegnare un valore ad ogni elemento dell'enum:
TMyType = (mtCane= 14, mtGatto= 9);
...
a := integer(mtCane); // a = 14
b := integer(mtGatto); // b = 9
...
c := Ord(mtCane); // c = 14
d := Ord(mtGatto); // d = 9
Puoi anche assegnare un valore a soltanto uno degli elementi e gli altri verranno incrementati di uno:
TMyType = (mtCane= 14, mtGatto);
...
a := integer(mtCane); // a = 14
b := integer(mtGatto); // b = 15
...
c := Ord(mtCane); // c = 14
d := Ord(mtGatto); // d = 15