将TWebBrowser转换为TWinControl

时间:2008-11-25 10:33:16

标签: delphi

有谁能告诉我为什么第二次演员无法在Delphi 7中编译?

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

TWebBrowser中的Parent是一个只读IDispatch属性,但为什么第一个转换看到TWinControl父属性ok,但第二个看不到?

由于

1 个答案:

答案 0 :(得分:7)

第一个演员使用没有检查,它假定程序员是正确的并且继续。 第二个演员使用了一些健全性检查。 (如果演员表无效,则导致异常)。 我认为在这种情况下,编译器因为命名属性一样而感到困惑。它甚至可能是一个过于激进的优化者。

至少,

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

作品。所以有规避。

相关问题