gpt4 book ai didi

macos - 使用 Delphi XE2 在 MacOS 中不显示 Webview

转载 作者:行者123 更新时间:2023-12-03 14:32:27 26 4
gpt4 key购买 nike

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

下面是我声明的接口(interface)

  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 的代码:

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 找到的示例似乎非常简单:

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

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

谢谢。

最佳答案

获取FMX表单的NSWindow
将 TForm 引用转换为 NSWindow
设置主机窗口。
MyWebView.setHostWindow(MyNSWindow)

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;

关于macos - 使用 Delphi XE2 在 MacOS 中不显示 Webview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9731817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com