Hola.
Podrías usar
RTTI, por ejemplo:
Código Delphi
[-]
unit uException;
interface
uses SysUtils;
type
TAppExceptHandler = class(TObject)
public
procedure Handle(Sender: TObject; E: Exception);
end;
var
AppExceptHandler: TAppExceptHandler;
implementation
uses TypInfo, Dialogs;
procedure TAppExceptHandler.Handle(Sender: TObject; E: Exception);
var
Ptd: PTypeData;
begin
Ptd := GetTypeData(Sender.ClassInfo);
if Assigned(Ptd) then
ShowMessage(Format('Se produjo un error en %s%s%s',[Ptd^.UnitName, #10, E.Message]))
else
;
end;
end.
Código Delphi
[-]
program Project1;
uses
Forms,
uException in 'uException.pas',
Unit1 in 'Unit1.pas' ,
Unit2 in 'Unit2.pas' ,
Unit3 in 'Unit3.pas' ;
{$R *.res}
begin
Application.OnException := AppExceptHandler.Handle;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Forzar errores en distintas unidades :
Código Delphi
[-]
unit Unit1;
...
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
...
implementation
uses Unit2, Unit3;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Visible := False;
Edit1.SetFocus; end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2 := TForm2.Create(Self); end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form3 := TForm3.Create(Self); end;
...
Resultado:
Saludos