Ich habe begonnen, die in Delphi zu verwendenden Webview-Schnittstellen zu konvertieren. Ich habe es geschafft, die Webkit-Bibliothek zum Laden zu bringen, und die aufgerufenen Schnittstellenmethoden scheinen korrekt zu funktionieren. Ich kann die Webansicht jedoch nicht im Hauptformular anzeigen.
Unten sind meine Schnittstellen, die deklariert sind
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;
Und hier folgt der Code zum Erstellen einer 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;
Der Code wird ohne Ausnahmen ausgeführt, möchte jedoch nicht angezeigt werden. Was muss in Delphi anders gemacht werden? Die Beispiele, die ich für Ziel C gefunden habe, scheinen recht einfach zu sein:
Einige objektive C-Beispiele, die ich gesehen habe, erwähnen IBOutlets. Es sieht nicht so aus, als wäre dies für Delphi relevant.
Wie kann das WebView OSX Xcode-Projekt beim Start eine URL laden?
Vielen Dank.
quelle
Antworten:
Getting the NSWindow of a FMX form
Konvertieren einer TForm-Referenz in ein NSWindow-
Set- Hostfenster .
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;
quelle
Haben Sie über Chromium Embedded Port für Delphi nachgedacht ?
quelle