Delphiデバッガは、線形コードのデバッグに最適です.1つの関数が他の関数を予測可能かつ線形的に呼び出し、1行ずつプログラムをステップ実行できます。DelphiですべてのGUIイベントを記録する方法はありますか?
イベントドリブンGUIコードを扱うときにデバッガが役に立たないことがわかります.1行のコードで新しいイベントがトリガされ、他のイベントがトリガされる可能性があります。 このような状況では、「ステップスルー・ザ・コード」というアプローチでは、すべてのことがわかりません。
私が通常これを解決する方法は、1)どのイベントが問題の一部かを推測し、2)それらのイベントのそれぞれにブレークポイントやログを追加することです。
問題は、このアプローチが無駄で時間がかかることです。
スイッチがありますか?デバッガで「すべてのGUIイベントをログする」とフリックできますか?
FieldA.KeyDown
FieldA.KeyPress
FieldA.OnChange
FieldA.OnExit
FieldB.OnEnter
これはすべて取る:または私はトラップイベントに追加することができますいくつかのコードは、私が探している
procedure GuiEventCalled(ev:Event)
begin
log(ev);
ev.call();
end
ような最終的な結果は、(例えば)このようなもので、そこにありますDelphi GUIのデバッグを推測する。私は、Delphi 2010
[EDIT] を使用しています
は、いくつかの答えは、Windowsメッセージを傍受またはログに記録する方法を提案しました。また、DelphiのすべてのイベントがWindowsメッセージであるとは限りません。私はそれが私が尋ねていた "非Windowsメッセージ"イベントのこれらのタイプだと思います。 Delphiコードで作成されたイベント。 [編集]
[EDIT2] ここですべての情報を読んだ後、RTotを使用してTNotifyEventsを動的に傍受し、デバッグウィンドウのイベントログにそれらを記録する考えがありました。これには、OnEnter、OnExit、OnChange、OnClick、OnMouseEnter、OnMouseLeaveイベントが含まれます。ハッキングのビットの後、少なくとも私の使用のために、かなりうまく動くようになりました(キーイベントはログに記録されませんが、追加できます)。 私はのどこかにこの行を追加しますuses節
にEventInterceptorユニットを追加
- がEventInterceptorユニットをダウンロードして使用してプロジェクト
- に追加するコードhere
を掲載しました追跡する各フォームのコード。
AddEventInterceptors(MyForm);
オープンデバッガウィンドウとリアルタイムでメッセージフローを確認するために、イベントログ
[/ EDIT2]
+1ここにコードを入れて自分のソリューションを投稿してください! –