设置Firemonkey控件OnMouseMove方法

Setting a Firemonkey control OnMouseMove method

本文关键字:方法 OnMouseMove 控件 Firemonkey 设置      更新时间:2023-10-16

我有一个自定义控件,我试图定义一个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
}