问题是这样的:我想用WebBrowser掉入一个页面后把VSCROLL放到最下面,试过很多方法就是不行
就是下面这句也只是到倒数第二行,没有到最低一行,sendMessage(GetWindow(GetWindow(WebBrowser1.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);My God ~~~~ Help me

解决方案 »

  1.   

    PostMessage(GetWindow(GetWindow(WebBrowser1.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);
      

  2.   

    PostMessage 用过了,单独用还可以,但是一但修改页面再次掉入用
    WebBrowser1.Refresh;就没有效果了,一点反应没有!??真TMD怪了!!
      

  3.   

    PostMessage 没有用 SendMessage 效果好!!!?怪!!!
      

  4.   

    WebBrowser1.Refresh;过后应该再调用:PostMessage(GetWindow(GetWindow(WebBrowser1.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);这样不行?
      

  5.   

    我发现我这里这样用还可以,只是有点闪:
      IE.Refresh;
      sendMessage(GetWindow(GetWindow(IE.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);
    而这样不行:
      IE.Refresh;
      postMessage(GetWindow(GetWindow(IE.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);
      

  6.   

    IE.Refresh;
      sendMessage(GetWindow(GetWindow(IE.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);
    我是这样用的,可VSCROLL不是在最低下,是在倒数第二行!!!O..My God~~
      

  7.   

    奇怪,我这里VSCROLL到了最低下,只是程序有点闪:(
      

  8.   

    闪不闪的没有关系,对了我的页面里有图片,不只是文字
    页面也不是HTML,而是XML+XSL为什么到不了最后一行??!!!我找!!我找!!!我找找找!!!!
      

  9.   

    要不要帮我试试,给个Email我把源程序和相应资源发给你 ^^  help me !
      

  10.   

    我找了一点问题,问题出在  ModifyXML('aaa'); //修改XML,加入新的元素; <-------这里
      IE.Refresh; //重新掉入;
      sendMessage(GetWindow(GetWindow(IE.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);如果不修改,没有问题,但是修改(加入)几行就到倒数第几行!!?
    可不修改XML文件我的功能又实现不了!我就是要加新元素吗!!还发现一个好玩的
      ModifyXML('aaa'); //修改XML,加入新的元素; 
      IE.Refresh; //重新掉入;
      IE.Refresh2; //好玩死了;
      sendMessage(GetWindow(GetWindow(IE.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);想象很好玩 hehe^^
      

  11.   

    修改后重新载入网页重新POST或SEND
      

  12.   

    试试:IE.OleObject.document.parentWindow.scrollTo(MaxInt, MaxInt);
      

  13.   

    谢谢大家,多给点资料......和方法,我也在试ing.....两天了,都没有解决... :(
      

  14.   

    每次刷新后不变的只是ScrollBar的位置Position,由于加入新元素后,网页整体高度加大,但ScrollBar的位置又没有改变,于是导致了这种结果!至于PostMessage效果不如用SendMessage是因为,PostMessage只是将消息放到消息队列中,不确定何时及是否处理.而用SendMessage是立即执行,只有消息被处理后才会返回.
      

  15.   

    to ehom(?!)     谢谢ehom(?!)的讲解,可用什么方法实现我的功能呢??请大家gz......完成以后我送给大家我做的这个东东,很不错的 ^^!
      

  16.   

    这种现像就是.....
       你在CSDN中打开一帖子,打ScrollBar拉到一定位置,这时按下IE的刷新!!!这时你就看到效果了,页面重新掉入后,ScrollBar还是在你拉到的那个位置。
        我的问题就是类似这种现像,怎么解决呢??????? :((~~
      

  17.   

    在Refrash后,马上调用不管是SendMessage(GetWindow(GetWindow(WebBrowser1.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);还是WebBrowser1.OleObject.document.parentWindow.scrollTo(MaxInt, MaxInt);都是没有效果的,因为此时页面并未马上更新!可以这样试试,在refrash后,改变一标志变量的值,接着在OnDownloadComplete中判断该标志变量的值,如果改变了就执行滚动条置底的语句,并恢复标志变量的初值!
      

  18.   

    OK 谢谢 Ehom(?!) 我试试
      

  19.   

    有修改后调一下
    Application.ProcessMessages;//和IE版本相关的,5.5以下的IE有很多问题
      

  20.   

    用ehom(?!)的方法试过了,第一次修改后成功了,但以后再修改就又成以前那种现像了 :((to li_zhifu(东北人)
      我的IE是6.0+Sp
    你的方法也试过了,第一次修改都没有通过 :(我也正在试其它的方法,有什么进展我会通知大家,做完后进行总结,为以后的弟兄们积累点经验吧
      

  21.   

    修改后保存修改,重新载入网页,POST或SENDMESSAGE
      

  22.   

    to cg1120(代码最优化-§新年祝福你,好运伴着你§)
    就是这样做的,不行 :-(
    ehom(?!)的方法,第一次修改后成功了,以后再修改ScrollBar就不动了,一直在那个地方不动了??!!
      

  23.   

    调试一下,看看是SENDMESSAGE没有发出去还是其它什么原因
      

  24.   

    关于此问题的总结:    问题现像如下:
        
        我在修改了一个页面后(加入了一行元素),然后再调入
    WebBrowser时我想叫WebBrowser的VSCROLL放到最后一行,以
    便叫用户看到我新加入的元素,但就是用什么方法也到不了最
    后一行,最好的情况是到倒数第二行,总是最后一行显示不出
    来!
        程序流程为:
        begin
          // 修改页面;
          // 刷新页面;
          // 发送VSCROLL到最后一行的消息;
        end;    先后进行了多次试验,分别用
        SendMessage(GetWindow(GetWindow(WebBrowser1.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);
        PostMessage(GetWindow(GetWindow(WebBrowser1.Handle, GW_CHILD), GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0);
        IE.OleObject.document.parentWindow.scrollTo(MaxInt, MaxInt);
        进行了试验,发现Send比Post效果要好,ehom(?!) 进行了讲解,他说:
        “至于PostMessage效果不如用SendMessage是因为,PostMessage只是将消息放到消息队列中,不确定何时及是否处理.而用SendMessage是立即执行,只有消息被处理后才会返回.”
        且从ehom(?!) 的分析中也明白了一点:“我钻牛角了:(”(多线程我都试了)
        重新修改流程后如下,效果也有了一点起色,最起马第一次修改后可以通过了
        begin
          //修改页面;
          //刷新页面;
        end;
        在OnDownloadComplete中发送消息,结果,是第一次可以,再来就完蛋了,VSCROLL就停在那里不动了!??
        后来在无望的情况下,看见键盘可以叫IE页面滚动!!!哈哈哈哈(真是SB呀,这时候才想出来!)
        OnDownloadComplete中的代码如下:
    begin
      if webbrowser1.Document <> nil then  //判断内容是否为空
        with webbrowser1.Application as IOleobject do  // 使用DoVerb使WebBrowser1获得焦点
          DoVerb(OLEIVERB_UIACTIVATE, nil, webbrowser1, 0, Handle, GetClientRect);
      keybd_event( VK_DOWN, MapVirtualKey( VK_DOWN, 0 ), 0 , 0 );     // 发送键盘消息
      keybd_event( VK_DOWN, MapVirtualKey( VK_DOWN, 0 ), KEYEVENTF_KEYUP , 0 );
      sendMessage(GetWindow(GetWindow(webbrowser1.Handle,GW_CHILD),GW_CHILD), WM_VSCROLL, SB_BOTTOM, 0); //发送到底消息
    end;运行时还要在Uses中加入ActiveX单元
    Delphi的帮助中是这样对DoVerb进行说明的:Requests that the OLE object perform some action.procedure DoVerb(Verb: Integer);DescriptionCall DoVerb to request that the OLE object perform one of the actions listed by the ObjectVerbs property. OLE defines several verbs, such as ovShow (to display the OLE object) and ovPrimary (the default action, usually to activate the OLE object). OLE objects can also define their own custom verbs. Use the ObjectVerbs property to get a list of those custom verbs.我打开ActiveX单元文件找到下面些值
    { from OLE2.H }
      {$EXTERNALSYM OLEIVERB_PRIMARY}
      OLEIVERB_PRIMARY          = 0;
      {$EXTERNALSYM OLEIVERB_SHOW}
      OLEIVERB_SHOW             = -1;
      {$EXTERNALSYM OLEIVERB_OPEN}
      OLEIVERB_OPEN             = -2;
      {$EXTERNALSYM OLEIVERB_HIDE}
      OLEIVERB_HIDE             = -3;
      {$EXTERNALSYM OLEIVERB_UIACTIVATE}
      OLEIVERB_UIACTIVATE       = -4;
      {$EXTERNALSYM OLEIVERB_INPLACEACTIVATE}
      OLEIVERB_INPLACEACTIVATE  = -5;
      {$EXTERNALSYM OLEIVERB_DISCARDUNDOSTATE}
      OLEIVERB_DISCARDUNDOSTATE = -6;
    .......希望对大家以后的开发有所帮助=====================================问题没有真正解决!!!!!!!最后谢谢大家的积极搀合!!!!特别感谢:
    cg1120(代码最优化-§新年祝福你,好运伴着你§) 
    westfly(西翔)     
    ehom(?!) 
      

  25.   

    算了,我结帖子了,分要给我老婆点,^^! 没办法,谁叫我爱她呢 hehe^^