我在解决用网页中的OCX获取本网页的IHtmlDocument2,是用发送WM_HTML_GETOBJECT消息实现的,但这个方法有个毛病:当OCX外面套的Table的style="display:none"时,就不行。
我现在只好把OCX缩小为一个像素来充数,但感觉不爽。
我在MSDN上查到,使用IOleClientSite::GetContainer的方法也能获取本网页的IHtmlDocument2,但是我只是粗通C++,示例中用到的模板和ATL,我都不太懂。
请哪位比较熟的大哥,帮我翻译成Delphi代码,不胜感激。
MSDN相关资料网址:http://msdn.microsoft.com/library/default.asp?url=/workshop/components/activex/buildax.asp
看其中的Accessing Dynamic HTML
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
这对我来说是一个难题,网上也搜索不到答案。
先放21,以免没人回答浪费。
有人给出有用思路的,总分加到50分。
有人给出答案了,再追加到100分。
多人的,按相关度分配得分。

解决方案 »

  1.   

    其实比ATL还简单,这是通过IHTMLDocument2获取本网页的URL的代码:function GetCurrentPageUrl(x : TActiveForm): String;
    var
      i_hd : IHTMLDocument2;
      i_oc : IOleContainer;
    begin
      Result:='';
      try
        if (x.ActiveFormControl.ClientSite.GetContainer(i_oc) = S_OK) and
           (i_oc.QueryInterface(IHTMLDocument2, i_hd) = S_OK) then
        begin
          Result:=String(i_hd.location.href);
        end
        else
          Exit;
      except
        Exit;
      end;
    end;