2008-11-25 66 views
2

谁能告诉我为什么第二次在Delphi 7中编译失败?作为TWinControl铸造TWebBrowser

var 
    WebBrowser: TWebBrowser; 
begin 
    WebBrowser := TWebBrowser.Create(Self); 
    TWinControl(WebBrowser).Parent := Self; 
    (WebBrowser as TWinControl).Parent := Self; // fail here 
end 

家长在TWebBrowser是只读的IDispatch属性,但为什么第一次石膏看到TWinControl parent属性确定,但第二个不?

感谢

回答

7

第一投用任何检查,它假定程序员是正确的,不胜枚举。 第二个演员使用一些理智检查。 (如果演员剧照无效,会导致异常)。 我认为在这种情况下,编译器因类似的命名属性而感到困惑。它甚至可能是一个过分优秀的优化器。

至少,

var 
    wc : TWinControl; 
begin 
    wc := (WebBrowser as TWinControl); 
    wc.Parent := Self; 
end; 

作品。所以有一个规避。