我有一个自定义控件,我试图定义一个OnMouseMoveFunction。从本质上讲,该控件的功能是作为一个搜索栏,并由一个编辑框和一个用于显示结果的子自定义TGrid
控件组成。我已经为TGrid
处理了几个鼠标事件,但是当尝试实现OnMouseMove时,当我尝试设置TGrid
OnMouseMove方法时,我得到以下错误:
E2034 Cannot convert 'void (_fastcall * (_closure )(TMouseMoveEvent))(TMouseMoveEvent)' to 'TMouseMoveEvent'
这是头文件中定义函数的部分:
void __fastcall GridMouseMove( TMouseMoveEvent * MouseEvent );
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
}