3

フォームに ADOStoredProc があります。視覚的ではなく、コードです。通常、コンポーネントが視覚的である場合、イベントを処理するのは非常に簡単です。目的のイベントをダブルクリックするだけです。しかし、コードでそれを行うにはどうすればよいですか。プロシージャを宣言しました:

 procedure SP_SearchAfterScroll(DataSet:TDataSet)

SP_Search (これは ADOStoredProc) の AfterScroll イベント ハンドラー プロパティを、上で記述したプロシージャに割り当てるにはどうすればよいでしょうか。きっと答えてくれるはずです。事前に感謝します。

4

2 に答える 2

11

SP_Search が TAdoStoredProc であり、OnAfterScroll プロパティを持っている場合、必要なことは次のとおりです。

SP_Search.OnAfterScroll := SP_SearchAfterScroll;

SP_SearchAfterScroll に正しい署名を使用したと仮定しています。つまり、OnAfterScroll プロパティの型は次のようになります。

TScrollEvent = procedure(DataSet: TDataSet) of object;

OnAfterScroll プロパティの型がこれとは異なる場合、SP_SearchAfterScroll プロシージャがその型のパラメーターと一致していることを確認する必要があります。

編集

コメントでミカエルが尋ねた

SP_Search.AfterScroll := SP_SearchAfterScroll(SPSearch)'コンパイラは、互換性のない型 TNotifyEvent とプロシージャを言って不平を言います。しかし、私が書くときはSP_Search.AfterScroll := SP_SearchAfterScrollうまくいきます。違いは何ですか?

私はそれに答えることができませんでしたが、それまでの間、マイキーはそれを非常によく説明していました.

SP_Search.AfterScroll :=そのコードは、イベントが発生したときにイベントを処理する関数を割り当てます-変数に値を割り当てるだけで「割り当て時間」に SP_SearchAfterScroll を呼び出すのではないため、パラメーターを渡しません。呼び出し時にパラメーターが必要です。イベントが発生すると、呼び出し元はパラメーターに正しい値を割り当てます。パラメータを渡すと、コンパイラは、関数を割り当てているのではなく、関数を呼び出していると想定するため、互換性のない型エラーが発生します。パラメーターなしで関数を単に割り当てると、コンパイラーは、関数を呼び出すのではなく、割り当てていることを理解します。

于 2011-05-21T06:27:36.127 に答える