首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Delphi XE2无法在MacOS中显示Webview

使用Delphi XE2无法在MacOS中显示Webview
EN

Stack Overflow用户
提问于 2012-03-16 12:16:43
回答 2查看 2.3K关注 0票数 73

我已经开始将Webview接口转换为在Delphi中使用。我已经设法加载了webkit库,并且调用的接口方法似乎工作正常,但是,我似乎无法在主窗体上显示Webview。

下面是我声明的接口

代码语言:javascript
复制
  WebFrameClass = interface(NSObjectClass)
  ['{7BE750C8-DFEC-4870-851A-12DBCB0B78F6}']
  end;

  WebFrame = interface(NSObject)
  ['{BCFA04BE-41AB-4B78-89C0-3330F12C7695}']
    procedure loadRequest(request: NSURLRequest); cdecl;
  end;
  TWebFrame = class(TOCGenericImport<WebFrameClass, WebFrame>)  end;

  WebViewClass = interface(NSViewClass)
  ['{0D9F44B7-09FD-4E35-B96E-8DB71B9A2537}']
    {class} function canShowMIMEType(MIMEType: NSString): Boolean; cdecl;
  end;

  WebView = interface(NSView)
  ['{C36D8016-2FCB-49F0-BA1C-C9913A37F9AC}']
    procedure clos; cdecl;
    procedure setHostWindow(hostWindow: NSWindow); cdecl;
    function initWithFrame(frame: NSRect; frameName: NSString; groupName: NSString): Pointer; cdecl;
    function mainFrame: WebFrame; cdecl;
  end;
  TWebView = class(TOCGenericImport<WebViewClass, WebView>)  end;

下面是构造WebView的代码:

代码语言:javascript
复制
procedure TForm2.Button1Click(Sender: TObject);
var
  PWebView: Pointer;
  FwkMod: HMODULE;
  MyWebView: WebView;
  urlStr: NSURL;
  urlreq: NSURLRequest;
const
  WebKitFWK: string = '/System/Library/Frameworks/WebKit.framework/WebKit';
begin
  FwkMod := System.SysUtils.LoadLibrary(PWideChar(WebKitFWK));
  PWebView := TWebView.Alloc.initWithFrame(MakeNSRect(10, 10, 300, 300), nil, nil);
  MyWebView := TWebView.Wrap(PWebView);

  urlStr := TNSURL.Create;
  urlstr.initWithString(NSSTR('http://google.com.au/'));
  urlreq := TNSURLRequest.Create;
  urlreq.initWithURL(urlstr);
  MyWebView.mainFrame.loadRequest(urlreq);
end;

代码在不引发任何异常的情况下执行,只是不想出现。在Delphi中需要做哪些不同的事情?我为objective C找到的例子看起来非常简单:

我见过的一些objective C示例提到了IBOutlets。这看起来与Delphi无关。

How to make WebView OSX Xcode project load a URL on launch?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-04-04 03:43:07

Getting the NSWindow of a FMX form

将TForm引用转换为NSWindow

设置主机窗口。

MyWebView.setHostWindow(MyNSWindow)

代码语言:javascript
复制
procedure TForm2.Button1Click(Sender: TObject);
var
[...]
 ObjTOC: TOCLocal;
 MyNSWindow : NSWindow;
[...]  
 ObjTOC := (FmxHandleToObjC(Form2.Handle) as TOCLocal);
 MyNSWindow := NSWindow(TOCLocalAccess(ObjTOC).Super);

PWebView := TWebView.Alloc.initWithFrame(MakeNSRect(10, 10, 300, 300), nil, nil);
 MyWebView := TWebView.Wrap(PWebView);
 MyWebView.setHostWindow(MyNSWindow);

[...]
 MyWebView.mainFrame.loadRequest(urlreq);
end;
票数 7
EN

Stack Overflow用户

发布于 2013-04-04 13:18:42

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9731817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档