WebView не отображается в MacOS с использованием Delphi XE2

73

Я начал конвертировать интерфейсы Webview, которые будут использоваться в Delphi. Мне удалось загрузить библиотеку webkit, и методы интерфейса, которые вызываются, работают корректно, однако я не могу показать 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, выглядят довольно просто:

Некоторые объективные примеры C, которые я видел, отмечают IBOutlets. Не похоже, что это относится к Delphi.

Как заставить проект WebView OSX Xcode загружать URL-адрес при запуске?

Спасибо.

  • 1
    Я думаю, что это невозможно, поскольку Delphi использует только какао для отображения формы, а все остальное отображается с помощью Quartz. У вас не должно быть возможности отображать объекты Какао без написания полного vcl для Какао.
  • 1
    «FreePascal» может не быть подходящим тегом, поскольку Free Pascal взаимодействует с Какао через Objective Pascal, а не через интерфейсы и D2010 RTT (который FPC пока не поддерживает). Если вы заинтересованы в этом вопросе, то есть грубый запуск бэкэнда LCL Cocoa. (afaik имеет базовую поддержку FORM)
Показать ещё 6 комментариев
Теги:
macos
freepascal
webkit
delphi-xe2

2 ответа

7

Getting the NSWindow of a FMX form
 конвертировать ссылку TForm на NSWindow
 установить Host Window.
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: Ты видел мой ответ?
2

Рассматривали ли вы Chromium Embedded порт для Delphi?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню