2016-04-25 14 views
3

TCustomQuery、TQuery、TTableなどのヘルパーを作成したい... LastRecordPositionプロパティを使用して、OnBeforeScrollでRecNoのプロパティを設定します。クラスヘルパーでクラスのイベントを捕捉する方法は?

ユーザーのOnBeforePostに干渉することなくイベントをキャッチするために、そのヘルパークラスでそのトリガーを作成するにはどうすればよいですか?

私はFireDACまたはZeosLibを古いバージョンに使用しています。

+0

いずれにしても、このようなイベントを捕まえて無効にする必要があると仮定しています。通常、クラスには、実際のイベントが発生する直前に呼び出されるオーバーライド可能なプロシージャがあります。これらのプロシージャは、通常、Onという接頭辞を持たないイベント名と同じ名前を持ち、時には 'On'の代わりに' Do' 。しかし、それは本当にどのクラスのどのイベントに依存します。 –

+0

あなたがパットしたときに私は訂正しました。第二の選択肢は私が望むものです。 Delphiのバージョンに応じてFireDACまたはZeosを使用します。 – PSyLoCKe

答えて

5

ユーザーのOnBeforeScrollイベントハンドラを妨害することなくOnBeforeScrollイベントを代行受信するには、各コンポーネントの仮想DoBeforeScroll()メソッドをオーバーライドする必要があります。ただし、クラスヘルパーは、そのクラスの仮想メソッドをオーバーライドすることはできません。だから、あなたが代わりにいずれかを持っています:

  1. は、あなたが(type TMyCustomQuery = class(TCustomQuery)、など)を傍受する各基本コンポーネントクラスから派生する新しいクラスを作成し、ユーザーが自分のコードでこれらの新しいコンポーネントクラスを使用する必要があります。オリジナルの代わりに。

  2. (XE以降のみ)の任意の派生クラスを記述することなく、特定のコンポーネント・オブジェクト・インスタンス(クラス自体ではない)の仮想DoBeforeScroll()方法をフックするDelphiのTVirtualMethodInterceptorクラスを使用します。

代替は、ユーザが各コンポーネントオブジェクトインスタンスのインスタンス化しなければならないこと、クラス、おそらくジェネリッククラスを作成することであり、このクラスは、次にキャプチャする(おそらくRTTIと)、その関連コンポーネントをサブクラスと置き換えることができユーザーのOnBeforeScroll独自のイベントハンドラ、次にイベントハンドラが必要なときにユーザーのイベントハンドラを呼び出すことができます。

+0

それは私が賛成していたものでした... – PSyLoCKe

+0

私はこのためにグローバルを使用したくありませんでした... – PSyLoCKe

+0

グローバルについては何も言いませんでした。 –

関連する問題