为什么不试着用ie5自己的提供的ActiveX控件呢?

解决方案 »

  1.   

    delphi5.0中webbrowser就是引用好的ie5的控件
      

  2.   

    因为我没有装delphi5所以没有办法试.
    如果实在不行,先这样交货再说:
    既然用鼠标可以setfocus那你就用程序把鼠标移过去,点一下:)
      

  3.   

    我现在不能用mouse_event来模拟鼠标点击,因为可能会点中超级链结,而且我也没试成功用法
      

  4.   

    听起来有点搞笑,既然可以收到SET_FOCUS的消息,你就不能用VB把那个控件再封装一下,再在Delphi中用
      

  5.   

    用vb封装,或vb来调用delphi写的程序都使程序包含的代码更加复杂,vb封装的activex控件虽然解决了眼前的问题,但接下来会不会遇到其他的这种“小”问题,就很难讲,何况使用什么语言我没有权力选择。
      

  6.   

    先放一个可以获得focus的东西再
    SelectNext(Sender as TWinControl,True,True);
      

  7.   

    看来这个东西只能当做一个bug来处理了,虽然晚饭没有吃到,但饼干还是吃了几片,但真的想知道解决的方案是什么。
    感谢各路高手帮忙找答案。
      

  8.   

    tolewincontrol类的setfocus方法是虚拟的,
    需重载。delphi引入webbrowser时未将其基类
    引入,setfocus未被重载。
    可能要对引入所用pas修改
      

  9.   

    Delphi中,Form有一个公开属性ActiveControl,即可设置Form显示时某个具体拥有输入焦点的控件,将其设置成IE Browser在试试?
      

  10.   

    Delphi中,Form有一个公开属性ActiveControl,即可设置Form显示时某个具体拥有输入焦点的控件,将其设置成IE Browser再试试?
      

  11.   

    对不起,放假回家,上网条件不好,现在才能有机会回信,首先我暂时没有环境试(要上班才能试),不过lin的方法可能行,但当用户点击超链后,webbrowser可能会失去焦点,不知lin兄可否试过这种情况。至于darkwing兄的办法应该是非常好,但应该都需要使用winapi函数setfocus,我向webbrowser的三层子窗口都用过,但没有效果。这个问题真的不知是ie的bug还是delphi的bug还是其他什么鬼东西,令人头大如斗。
      

  12.   

    >>lin的方法可能行
    我试过没用:)
      

  13.   

        在Windows环境中,由于多任务的关系,实际上只有活动窗口才能拥有输入焦点。如果想用户点击超链后WebBrowser仍拥有输入焦点,可接管Form的Deactivate事件,即当活动Form失去输入焦点时,再‘抢’回来,如何?
        其实WebBrowse只是一个容器,跟Form一样,真正拥有输入焦点的是WebBrowse中的条目,如Link、Edit等。
      

  14.   

    Try TEmbedWeb(呵呵,好象是这么写的),他的IE控件里有一个setFocus方法,可以将焦点聚集过来。不过这么用还是很危险,TWebbrowser本身在Delphi里使用会有内存泄露,所以,很容易造成不稳定,不过,只要你不是动态创建/释放基本问题不是很大。
      

  15.   

    activex 控件有不同开发环境所能得到的属性方法不同的特点。
    delphi编的控件在vb、vc中也不能使用完全。
    delphi自带的activex page中chartfx也不能setfocus。
      

  16.   

    最初,我只以为用vb写的带datasource控件才不能在delphi中使用,但当实验了几个控件后,发现不同语言写的activex并不象microsoft所说的那么通用,delphi也没有说的完全支持activex那么好.大家都知道没有winapi不能干的事情,没有hook不能跟踪的程序.但不同的开发环境下显然调用的api不同.我这次碰到的这个问题应该是开发环境引起来的.
    webbrowser控件第一层是activex容器,第二层activex窗体,最里层应该是view的窗口,而browser中的超链、图片等用findwindowex根本找不到句柄,无法设置焦点。
    象vb中对该控件的setfocus会加点东西(虽然不知是什么,但肯定有不同),delphi只是按照activex控件微软定义的接口来调用,自然会少点东西。
    从activex的定义上讲,这种东西应该是微软的bug,但如果从vb、vc的角度来看,微软弥补了这种东西。
    不管是谁的问题,倒霉的是我们这些所谓的第三方开发人员,没有内核资料,有时还要应付不同厂家产品的兼容问题。
      

  17.   

    hehe,我写了一个程序可以自动点击webbrowser里的超联
    实际上这个程序用到了ihtmldocument2的接口
    象你那样想简单的通过twebbrowser本身提供的method是不可能的
    如果你想要的话,请帮我当几个文件,我连不上去。
    如何,愿意的话发mail给我[email protected]
      

  18.   

    这里有一个从德国下载的资料。不过我自己也没有试过,不知道有没有帮助。...den Internet Explorer mit OLE steuern ? uses comobj; procedure OpenIE(aURL: string); 
    var 
      IE        : Variant; 
      WinHanlde : HWnd;  
    begin  
      if( VarIsEmpty(IE) )then 
      begin  
        IE := CreateOleObject('InternetExplorer.Application'); 
        IE.Visible := true;  
        IE.Navigate(aURL); 
      end  
      else  
      begin  
        WinHanlde := FindWIndow('IEFrame', nil); 
        if (0 <> WinHanlde) then 
        begin  
          IE.Navigate(aURL);  
          SetForegroundWindow(WinHanlde);  
        end  
        else 
          ShowMessage('Can''t open IE !'); 
      end; 
    end;  procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      OpenIE('http://www.swissdelphicenter.ch'); 
    end; 
      

  19.   

    呵呵,这个问题终于用其它更爽的办法解决了,就是直接操纵里面的dom元素。anyway,thank for cybercake。maybe i no more a delpho programmer.oicq: 1766598
    mail: [email protected]
      

  20.   

    if WebBrowser1.Document<>nil then 
      with WebBrowser1.Application as IOleObject do
        Doverb(OleIVERB_UIACTIVATE,nil,nil,0,handle,GetClientRect);
      

  21.   

    哈!你肯定在做一个赚钱程序,你用的是和我一样的方法,不过我可以让大家屏幕上任何点击后不产生新的窗口而告诉广告程序有新窗口产生并且在任何环境下不论你是否是在word中,delphi中任何的应用程序中包括任何的对话框中均被广告条认为是在浏览器中工作一直计费正在测试敬请期待。
    还有你在遍历窗口查询子窗口时能否解决以下问题?
     
        我在编写一个窗口管理程序,其中当且仅当只有一个已知项即知道父窗口的句柄时(该窗口可能也是别的应用程序产生的,不一定知道它都有些什么样的窗口类型的子窗口控件),需要遍历该窗口中所拥有的全部子窗口,包括具有窗口句柄的控件型的子窗口。    当我用EnumWindows/EnumWindowProc函数或者通过循环用GetWindow/GetChildWindow实现程序时,发现两者实现的结果是相同的(不奇怪)
        但奇怪的是,如果在某具有父级关系的窗口中当放入了PageControl页控件时,如果这个控件的多页中某页在自定义函数执行前,尚没有一次被点击显示在最上页时,用以上方法是无法得到该PageControl页控件中子页的窗口句柄的。只有你将所有的子页都点激活一遍以后,再执行我的自定义函数才能通过以上函数找到它。
      请问:我如何才能编程实现不需人工激活就可以通过遍历得到如PageControl页的所有子页的控件句柄的?
      请问:我如何遍历得到窗口中所有存在的图形的句柄?图形按钮的句柄?菜单项的句柄?
      请问:有何种方法可以统一地得到某一窗口中有句柄类型的所有控件的句柄(包括子型窗口、图形、菜单。所有的。? 
    我的确是用EnumWindows函数和设定给它的回调函数EnumWindowProc,通过循环对进穷举枚举,但的确诸如PageControl或TabControl之类的多页的控件的所有子页中如果没有曾经被激活显示过一次以前,EnumWindows函数是无法找到这类控件的子型控件的窗口的句柄的,系统好象认为不存在其它未被激活的页的。 多谢!
      

  22.   

    而且当访问到有<textarea>的地方,也就是论坛写帖子的地方,回车就不管用了,
    不信可以试试
      

  23.   

    呵呵,在看msdn文挡时,上面说回车响应之类键盘事件可以随时打开或关闭的,但有些delphi的帖子说在delphi中照做可能会导致程序异常操作,哪位愿意试下。:)