在事件中创建NSView并通过参数返回它

时间:2014-11-11 07:45:50

标签: macos delphi firemonkey

我想在事件中创建一个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;

我只是通过其中一个 - 工作一个款待。

0 个答案:

没有答案