Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pregunta tonta (https://www.clubdelphi.com/foros/showthread.php?t=6708)

Delphos 19-01-2004 21:26:07

Pregunta tonta
 
Hola foro

Porque me dice que necesito un ordinal en este procedimiento y lo de incompatible tipos integer y string

Procedure NumeroMes(nombre:String);
begin
Case (nombre) of
'ENERO' : MesActual := 1;
'FEBRERO' : MesActual := 2;
'MARZO' : MesActual := 3;
'ABRIL' : MesActual := 4;
'MAYO' : MesActual := 5;
'JUNIO' : MesActual := 6;
'JULIO' : MesActual := 7;
'AGOSTO' : MesActual := 8;
'SEPTIEMBRE' : MesActual := 9;
'OCTUBRE' : MesActual := 10;
'NOVIEMBRE' : MesActual := 11;
'DICIEMBRE' : MesActual := 12;
else
ShowMessage('Error en Mes Seleccionado');
end;

nombre contiene la seleccion de un comboBox y MesActual es una variable global de tipo integer

Pero, ¿No deberia de funcionar?

Salu2.

__cadetill 19-01-2004 21:37:02

Cita:

Empezado por Delphos
Pero, ¿No deberia de funcionar?

No, ya que la sentencia case en Delphi no admite strings

DarkByte 19-01-2004 21:38:57

A tu pregunta final, por lo que yo he visto es que sí debería de funcionar, pero dónde está el error, no lo sé. Y... a veces las preguntas que se piensan tontas son las más interesantes e inteligentes.

DarkByte 19-01-2004 21:40:24

:eek: No admite strings??? y porqué???

__cadetill 19-01-2004 21:42:31

Cita:

Empezado por DarkByte
A tu pregunta final, por lo que yo he visto es que sí debería de funcionar, pero dónde está el error, no lo sé.

Ahora ya sabes dónde :p

Cita:

Empezado por DarkByte
No admite strings??? y porqué???

Bueno, eso creo que deberías de preguntarselo a la gente de Borland ;)

roman 19-01-2004 21:53:33

Cita:

Empezado por cadetill
Bueno, eso creo que deberías de preguntarselo a la gente de Borland ;)

O a Niklaus Wirth; a fin de cuentas Delphi está basado en su lenguaje y el Pascal original sólo admite tipos ordinales para la sentencia case.

// Saludos

roman 19-01-2004 21:59:26

Y respecto a la pregunta original, si el combo tiene almacenados los meses en el orden natural entonces el procedimiento se puede hacer así
Código:

procedure NumeroMes(nombre:String);
begin
  if ComboBox.ItemIndex <> -1 then
    MesActual := ItemIndex + 1
  else
    ShowMessage('Error en Mes Seleccionado');
end;

// Saludos

obiwuan 19-01-2004 22:18:38

Y mucho mejor, si en lugar de usar un procedimiento se usa una función, la cual, debe devolver 0 para el caso en que se produzca un error y suponiendo, además, que el combobox tenga los meses ordenados:
Código:

function NumeroMes: integer;
begin
result :=  ComboBox.ItemIndex + 1
end;

mucho más simple que todo lo expuesto hasta ahora.

NOTA: Pasar como parámetro el nombre del mes es una tontería si éstos están almacenados en el comboBox. Mejor usar el ComboBox como variable general del módulo.

jachguate 19-01-2004 23:44:30

Las ideas son buenas, sin embargo difiero de los dos posts anteriores, de los amigos roman y obiwan en un punto. Siempre es cuestión de gustos, pero yo creo que si una función no tiene un valor lógico que devolver, ni debe devolver 0 (o cualquier otro valor "bandera"), ni mostrar por si sola un mensaje de error, pues eso limita a su usuario final (el programador que la llama).

Lo correcto, desde mi particular punto de vista, es elevar una excepción.

en ese caso, sustituir el ShowMessage de Romàn, por un

raise exception.create(''Error en Mes Seleccionado');

al final de cuentas, si el usuario no maneja la excepción en un bloque try/except, el mismo delphi normalmente mostrará el mensaje de error al usuario, pero la ejecución de la rutina que llamó a nombremes es mucho mas simple, pues simplemente si el mes no es válido, el resto del código despues de la llamada ya no se ejecuta, evitando chequeos (ifs) posteriores, y errores lógicos.

Hasta luego.

;)

roman 20-01-2004 00:57:15

Realmente estamos especulando demasiado respecto de un código del cual no sabemos nada de su contexto. Yo simplemente me ajusté a lo que originalmente se preguntó si bien ciertamente dudo que en algún momento pudiera usar un código así. La verdad es que: ni procedimiento, ni función, ni excepción ni nada. Como ya lo indicó Obiwuan (quien también esribió la función tan sólo para ajustarse al mensaje original)l, toda esta función es absolutamente innecesaria: si ya se tienen almacenados los meses en una estructura como el ComboBox, basta hacer uso de su propiedad ItemIndex sin necesidad de función alguna.

// Saludos

Delphos 20-01-2004 12:44:44

Bueno pues muchas gracias a todos por vuestras aclaraciones y por la rapidez en que se ha contestado.


La franja horaria es GMT +2. Ahora son las 06:59:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi