FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
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. |
#2
|
|||
|
|||
Cita:
|
#3
|
||||
|
||||
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.
__________________
:) |
#4
|
||||
|
||||
No admite strings??? y porqué???
__________________
:) |
#5
|
|||
|
|||
Cita:
Cita:
|
#6
|
||||
|
||||
Cita:
// Saludos |
#7
|
||||
|
||||
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; |
#8
|
|||
|
|||
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; 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. |
#9
|
||||
|
||||
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.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#10
|
||||
|
||||
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 |
#11
|
|||
|
|||
Bueno pues muchas gracias a todos por vuestras aclaraciones y por la rapidez en que se ha contestado.
|
|
|
|