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.
¿Has considerado el puerto Chromium Embedded para Delphi ?
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;