设置 Firemonkey 控件的 OnMouseMove 方法
Setting a Firemonkey control OnMouseMove method
我有一个自定义控件,我试图为其定义一个 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
}
我错过了什么导致无法构建?
原生 TMouseMoveEvent
类型 已经是 指针类型,因此请从您的声明中删除 *
:
void __fastcall GridMouseMove( TMouseMoveEvent MouseEvent );
void __fastcall TFmSearchBar::GridMouseMove( TMouseMoveEvent MouseEvent )
{
//handle event here
}
尝试使用由 IDE 为 TGrid 生成的声明。
Header:
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
}
我有一个自定义控件,我试图为其定义一个 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
}
我错过了什么导致无法构建?
原生 TMouseMoveEvent
类型 已经是 指针类型,因此请从您的声明中删除 *
:
void __fastcall GridMouseMove( TMouseMoveEvent MouseEvent );
void __fastcall TFmSearchBar::GridMouseMove( TMouseMoveEvent MouseEvent )
{
//handle event here
}
尝试使用由 IDE 为 TGrid 生成的声明。
Header:
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
}