Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-01-2004
Delphos Delphos is offline
Miembro
 
Registrado: jun 2003
Ubicación: Valencia (España)
Posts: 45
Poder: 0
Delphos Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 19-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Cita:
Empezado por Delphos
Pero, ¿No deberia de funcionar?
No, ya que la sentencia case en Delphi no admite strings
Responder Con Cita
  #3  
Antiguo 19-01-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
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.
__________________
:)
Responder Con Cita
  #4  
Antiguo 19-01-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
No admite strings??? y porqué???
__________________
:)
Responder Con Cita
  #5  
Antiguo 19-01-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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

Cita:
Empezado por DarkByte
No admite strings??? y porqué???
Bueno, eso creo que deberías de preguntarselo a la gente de Borland
Responder Con Cita
  #6  
Antiguo 19-01-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #7  
Antiguo 19-01-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #8  
Antiguo 19-01-2004
obiwuan obiwuan is offline
Miembro
 
Registrado: may 2003
Posts: 488
Poder: 21
obiwuan Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 19-01-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 20-01-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #11  
Antiguo 20-01-2004
Delphos Delphos is offline
Miembro
 
Registrado: jun 2003
Ubicación: Valencia (España)
Posts: 45
Poder: 0
Delphos Va por buen camino
Bueno pues muchas gracias a todos por vuestras aclaraciones y por la rapidez en que se ha contestado.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:59:03.


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
Copyright 1996-2007 Club Delphi