0

我有一个自定义控件,我正在尝试为其定义一个 OnMouseMoveFunction。本质上,该控件用作搜索栏,由一个编辑框和一个TGrid用于显示结果的子自定义控件组成。我已经处理了几个鼠标事件TGrid,但是在尝试实现 OnMouseMove 时,当我尝试设置TGridOnMouseMove 方法时出现以下错误:

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
}

到目前为止,一切都会编译得很好。但是,当我将TGridOnMouseMoveEvent 处理程序分配给我分配的方法时,我收到错误消息。

void __fastcall TFmSearchBar::SetGridProperties()
{
    FGrid->OnKeyDown  = GridKeyDown;
    FGrid->OnClick = GridClick;
    FGrid->OnMouseEnter = GridMouseEnter;
    FGrid->OnMouseLeave = GridMouseLeave;
    FGrid->OnMouseMove = GridMouseMove; //This line causes the error
}

我错过了什么导致它无法构建?

4

2 回答 2

1

尝试使用由 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
}
于 2015-06-08T04:51:53.223 回答
0

本机TMouseMoveEvent类型已经是指针类型,因此请*从您的声明中删除:

void __fastcall GridMouseMove( TMouseMoveEvent MouseEvent );

void __fastcall TFmSearchBar::GridMouseMove( TMouseMoveEvent MouseEvent )
{
    //handle event here
}
于 2015-06-05T23:27:45.737 回答