У меня есть пользовательский элемент управления, для которого я пытаюсь определить OnMouseMoveFunction. По сути, элемент управления функционирует как панель поиска и состоит из поля редактирования с дочерним пользовательским TGrid
контроль за отображением результатов. Я обрабатываю несколько событий мыши для TGrid
уже, однако при попытке реализовать OnMouseMove я получаю следующую ошибку, когда я пытаюсь установить TGrid
Метод OnMouseMove:
E2034 Cannot convert 'void (_fastcall * (_closure )(TMouseMoveEvent))(TMouseMoveEvent)' to 'TMouseMoveEvent'
Вот часть файла заголовка, где определена функция:
void __fastcall GridMouseMove( TMouseMoveEvent * MouseEvent );
Вот фактическая функция внутри файла CPP элемента управления:
void __fastcall TFmSearchBar::GridMouseMove( TMouseMoveEvent * MouseEvent )
{
//handle event here
}
До этого момента все будет компилироваться просто отлично. Тем не менее, когда я иду, чтобы назначить TGrid
В обработчике OnMouseMoveEvent для метода, который я назначил, я получаю сообщение об ошибке.
void __fastcall TFmSearchBar::SetGridProperties()
{
FGrid->OnKeyDown = GridKeyDown;
FGrid->OnClick = GridClick;
FGrid->OnMouseEnter = GridMouseEnter;
FGrid->OnMouseLeave = GridMouseLeave;
FGrid->OnMouseMove = GridMouseMove; //This line causes the error
}
Что я пропускаю, что заставляет это не строить?
Попробуйте использовать объявления, сгенерированные IDE для TGrid.
Заголовок:
void __fastcall GridMouseMove(TObject *Sender, TShiftState Shift, float X, float Y);
Реализация из cpp:
void __fastcall TFmSearchBar::GridMouseMove(TObject *Sender, TShiftState Shift, float X,
float Y)
{
ShowMessage("123");
}
Назначение (то же самое):
void __fastcall TFmSearchBar::SetGridProperties()
{
...
FGrid->OnMouseMove = GridMouseMove; //This line causes the error
}
Родной TMouseMoveEvent
тип уже тип указателя, поэтому удалите *
из ваших деклараций:
void __fastcall GridMouseMove( TMouseMoveEvent MouseEvent );
void __fastcall TFmSearchBar::GridMouseMove( TMouseMoveEvent MouseEvent )
{
//handle event here
}