Thema: Delphi Eingaben mitloggen

Einzelnen Beitrag anzeigen

4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#5

AW: Eingaben mitloggen

  Alt 18. Okt 2017, 14:28
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;
  Mit Zitat antworten Zitat