macos delphi webkit delphi-xe2 freepascal

Webview no muestra en MacOS usando Delphi XE2



webkit delphi-xe2 (2)

Empecé a convertir las interfaces de Webview para consumirlas en Delphi. Logré que se cargue la biblioteca de webkit, y parece que los métodos de interfaz que se llaman funcionan correctamente, sin embargo, parece que no puedo mostrar la vista web en el formulario principal.

Debajo está mi interfaz que está declarada

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;

Y aquí sigue al código para construir un 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;

El código se ejecuta sin generar excepciones, pero simplemente no desea aparecer. ¿Qué debe hacerse de manera diferente en Delphi? Los ejemplos que encontré para el objetivo C parecen ser bastante simples:

Algunos ejemplos de Object C que he visto mencionan IBOutlets. No parece que esto sea relevante para Delphi.

¿Cómo hacer que el proyecto WebView OSX Xcode cargue una URL en el inicio?

Gracias.



Getting the NSWindow of a FMX form
convertir una referencia TForm a NSWindow
establecer la ventana de host.
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;