Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Porque no funciona Try Catch?? (https://www.clubdelphi.com/foros/showthread.php?t=71269)

rogeliogamberro 10-12-2010 15:30:55

Porque no funciona Try Catch??
 
Si coloco StrToInt("1.65"); o StrToInt("Hola"); No entra al catch y aparece el cartel del link adjunto. si coloco StrToInt("15"); funciona correctamente. Alguien sabe a que se debe eso?

Mis intensiones es ir leyendo un txt como AnsiString e irlo conviertiendo en el formato que necesito y en caso de que sea erroneo mostrar un mensaje de error. Muchas Gracias! :D

http://img37.imagevenue.com/img.php?..._122_174lo.JPG

Toni 10-12-2010 17:12:16

Hola,

Por lo que se puede ver si que lanza una excepcion, lo que sucede que si lo ejecutas desde el propio entorno es el propio builder el que te muestra la excepcion y si les das a continuar te entrara en el cath()

Esto lo puedes configurar en el entorno de programacion, si quieres que se pare en las excepciones o no.

Al González 10-12-2010 17:20:07

Hola.

El mensaje de error que te aparece es normal, es un aviso del depurador para el programador y no un mensaje de error que vaya a mostrarse al usuario. Si reanudas la ejecución del programa notarás que entra a la sección catch, tal como lo esperas.

Puedes observar la diferencia si ejecutas la aplicación .exe desde fuera del IDE. Aun así, si quieres inhibir tal aviso, existe la opción Exception Types to Ignore (en Delphi así se llama) en las opciones del depurador.

Por otra parte, quizá sea mejor idea utilizar la función TryStrToInt (que imagino también existe en C++Builder). Es más adecuada para comprobar si una cadena de caracteres es un número entero válido o no.

Espero haber ayudado. Un saludo.

Al González. :)

ecfisa 10-12-2010 17:30:21

Hola.

Para que no se pare la ejecución del programa con la excepción hace lo siguiente:

Tools -> Debugger Options -> Language Exception -> Desmarcá la opción: Stop on Delphi Exceptions

Saludos.

rogeliogamberro 13-12-2010 13:07:06

Muchisimas gracias por sus respuestas. Han sido de gran ayuda. Ahora me queda una duda con respecto a la verificacion del ingreso de datos tipo TDateTime o TDate. Alguno puede sugerirme como hacer la verificación de forma eficiente suponiendo que el usuario escribe la fecha o fecha y hora en un Edit? Muchas Gracias!

ecfisa 14-12-2010 05:49:41

Hola rogelio.

Yo lo haria con TMaskEdit, te va a evitar un montón de verificaciones...
La máscara podés definirla en diseño desde la propiedad EditMask del TMaskEdit haciendo doble click sobre ella.
En el ejemplo la defino por código por que resulta más claro que explicar todos los pasos para hacerlo en forma visual.

Un ejemplo muy sencillo como para orientarte:
Código:

...
/* Form1 OnShow: ajustar máscara  */
void __fastcall TForm1::FormShow(TObject *Sender)
{
MaskEdit1->EditMask = "!99/99/0000;1;_"; // mascara: dd/mm/aaaa
 MaskEdit1->Text = "";
 MaskEdit1->AutoSelect = false;
}

/* MaskEdit OnExit: verificar que la fecha es válida */
void __fastcall TForm1::MaskEdit1Exit(TObject *Sender)
{
  if (MaskEdit1->Text != "") {
    try {
      StrToDate(MaskEdit1->Text);
    }
    catch (...) {
      ShowMessage("Error en la fecha ingresada");
      MaskEdit1->SetFocus();
    }
  }
}

Para más información sobre las máscaras, busca en la ayuda de Builder con la palabra : FormatMaskText

Saludos.


La franja horaria es GMT +2. Ahora son las 00:46:19.

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