Возникла неожиданная проблема с назначением события OnMouseDown компоненту. Извиняюсь, если вопрос несколько "нубский", Lazarus начал осваивать недавно, до этого писал только в разных версиях Delphi.
У меня есть на форме компонент TPageControl и мне необходимо в него в Runtime добавлять TTabSheet. С этим вроде как никаких проблем нет, вкладки добавляются. Но, при попытке назначить свойству OnMouseDown собственно обработчик, компилятор не воспринимает его как переменную процедурного типа и выдаёт ошибку:
- Код: Выделить всё
InterfaceUnit.pas(74,52) Error: Wrong number of parameters specified for call to "TabSheetMouseDown"
Ранее, когда я делал подобное в Delphi, я пользовался следующим способом: добавлял в секцию Private класса формы процедуру с параметрами, соответствующими типу TMouseEvent:
- Код: Выделить всё
type
TForm1 = class(TForm)
procedure FormActivate(Sender: TObject);
private
procedure TabMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
public
{ Public declarations }
end;
писал в раздел implementation собственно код обработки:
- Код: Выделить всё
procedure TForm1.TabMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//какой-то код
end;
а потом присваивал этот метод формы свойству OnMouseDown компонента:
- Код: Выделить всё
procedure TForm1.FormActivate(Sender: TObject);
var Edit: TEdit;
begin
Edit := TEdit.Create(form1);
Edit.Parent := form1;
Edit.OnMouseDown := TabMouseDown;
end;
При этом всё нормально работало. В Lazarus так сделать почему-то не получается. Если в нём принцип обработки событий другой, то как можно назначить компоненту обработчик?