ich würde als erste JV empfehlen
(...jcl git\jcl\experts\repository\ExceptionDialog\Standar dDialogs\ExceptDlg.pas)
wenn der in projekt eingebunden ist, meldet der den Fehler und Aufrufstack.
du solltest aber dann Projekt-> JCL Debug Expert -> Generate und Insert aktivieren und -> .Map Datei löschen aktivieren,
Bzw dann auch testen einmal ob eine
Exception angezeigt wird und der richtige Stack.
Der Aufrufstack sollte eigendlich zu 99% der Fehler führen.
Aber du kannst auch einfach eine Protokollierung der Controls für deine Anwendung erstellen.
Delphi-Quellcode:
type
TForm2 = class(TForm)
tmr1: TTimer;
mmo1: TMemo;
edt1: TEdit;
btn1: TButton;
procedure tmr1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
private
FLastForm:TForm;
FLastControl:TControl;
protected
procedure WndProc(var Message: TMessage); override;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses Unit3;
procedure TForm2.FormShow(Sender: TObject);
begin
Form3.show;
end;
procedure TForm2.tmr1Timer(Sender: TObject);
var CurForm:TForm;
CurControl:TControl;
begin
if tmr1.Tag<>0 then exit;
tmr1.Tag:=1;
//logging über Screen...
CurForm:=Screen.ActiveForm;
CurControl:=Screen.ActiveControl;
if CurForm<>FLastForm then
begin
mmo1.Lines.Add(CurForm.ToString()+'.'+CurForm.Name);
FLastForm:=CurForm;
end;
if CurControl<>FLastControl then
begin
mmo1.Lines.Add(CurControl.ToString()+'.'+CurControl.Name);
FLastControl:=CurControl;
if CurControl is TButton then
begin
//noch irgendwas ?
end;
end;
tmr1.Tag:=0;
end;
procedure TForm2.WndProc(var Message: TMessage);
var
MausPos: TPoint;
control: TControl;
begin
//logging über die Messages...
//aus http://www.delphipraxis.net/45239-wndproc-funktioniert-nicht-mit-buttons-auf-formular.html
If (Message.Msg = WM_LBUTTONDOWN) or
((Message.Msg = WM_PARENTNOTIFY)
and (Message.wParam = WM_LBUTTONDOWN)) then begin
GetCursorPos(MausPos);
MausPos := ScreenToClient(MausPos);
control := self.ControlAtPos(MausPos, false, true);
//oder
control := screen.ActiveControl;
if control = nil then
mmo1.Lines.Add('WndProc: WM_LBUTTONDOWN --- nil ---')
else
mmo1.Lines.Add('WndProc: WM_LBUTTONDOWN --- '+control.name+' ---')
end;
inherited WndProc(Message);
end;