簡體   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