Указатель метода и обычная процедура несовместимы

У меня есть приложение, которое имеет несколько форм. Все эти формы имеют PopupMenu. Я создаю пункты меню программно, все под общим корневым пунктом меню. Я хочу, чтобы ВСЕ пункты меню вызывали одну и ту же процедуру, а сам пункт меню в основном выступал в качестве аргумента....

У меня это работало, когда у меня была только одна форма, выполняющая эту функцию. Теперь у меня есть несколько форм, необходимых для этого. Я перемещаю весь свой код в общий блок.

Example.
Form A has PopupMenu 1.  When clicked, call code in Unit CommonUnit.
Form B has PopupMenu 2.  When clicked, call code in unit CommonUnit.

Когда мне нужно вызвать свое всплывающее окно из каждой формы, я вызываю свою процедуру верхнего уровня (, которая находится в модуле CommonUnit ), передавая имя пункта верхнего меню из каждой формы процедуре верхнего уровня в общем модуле.

Я добавляю элементы в свое PopupMenu с помощью кода.

M1 := TMenuItem.Create(TopMenuItem);
M1.Caption := FieldByName('NAME').AsString;
M1.Tag := FieldByName('ID').AsInteger;
M1.OnClick := BrowseCategories1Click;
TopMenuItem.Add(M1);

Я получаю сообщение об ошибке при компиляции. В частности, строка OnClick жалуется на

Несовместимые типы :'указатель метода и обычная процедура'.

Я определил BrowseCategories1Click точно так же, как это было раньше, когда я делал это в одной форме. Единственное отличие состоит в том, что теперь он определяется в общей единице, а не как часть формы.

Он определяется как

procedure BrowseCategories1Click(Sender: TObject);
begin
//
end;

Каков самый простой способ обойти это?

Спасибо ГС

14
задан Filburt 3 July 2012 в 15:53
поделиться