繁体   English   中英

如何在delphi中为未发布但公开的事件创建事件处理程序?

[英]How can I create an event handler for a non published but public event in delphi?

RAD Studio 10.1柏林,很多东西与以前的版本有所不同。 在FMX中,有一些以前发布的事件现在已被更改为仅公开。

我有一个使用TStringGrid组件和OnDblClick事件的多平台项目。 在Studio 10.1中打开此项目时,我收到警告,该属性OnDblClick不存在。

现在的问题是如何使用不再发布的事件?

我必须说,很难理解为什么他们没有将鼠标事件设置为已发布。据我所知,大多数常规PC和OSX机器都没有触摸。真正的多目标项目应该能够针对这些系统没有他们在Studio 10西雅图所做的麻烦

如果事件处理程序已经存在(我通过错误消息暗示),您可以将这些处理程序分配给FormCreate中的事件。

procedure TForm1.FormCreate;
begin
  StringGrid1.OnDblClick := StringGrid1DblClick;
end;

一种解决方案是创建自己的组件,将FMX.TStringGrid扩展为再次发布事件处理程序。

请参阅此处如何创建新的FMX组件: 创建firemonkey组件

这是重新发布鼠标事件的代码。

unit MyStringGrid;

interface

uses FMX.Grids;

type
  TMyStringGrid = class(TStringGrid)
  published
    property OnDblClick;
    property OnMouseDown;
    property OnMouseMove; 
    property OnMouseUp;
    property OnMouseWheel;
    property OnMouseEnter;
    property OnMouseLeave;
  end;

procedure Register;

implementation

uses FMX.Types;

procedure Register;
begin
  RegisterComponents('NewPage', [TMyStringGrid]);
end;

initialization
  RegisterFmxClasses([TMyStringGrid]);
end.

据报道是一个错误

看着德尔福10.1柏林的源代码公开OnDblClick事件实际上是从继承TControl类。

类似的OnDblClick事件也从继承TControl类不同之处在于它是公开的,像从的TControl类继承的许多其他事件。

无论如何,Embarcadero的家伙一直在通过清理母公司的重新申报来进行一些重构(不确定这是否是正确的术语),如:

type
  TParentClass = clas(Tobject)
  public
    property ParentPropery: Integer read GetParentProperty write SetParentProperty;

  TExampleClass = class(TParentClass)
  public
    property ParentPropery;
  end;

不需要在上述情况下重新声明ParentProperty ,因为它将在所有子类中可用,除非您想要将其可见性从public更改为published

如果你看一下德尔福西雅图10的源代码,你看到属性OnDblClick在几个重新声明TStringGrid父类被刊登在TCustomScrollBox首次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM