Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Errorsys, o gestión de errores

¿Dónde ha quedado el Errorsys de Clipper?

Pues todo aquello de modificar el fichero de control de errores, recompilarlo con la aplicación, etc. se ha quedado en nada que se le parezca al funcionamiento y detección de errores en Delphi.

La similitud sería mas facil encontrarla en la clase Error de las versiones de Clipper 5.x, en la cual se genera una llamada a ErrorBlock pudiendose desde aquí crear la función propia de control. El "parecido" puede encontrarse en la llamada y en la protección de un bloque de código (no un CodeBlock) mediante la estructura

Begin ... Sequence

Definidos en el fichero de cabecera ERROR.CH se encuentran los códigos que se generan.

Veamos en Delphi. El tratamiento de los errores se efectúa mediante las denominadas "excepciones". El proceso no es dificil, basta considerar dos tipos de excepciones: las que manda una unidad denominada SysUtils cada vez que se encuentra con un error en ejecución y las que puede lanzar el usuario ante una eventualidad.

La estructura principal de protección del bloque en este caso es Try ... Finally.

Veamos un ejemplo:

Código Delphi [-]
var f:TForm1;
begin
  f:TForm1.Create(Self);
  try
    f.ShowModal;
  finally
    F.Free;
  end;

En el caso de producirse un error en un punto del bloque Try (en este caso al mostrar el form), inmediatamente abandona la ejecución del bloque y pasa el control a Finally, que liberará la memoria.

Esta es la forma más usual de protección ante errores, la otra estructura utilizada es Try ... Except es menos utilizada, salvo que lo que se pretenda sea manejar las excepciones.

Código Delphi [-]
  b:=5;
  c:=0;
  try
    a := b div c;
  except
    // manejadores de excepción
  end;

En un momento cualquiera y dentro del bloque Try se produce un error (en este caso división por cero), inmediatamente se sale y si se ha definido dentro del bloque Except un manejador de errores lo ejecuta. Como no se trata de efectuar un estudio exhaustivo, baste con decir que la estructura sería de este tipo:

Código Delphi [-]
try
  a:=b div c;
except
  on Excepción do
  begin
    .......
  end;
end;

Donde Excepción definiría el error que la ha provocado, en este caso EZeroDivide.

En otros casos sería mas compleja la detección del error en concreto, y se lograría mediante la herencia de la clase Exception, pero no es ese el tema en este momento.

También se especificaba arriba que el usuario puede lanzar una excepción. Esto se consigue sin mas que ejecutando Raise. La utilidad de ello es muy variada e importante, habida cuenta que permite que con su sola ejecución actúen las estructuras Try anteriores o crear una excepción concreta si se pretende esto.

Como la única pretensión es facilitar el camino a los programadores que proviniendo de Clipper "aterrizan" en Delphi, no parece oportuno profundizar más en estas cuestione, en otras preguntas se tratará con más profundidad.
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 19:51:28.


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