У меня есть приложение, которое имеет несколько форм. Все эти формы имеют 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;
Каков самый простой способ обойти это?
Спасибо ГС