Настройка обработчика событий в Delphi 2007 и ошибка «Различаются списки параметров» - PullRequest
2 голосов
/ 12 января 2009

Я пытаюсь написать класс в Delphi 2007 , который использует библиотеку ActiveX . Класс будет перехватывать событие, которое библиотека ActiveX должна выставлять собственное событие, которое добавляет некоторую информацию к событию библиотеки ActiveX.

Суть в том, что когда я назначаю свою собственную процедуру событию библиотеки ActiveX, которое я хочу использовать, я получаю ошибку:

E2009 Incompatible types: 'Parameter lists differ'

Я уверен, что списки параметров одинаковы (одинаковое количество параметров и одинаковых типов), поэтому я думаю, что поступаю неправильно.

Есть предложения или кто-нибудь может выложить пример кода того, что я пытаюсь сделать?

Ответы [ 2 ]

5 голосов
/ 12 января 2009

Первое, что нужно проверить, это то, что вы пытаетесь присвоить свойству события метод . Это должна быть процедура или функция, принадлежащая классу; это не может быть отдельной подпрограммой.

Далее, обратите внимание, что простого подтверждения того, что имена типов совпадают, недостаточно. Delphi позволяет переопределять идентификатор, поэтому имя типа, которое вы видите в одном блоке, не обязательно относится к одной и той же вещи, когда вы видите тот же идентификатор в другом блоке. Значение может даже измениться в середине единицы. Например:

unit Example;

interface

uses Windows;

var
  foo: TBitmap;

implementation

uses Graphics;

var
  bar: TBitmap;

end.

Переменная foo имеет тип Windows.TBitmap, тип записи, тогда как bar имеет тип Graphics.TBitmap, тип класса.

Вы можете позволить IDE помочь вам диагностировать это: Ctrl + клик по именам идентификаторов и позволит IDE перенести вас в их объявления. Они возят тебя в одни и те же места? Если нет, то вы можете квалифицировать имена типов с именами устройств. Например, мы можем изменить приведенное выше объявление bar на следующее:

var
  bar: Windows.TBitmap;

Теперь он будет иметь тот же тип, что и foo. Проверьте то же самое в объявлении обработчика событий.

1 голос
/ 12 января 2009

Я воспользовался советом Габра, нажав Ctrl +, и обнаружил, что одним из параметров является константа, которую я не понял. Я изменил вторую переменную на const, и она работала нормально. Спасибо.

...