[英]How can I Delphi Mocks an event handler or, assign interface method as delegate in 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.