2014-10-17 43 views
4

我想在Delphi中創建的WebView WebFrameLoadDelegate的方法,這個對象 - 方法:如何實現x:y命名的委託方法?

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame 

如何把這個方法在德爾福宣佈?

這些不工作:

public 
    procedure didFinishLoadForm(webView:WebView; Sender:WebFrame); cdecl; 
    procedure webViewdidFinishLoadForm(webView:WebView; Sender:WebFrame); cdecl; 

設置委託類似乎使用 webview.setFrameLoadDelegate(d.GetObjectID)是OK;

其中d是TMyWebViewDelegate(TOCObject)類,有GetObjectiveClass覆蓋,返回一個接口(NSObject的),像工具欄委託這裏http://delphihaven.wordpress.com/2012/07/15/using-the-cocoa-toolbar-nstoolbar-in-xe2/

但我的方法不叫。 聲明這種obj-c方法的模式是什麼?

回答

4

通常最好使用方法和參數的確切名稱(由Rudy回答)。但有時這是不可能的。兩個功能可能需要具有相同的名稱,但具有相同的參數類型,因此無法使用overload。在這種情況下,您可以使用MethodName屬性。所以這裏有另一個有效的解決方案:

[MethodName('webView:didFinishLoadForFrame:')] 
procedure webViewdidFinishLoadForm(Sender:WebView; Frame:WebFrame); cdecl; 
+0

謝謝哇,魔法隱藏功能:)還有更多這樣的無證功能嗎?例如,我找不到任何關於[MethodName]的信息。它在Emb的源代碼中也不存在 - 至少在xe5中。 – kgz 2014-10-19 17:25:44

+0

MethodName在iOS的XE5源中使用了4次。所以有機會發現它:) – 2014-10-19 20:22:54

+0

嗯,我沒有移動附加組件,但再次感謝。 – kgz 2014-10-20 07:58:26

3

正確的語法來實現程序應該是:

procedure webView(sender: WebView; didFinishLoadForFrame: WebFrame); 

Objective-C的選擇的名稱是webView:didFinishLoadForFrame:。第一部分必須成爲該方法的名稱,以下部分必須成爲參數的名稱(區分大小寫,因爲Objective-C區分大小寫)。這就是Delphi如何將方法名稱映射到選擇器。