我想在事件中创建一个NSView派生物并将其返回给调用过程。
之类的东西 ...
if assigned(FMyEvent) then
FMyEvent(newview)
..
并且会为事件分配类似
的内容procedure TForm6.AssignView(var view: Pointer);
begin
view := Pointer(TNSButton.Wrap(TNSButton.Wrap(TNSButton.OCClass.alloc).initWithFrame(MakeNSRect(200,0,100,50))));
end;
在这种情况下将返回NSButton。
现在因为我希望发布事件我不能使用NSView作为参数 - 因为NSView是一个仅限OSX的定义,表单设计者也需要知道Windows中的事件。所以我把它变成了Pointer类型 - 但是这会崩溃,看起来像查看堆栈跟踪时的参考计数器问题。
有人可以提出替代方案吗?或者我可能需要做一些事情来增加引用计数?或者,如果任何人可以指出delphi / osx接口上的一些文档,那就太棒了。
更新
我被骗了,只是制作了一个容器 - 就像这样
TNSViewContainer = class
{$IFDEF MACOS}
private
FView: NSView;
procedure SetView(const Value: NSView);
published
property View : NSView read FView write SetView;
{$ENDIF}
end;
我只是通过其中一个 - 工作一个款待。