Paso 1
Vamos a crear un formulario que será la ventana de aviso como las imágenes anteriores, éste es el código de dicho formulario:
Nombre de la unidad (Unit): Aviso.
Nombre del Formulario (Form): FAviso.
delphi
unit Aviso; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, pngimage, ExtCtrls; type TFAviso = class(TForm) Label1: TLabel; Image1: TImage; btDetalle: TButton; btCerrar: TButton; mError: TMemo; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure btCerrarClick(Sender: TObject); procedure btDetalleClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var FAviso: TFAviso; implementation {$R *.dfm} procedure TFAviso.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure TFAviso.btCerrarClick(Sender: TObject); begin Close; end; procedure TFAviso.btDetalleClick(Sender: TObject); begin if btDetalle.Caption = 'Detalles >>' then begin FAviso.Height := 243; btCerrar.Top := 176; btDetalle.Top := 176; mError.Visible := True; btDetalle.Caption := '<< Detalles'; end else begin FAviso.Height := 152; btCerrar.Top := 88; btDetalle.Top := 88; mError.Visible := False; btDetalle.Caption := 'Detalles >>'; end; end; end.
Paso 2
En este paso vamos a crear un procedimiento en el Form principal de tu aplicativo, lo llamaremos Mostrar:
delphi
procedure Mostrar(cMensaje,cError: string); begin FAviso := TFAviso.Create(Application); FAviso.Label1.Caption := cMensaje; {Label} FAviso.mError.Text := cError; {Memo} FAviso.ShowModal; Freeandnil(FAviso); end;
cMensaje: Es el mensaje General del formulario asignado por ti.
cError: es el mensaje de error por defecto de la excepción.
Método de uso.
Ahora veremos cómo usar el procedimiento y el llamado de la ventana, para su perfecto funcionamiento debemos agregar en el uses de tu form principal la unidad Aviso que creamos anteriormente, colocaremos el siguiente código en un botón en el form principal:
delphi
procedure TForm1.Button1Click(Sender: TObject); begin //algo de código try //código except on E: Exception do if E.ClassNameIs('EDatabaseError') then begin Mostrar('Se produjo un error al intentar conectarse a la base de datos.', E.Message); Abort; end; end; end;
Esa es una de las tantas formas de capturar una excepción, debe estar encerrado en un Try...Except para capturar esos errores, aquí una lista de excepciones genéricos de Delphi (también puedes capturar excepciones de componentes):
EAbort: Finaliza la secuencia de eventos sin mostrar el mensaje de error.
EAccessViolation: Comprueba errores de acceso a memoria inválidos.
EBitsError: Previene intentos para acceder a arrays de elementos booleanos.
EComponentError: Nos informa de un intento inválido de registar o renombar un componente.
EConvertError: Muestra un error al convertir objetos o cadenas de texto string.
EDatabaseError: Especifica un error de acceso a bases de datos.
EDBEditError: Error al introducir datos incompatibles con una máscara de texto.
EDivByZero: Errores de división por cero.
EExternalException: Significa que no reconoce el tipo de excepción (viene de fuera).
EIntOutError: Representa un error de entrada/salida a archivos.
EIntOverflow: Especifica que se ha provocado un desbordamiento de un tipo de dato.
EInvalidCast: Comprueba un error de conversión de tipos.
EInvalidGraphic: Indica un intento de trabajar con gráficos que tienen un formato desconocido.
EInvalidOperation: Ocurre cuando se ha intentado realizar una operación inválida sobre un componente.
EInvalidPointer: Se produce en operaciones con punteros inválidos.
EMenuError: Controla todos los errores relacionados con componentes de menú.
EOleCtrlError: Detecta problemas con controles ActiveX.
EOleError: Especifica errores de automatización de objetos OLE.
EPrinterError: Errores al imprimir.
EPropertyError: Ocurre cuando se intenta asignar un valor erroneo a una propiedad del componente.
ERangeError: Indica si se intenta asignar un número entero demasiado grande a una propiedad.
ERegistryExcepcion: Controla los errores en el resigtro.
EZeroDivide: Controla los errores de división para valores reales.
Espero lo disfruten
Saludos.