Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mitprotokollieren, was im Programm angeklickt wurde (https://www.delphipraxis.net/149074-mitprotokollieren-im-programm-angeklickt-wurde.html)

RWarnecke 13. Mär 2010 15:55


Mitprotokollieren, was im Programm angeklickt wurde
 
Hallo zusammen,

wie kann ich am besten alles mitprotokollieren, was der Anwender in einem Delphi-Programm eingibt und welche Komponenten er wann und in welcher Reihenfolge anklickt.

Edit:
Ich bräuchte da eine schnelle und einfach Lösung für.

haentschman 13. Mär 2010 16:09

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Hallo... :hi:

vor dem gleichen Problem stand ich auch allerdings nur für den Fehlerfall. Im Fehlerfall hat mir madExcept und der callstack geholfen. Ansonsten bleibt nur manuelle Implementierung. Das bedeutet... Viel Spaß :zwinker:

Hansa 13. Mär 2010 17:02

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Zitat:

Zitat von haentschman
.. Das bedeutet... Viel Spaß :zwinker:

In der Tat : ist ein leichtes. Schätze mal 2 Min. Aufwand. AAAAber :mrgreen: : das setzt vorraus, dass auch auf Form Ebene OOP eingesetzt wird. Man baut sich das Protokollierungs-OnClick zusammen für die Grundform und vererbt davon einfach weiter. Oder nur eine Form ? Grundsätzlich würde es jedenfallse so gehen :

Delphi-Quellcode:
  for i := 0 to ComponentCount - 1 do begin
    c := Components [i];
    if c is TButton then begin
      showmessage ((c as TButton).name);
    if c is TEdit then begin
      showmessage ((c as TEdit).name+' '+(c as TEdit).Text);
// statt Showmessage natürlich OnClick, OnChange etc. entsprechend zuweisen.

daywalker9 13. Mär 2010 17:31

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Am einfachsten ist es die Buttons, Edits sich selber abzuleiten und bei Click, Exit aus einem Edit in eine globale Stringlist den Namen und das Event zB "Button1 / Click" reinzuschreiben und diese Stringlist dann zu speichern.

So machen wir das in der Firma.

RWarnecke 13. Mär 2010 18:02

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Hallo zusammen,

danke erstmal für eure Antworten. Es geht dabei nicht um Fehler, die durch falsche Programmzeilen auftreten. Dafür habe ich Eurekalog und bin sehr damit zufrieden. Es geht mir hauptsächlich darum, um Fehler nachzuvollziehen zu können. Also den Weg aufzuzeichnen, wie der Fehler den mir ein User meldet zustande kommt. Zum jetzigen Zeitpunkt ist es mir zuviel Arbeit nochmal jedes einzelne OnClick-, OnExit- und OnChange-Ergeinis anzupacken und manuell eine entsprechende Routine einzubauen.

Schade, dann muss ich eben durch spielen und durch die Erklärungen des Users herausbekommen warum der Fehler auftritt.

haentschman 13. Mär 2010 18:13

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
[OT]
Zitat:

...und durch die Erklärungen des Users herausbekommen warum der Fehler auftritt.
...ein aussichtsloses Unterfangen :stupid:
[/OT]

RWarnecke 13. Mär 2010 18:17

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Das stimmt haentschman. Aber was bleibt mir übrig, bei einem Projekt von über 20.000 Zeilen Code, wo jede Menge Ereignisse drin sind. Für das nächste Projekt bin ich schlauer und baue mir einen Debug-Modus mit ein. Wo ich dann den Debug-Modus über einen Startparameter aktiviere oder über einen Compilerschalter, wo ich dann entsprechend die EXE-Datei austausche.

jaenicke 13. Mär 2010 18:41

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Du kannst Class Helper einsetzen. Das spart eine Menge Arbeit weil du die normalen Komponenten nutzen kannst und mit dem Class Helper diese Funktionalität nur hinzufügst. Zusammen mit dem Singleton Pattern für das Log-Objekt geht das sehr einfach.

Ob man alles so einfach loggen kann auf diese Art weiß ich nicht aber für meine Zwecke reichte es.

RWarnecke 13. Mär 2010 18:52

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Hallo Sebastian,

irgendwie verstehe ich Deine Ausführungen noch nicht so richtig. Ich versuche mal meine Variante wiederzugeben. Das heißt also, man schreibt irgendwelche Helper (nur wie und was muss da rein ? :gruebel: ). Mit diesen Helpern kann ich dann die Aktionen und Ereignisse, die von Komponenten ausgelöst werden in eine LOG-Datei schreiben.

Habe ich das so ganz grob richtig verstanden ?

Astat 13. Mär 2010 22:51

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Zitat:

Zitat von RWarnecke
wie kann ich am besten alles mitprotokollieren, was der Anwender in einem Delphi-Programm eingibt und welche Komponenten er wann und in welcher Reihenfolge anklickt.

Hallo RWarnecke, mir einem localen (nur für das betreffende Programm) installierten Mouse und Keybordhook
kann das Programm dahingehend überwacht und aufgezeichnet werden.

Die Deluxe Version verwendet zusätzlich einen JournalRecord-Hook um alle Aktionen aufzuzeichnen, und diese
mit einem JournalPlayback-Hook wieder abzuspielen.

[msdn]http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx[/msdn]

lg. Astat

Pfaffe2 14. Mär 2010 11:04

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Noch eine Idee wäre ein Macrorecorder:
http://www.happyarts.de/index.php?op...lphi&Itemid=65
(Ob für neuere Delphi-Versionen geeignet, kann ich nicht sagen.)

RWarnecke 14. Mär 2010 11:20

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Zitat:

Zitat von Pfaffe2
Noch eine Idee wäre ein Macrorecorder:
http://www.happyarts.de/index.php?op...lphi&Itemid=65
(Ob für neuere Delphi-Versionen geeignet, kann ich nicht sagen.)

Hallo Pfaffe, danke für Deine Antwort. Habe mir den Link mal angeschaut. Aber es scheint so, dass die irgendwie bei Delphi 3 stehengeblieben sind.


Zitat:

Zitat von Astat
Hallo RWarnecke, mir einem localen (nur für das betreffende Programm) installierten Mouse und Keybordhook
kann das Programm dahingehend überwacht und aufgezeichnet werden.

Die Deluxe Version verwendet zusätzlich einen JournalRecord-Hook um alle Aktionen aufzuzeichnen, und diese
mit einem JournalPlayback-Hook wieder abzuspielen.

[msdn]http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx[/msdn]

lg. Astat

Hallo Astat, danke für Deine Antwort. Bei dem Link steige ich im Moment noch nicht so richtig durch. Das muss ich mir mal in einer ruhigen Stunde genauer anschauen.


Da ich aber im Moment keine Zeit mehr dafür habe, soetwas auszuprobieren, habe ich das auf später Verschoben.

jaenicke 14. Mär 2010 11:25

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Also, ich erkläre einmal wie ich das mit den Class Helpern gelöst habe. Was Class Helper an sich sind findest du sicher auch selbst, deshalb lass ich das mal außen vor.

Das Problem war, dass Class Helper keine Möglichkeit bieten Daten zu einer Instanz zu speichern. Damit hatte ich zwei Möglichkeiten: Die Tag-Eigenschaft missbrauchen oder in dem Logobjekt die Daten zu speichern. Ich habe mich für Letzteres entschieden.

Ich habe einen Class Helper für TComponent geschrieben. Darin eine Initialisierungsmethode, die dann das Logging initialisiert. Diese habe ich dann einfach über das Components-Array der Formulare bei allen Komponenten aufgerufen.
In dieser Methode wird dann geschaut was es für eine Komponente ist und ich habe entsprechend die (in meinem Fall) OnClick, OnMouseEnter, OnMouseLeave und OnKeyPress Handler auf einen eigenen umgebogen, dabei aber die alten gespeichert. In den eigenen Handlern wird dann geloggt und dann der alte Handler aufgerufen.
Sollen die Handler dynamisch geändert werden kann man einfach eine eigene Property dafür definieren, deren Setter das dann übernimmt.

Da das natürlich einiges an Aufwand bedeutet wurde dies nur mit dem Switch /debug bei mir aktiviert. Da man auch kaum Änderungen am Programmcode selbst machen muss war das so ideal für mich, da es ein bestehendes größeres Projekt war.

Morphie 14. Mär 2010 12:21

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Zitat:

Zitat von Pfaffe2
Noch eine Idee wäre ein Macrorecorder:
http://www.happyarts.de/index.php?op...lphi&Itemid=65
(Ob für neuere Delphi-Versionen geeignet, kann ich nicht sagen.)

bei TMSSoftware gibt es das auch für aktuelle Delphi Versionen

RWarnecke 14. Mär 2010 13:02

Re: Mitprotokollieren, was im Programm angeklickt wurde
 
Zitat:

Zitat von Morphie
bei TMSSoftware gibt es das auch für aktuelle Delphi Versionen

Hallo Morphie,

mein Held des Tages. Ich besitze den MakroRecoder von TMS. Das ist spitze. Den werde ich gleich mal ausprobieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz