代码之家  ›  专栏  ›  技术社区  ›  Jamie

将TWebBrowser转换为TWinControl

  •  2
  • Jamie  · 技术社区  · 16 年前

    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 回复  |  直到 16 年前
        1
  •  7
  •   Toon Krijthe    16 年前

    第一个cast不使用检查,它假定程序员是正确的,然后继续。 我认为在这种情况下,编译器会因为相似的命名属性而感到困惑。它甚至可能是一个过于偏执的优化器。

    至少

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

    作品因此有一种规避。