2012-03-16 9 views
73

Empecé a convertir las interfaces de Webview para consumir 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.Vista web que no se muestra en MacOS con Delphi XE2

abajo es mi interfaces que se declaran

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 una vista Web:

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 levantar ninguna excepción, pero simplemente no quiere aparecer . ¿Qué debe hacerse de manera diferente en Delphi? Los ejemplos que encontré para el objetivo C parecen ser bastante simples:

Algunos ejemplos del objetivo C He visto mencionar IBOutlets. No parece que esto sea relevante para Delphi.

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

Gracias.

+1

Creo que no es posible ya que Delphi solo usa Cocoa para mostrar un formulario, todo lo demás se muestra usando Quartz. No deberías ser capaz de mostrar objetos de cacao sin escribir un vcl completo para Cocoa. –

+1

"freepascal" podría no ser una etiqueta apropiada, ya que Free Pascal interactúa con Cocoa sobre Objective Pascal, no sobre interfaces y D2010 rtti (que FPC aún no admite). Si está interesado en el asunto, hay un inicio aproximado de un backend de LCL Cocoa. (afaik tiene soporte de FORMULARIO básico funcionando) –

+1

@HenriGourvest Todo lo que quiero hacer es mostrar un formulario básico con el control de vista web en él - ¿Hay alguna manera de utilizar solo el cacao sin cuarzo? –

Respuesta

7

Getting the NSWindow of a FMX form
convertir una referencia a una ventana TForm conjunto anfitrión 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; 
+0

@PhillipRoux: ¿Has visto mi respuesta? –

Cuestiones relacionadas