Delphi - ¿Uso de enumeraciones con TEdit?

 
Vista:

¿Uso de enumeraciones con TEdit?

Publicado por arsenio (1 intervención) el 19/02/2006 11:53:45
Saludos

Tengo una enumeración TDiaSemana (Lunes, Martes, Miercoles, ...) y quiero recoger un valor numérico en un TEdit. Con un Case ... Of me gustaría imprimir 'Lunes', 'Martes', etc. en función del valor numérico del Tedit pero no sé como hacerlo. Hago esto:

procedure TForm1.Button1Click(Sender: TObject);
var
dia : TDiaSemana;
begin
dia := StrToInt (Edit1.Text);
case dia of
Lunes : ShowMessage ('Lunes');
Martes : ShowMessage ('Martes');
Miercoles : ShowMessage ('Miercoles');
Jueves : ShowMessage ('Jueves');
Viernes : ShowMessage ('Viernes');
Sabado : ShowMessage ('Sabado');
Domingo : ShowMessage ('Domingo');
end;
end;

Me da error en la línea de dia := StrToInt(...); de tipos incompatibles entre 'Integer' y 'TDiaSemana'. Es lógico pero me interesa hacer así el case, utilizando valores de enumeración. El problema es que el "valor numérico" de cada valor de la enumeración (no sé si me explico) se recoge por TEdit, lo decide el usuario.

También he probado a poner el case asi: case StrToInt (Edit1.Text) of pero me da el mismo error en la compilación

¿Cómo tengo que hacerlo, alguien sabe? En C++ sé que se puede hacer y no es algo muy complejo...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Uso de enumeraciones con TEdit?

Publicado por Dr Juzam (821 intervenciones) el 19/02/2006 16:32:36
Prueba a ver si esto te funciona:

Case StrToInt(Edit1.Text) of
ord(Lunes): ShowMessage ('Lunes')
ord(Martes): ShowMessage ('Martes');
{...}
end;

Como ves, la función ord sobre un tipo enumerado nos devuelve el orden del elemento que recibe como parámetro dentro de la enumeración, por defecto, empezando por 0. Podemos asignar valores predefinidos a los elementos de una enumeración, del siguiente modo:

type TDiaSemana=(Lunes=2, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo);

Cada elemento a la derecha del enumerado aumenta en 1 su orden. También se pueden hacer cosas de este estilo:

type TDiaSemana=(Lunes=2, Martes=4, Miercoles, Jueves, Viernes, Sabado, Domingo);

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Uso de enumeraciones con TEdit?

Publicado por Javier Camacho (1 intervención) el 19/02/2006 19:30:11
El error se origina porque la variable Dia deberías declararla como un tipo entero, Byte sería lo más aconsejable. Luego sin ningún otro cambio debería ejecutarse.
El Tipo Enumerado que has declarado (TDiaSemana, que no es un valor entero) para esto, en realdad es innecesario si tu usuario en realidad escribirá un número.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Uso de enumeraciones con TEdit?

Publicado por Virum (484 intervenciones) el 20/02/2006 10:08:17
Hola:

Prueba a ver así:

procedure TForm1.Button1Click(Sender: TObject);
var
dia : integer;
begin
dia := StrToInt (Edit1.Text);
case dia of
1 : ShowMessage ('Lunes');
2 : ShowMessage ('Martes');
3 : ShowMessage ('Miercoles');
4 : ShowMessage ('Jueves');
5 : ShowMessage ('Viernes');
6 : ShowMessage ('Sabado');
7 : ShowMessage ('Domingo');
end;
end;

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar