Когда SP_Search является TAdoStoredProc и имеет свойство OnAfterScroll, все, что вам нужно сделать, это:
SP_Search.OnAfterScroll := SP_SearchAfterScroll;
Я предполагаю, что вы использовали правильную подпись для SP_SearchAfterScroll.То есть свойство OnAfterScroll имеет тип, который выглядит следующим образом:
TScrollEvent = procedure(DataSet: TDataSet) of object;
Если свойство OnAfterScroll имеет тип, отличный от этого, вам необходимо убедиться, что ваша процедура SP_SearchAfterScroll соответствует параметрам в этомtype.
Edit
В комментариях Микаил попросил
SP_Search.AfterScroll :=
SP_SearchAfterScroll(SPSearch)'
, компилятор жалуется, говоря о несовместимых типах TNotifyEvent и процедуре.Но когда я пишу SP_Search.AfterScroll :=
SP_SearchAfterScroll
, это работает.Какая разница?
Я не успел ответить на этот вопрос, и в то же время Мики объяснил это очень хорошо, поэтому для (более простого) будущего упоминания я включаю егообъяснение здесь:
SP_Search.AfterScroll :=
, что код назначает функцию для обработки события при его запуске - вы не вызываете SP_SearchAfterScroll в «назначенное время», просто присваивая значение переменной,так что вы не передаете параметр.Параметр необходим при выполнении вызова - при возникновении события вызывающая сторона назначит параметр с правильным значением.Когда вы передаете параметр, компилятор предполагает, что вы вызываете функцию, а не присваиваете ее, поэтому вы получаете ошибку несовместимых типов.Когда вы просто назначаете функцию без параметра, компилятор понимает, что вы назначаете, а не вызываете функцию.