delphi - 无法选择过程作为事件 OnMouseDown 的选项

标签 delphi delphi-xe2

当我在对象检查器/事件选项卡中单击 OnMouseDown 时,我有一个形状。我想让它执行“SelectMessage”程序,但它没有显示为一个选项。另外,如果我手动输入“SelectMessage”,我会收到错误信息 Property and method Selectmessage are not compatible。

选择消息

procedure TFZone1Mod7.Selectmessage(sender: TObject);
var
  ShapeOrderNo: Integer;
begin
  if TryStrToInt(copy(TShape(Sender).Name,6,MaxInt),ShapeOrderNo) then
    begin
      LookUpMessage(ShapeOrderNo);
    end;
end;

如果我这样做

procedure TFZone1Mod7.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   selectmessage(sender);
end;

然后就可以了。但如果可以的话,更容易从事件中选择。 谢谢

最佳答案

OnMouseEvent 的事件处理程序必须具有以下形式的签名:

procedure (Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer) of object;

该组件将调用您的事件处理程序并传递所有这些参数,并且您的事件处理程序必须是预期的形式。

你无法控制这个。该组件的事件处理程序具有预先确定的硬编码形式。您只需适应即可。您当前的解决方案是正确的。

话虽如此,SelectMessage 只能在传递给 TShape 时起作用。所以以这种方式声明函数:

procedure TFZone1Mod7.SelectMessage(Shape: TShape);
var
  ShapeOrderNo: Integer;
begin
  if TryStrToInt(copy(Shape.Name,6,MaxInt), ShapeOrderNo) then
    LookUpMessage(ShapeOrderNo);
end;

然后这样调用它:

procedure TFZone1Mod7.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  SelectMessage(Sender as TShape);
end;

关于delphi - 无法选择过程作为事件 OnMouseDown 的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13026294/

相关文章:

delphi - 使用 Delphi 读取和解析固定宽度文本文件的建议

Delphi xe2 和 filectrl 单元

delphi - 为什么OnEditError或OnPostError不能在TClientDataSet中捕获无效的用户条目?

delphi - 相互依赖的程序变量和记录

delphi - Indy 和 smtps : cannot connect

json - 使用 Embarcadero 代码示例通过 TJSONObject 解析有效 JSON 失败并出现异常

delphi - 如何将新应用程序/新文件向导添加到 Delphi IDE "New ..."对话框?

delphi - 将纹理指定给 TModel3D

delphi - DBExpress:如何查找主键字段?

delphi - 如何使用 FireMonkey 跨平台应用程序使用默认浏览器打开 URL?