2012-03-16 18 views
73

私はDelphiで消費されるWebviewインターフェイスを変換し始めました。私はロードするWebkitライブラリを取得することができ、呼び出されたインタフェースメソッドは正しく動作するように見えますが、メインフォームにWebviewを表示することはできません。以下はDelphi XE2を使用してMacOSでWebviewが表示されない

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では何を別の方法で行う必要がありますか?客観的なCの例は非常に単純なようです。

私はIBOutletsについて言及しました。これはDelphiに関連しているようには見えません。

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

感謝。

+1

デルファイはフォームを表示するのにCocoaしか使用しないので、他のものはすべてQuartzを使って表示されます。 Yousは、Cocoa用の完全なvclを記述することなく、Cocoaオブジェクトを表示するべきではありません。 –

+1

Free PascalはObjective Pascalを介してCocoaにインタフェースし、インタフェースやD2010 rtti(FPCはまだサポートしていません)ではなく、 "freepascal"は適切なタグではないかもしれません。あなたがこの問題に興味があるなら、LCL Cocoaバックエンドの大まかなスタートがあります。 (基本的なフォームサポートが働いています) –

+1

@HenriGourvest私がしたいのは、webviewコントロールを備えた基本フォームを表示することです - 石英なしのココアだけを使用する方法はありますか? –

答えて

7

Getting the NSWindow of a FMX form
はNSWindowの
セットホストウィンドウにTFormは参照を変換します。
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:あなたは私の答えを見たことがありますか? –