delphi - 将 TWebBrowser 转换为 TWinControl

标签 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 父属性正常,而第二个转换却没有?

谢谢

最佳答案

第一个转换不使用检查,它假定程序员是正确的并继续。 第二个 Actor 使用一些完整性检查。 (如果转换无效则引发异常)。 我认为在这种情况下,编译器会因为类似的命名属性而感到困惑。它甚至可能是一个过于热情的优化器。

至少,

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

有效。所以有规避。

关于delphi - 将 TWebBrowser 转换为 TWinControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/316949/

相关文章:

delphi - 什么时候处置 nil 指针是安全的?

delphi - 如何从命令行重新创建 "default".res 文件?

delphi - 在 Delphi 2010 中将字符串写入 TFileStream

delphi - 没有无参数构造函数的泛型

windows - 将数据库信息获取到程序的最佳方式(windows 和 mac)

delphi - Delphi 2009之前如何处理UTF-8和ANSI转换?

rest - OTRS + REST +票务创建

德尔福: Char value for newline

delphi - 创建 Tform2 时显示消息?

wpf - Delphi 中的 Dxscene 和 VGscene