截取WM_HSCROLL和WM_VSCROLL的消息!!

ttoth12 2007-11-13 09:00:51
TEditWebBrowser = class(TWebBrowser)
private
{ Private declarations }
FParentForm:TWinControl;
FApplication:TApplication;
FOnMouseDown:TMouseDownEvent;
FOnMouseUp:TMouseUpEvent;
FOnMouseMove:TMouseMoveEvent;
FOnDblClick:TDblClickEvent;

FOnKeyDown:TKeyDownEvent;
FOnKeyUp:TKeyUpEvent;

FFocused:boolean;
FisShowSelfPopupMenu:boolean;
FWantReturns:boolean;

FShiftFoceed:boolean;
FScrollx:integer;//获得那个移动x的数值
FScrolly:Integer;//获得那个移动y的数值

function MsgMenuFunc(var MSG:TMessage):boolean;
procedure AppMessage(var Msg:TMsg;var Handled:Boolean);
//寻找顶层应用程序,以使之能通过Hook监视键盘和鼠标
function GetTApplication(F:TComponent):TApplication;

procedure WMKeyDown(var Message:TWMKeyDown);message WM_KEYDOWN;

procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;




procedure TEditWebBrowser.WMHScroll(var Message: TWMHScroll);

begin
self.FScrollx := Message.Pos;
showmessage('移动y');
end;

procedure TEditWebBrowser.WMVScroll(var Message: TWMVScroll);

begin
self.FScrollx := Message.Pos;
showmessage('移动x');
end;

TEditWebBrowser 是一个显示网页的控件,继承delphi的组件WebBrowser,显示网页,网页有时候超过那个屏幕大小,就会产生下拉滑块,但是我拖动那个边界的移动滑块,好像并不触发那个事件,请问各位大侠这个是为什么!!
...全文
580 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Elysium 2007-11-20
  • 打赏
  • 举报
回复
还不行?
发了这么多帖子
Elysium 2007-11-14
  • 打赏
  • 举报
回复
com组件是基于事件的,不是基于消息
问========================================

我使用webbrowser控件,但是想用自己的滚动条,但不知如何得到webbrowser中滚动条的长度,怎么办?谢谢!!

2004-10-24

答========================================

抱歉拖了很久才回复你的问题。
WebBrowser的滚动条不是一般的Windows滚动条,用GetScrollPos或GetScrollInfo等API是不能访问的。下面的代码演示了在VC中如何通过HTML接口来访问浏览器的滚动条。

HRESULT hr;
IDispatch *pDisp = GetHtmlDocument();
ASSERT( pDisp ); //if NULL, we failed

// 获得Html文档指针
IHTMLDocument2 *pDocument = NULL;
hr = pDisp->QueryInterface( IID_IHTMLDocument2, (void**)&pDocument );
ASSERT( SUCCEEDED( hr ) );
ASSERT( pDocument );

IHTMLElement *pBody = NULL;
hr = pDocument->get_body( &pBody );
ASSERT( SUCCEEDED( hr ) );
ASSERT( pBody );

// 从body获得IHTMLElement2接口指针,用以访问滚动条
IHTMLElement2 *pElement = NULL;
hr = pBody->QueryInterface(IID_IHTMLElement2,(void**)&pElement);
ASSERT(SUCCEEDED(hr));
ASSERT( pElement );

// 向下滚动100个像素
pElement->put_scrollTop( 100 );

// 获得文档真正的高度,不是可见区域的高度
long scroll_height;
pElement->get_scrollHeight( &scroll_height );

// 获得文档真正的宽度,不是可见区域的宽度
long scroll_width;
pElement->get_scrollWidth( &scroll_width );

// 获得滚动条位置,从顶端开始
long scroll_top;
pElement->get_scrollTop( &scroll_top );

引用地址:FAQ:如何访问WebBrowser的滚动条
ysai 2007-11-14
  • 打赏
  • 举报
回复
TWebBrowser只是封装了COM组件,并不是普通的Window,你这样不行的
要截获它的消息,得了解它的接口,好象用js代码可以做到
oushengfen 2007-11-14
  • 打赏
  • 举报
回复
很多的组件截取这两个消息都不是简单地能截取的,一般采用的方法进行方法替换,网上搜索一下,很多的。
ttoth12 2007-11-14
  • 打赏
  • 举报
回复
谢谢楼上,我去试验一下!!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧