如何把TWEBBROWER中的竖滚动条去掉(100分)

  • 主题发起人 主题发起人 redwavehb
  • 开始时间 开始时间
R

redwavehb

Unregistered / Unconfirmed
GUEST, unregistred user!
比如我的HTML页面没有比TWEBBROWER的界面大,但TWEBBROWER还显示竖滚动条,如何去掉。
 
思路:(我用以下的方法去掉了TListView的ScrollBar)
1) 想办法取Flat Scroll Bars的handle
2) 在TWebBrowser的Resize时,用以下函数隐藏Scrollbar

BOOL FlatSB_ShowScrollBar(
HWND hwnd,
int code,
BOOL fShow
);

 
思路之二:
TEdit 的祖先类依次是:
TObject -> TPersistent -> TComponent -> TControl -> TWincontrol -> TCustomEdit
TWebBrowser 的祖先类依次是:
TObject -> TPersistent -> TComponent -> TControl -> TWincontrol -> TOleControl,
为什么 TEdit 没有缺省的 ScrollBar,而 TWebBrowser 有呢?
肯定是 TOleControl 或 TWebBrowser 定义了缺省的 ScrollBar。
只要找到加入了 Scrollbar 的方法,Override 它就可以了,
Override 的时候别忘了 inherited;
 
TWEBBROWER是一个ACTIVEX控件。上两种方法都无法实现,希望对WINDOWS编程较熟的人回答
 
思路之二的方法是行不通的,因为ScrollBar是Ie WebBrowser内部封装的,
在delphi根本就不存在可Override的方法。TEdit和TMemo其实在Window系统是同一
WindowClass,只不过Delphi为方便操作Line包装为两个控件。
 
用接口。
IDocHostUIHandler = interface(IUnknown)
['{bd3f23c0-d43e-11cf-893b-00aa00bdce1a}']
function ShowContextMenu(const dwID: DWORD; const ppt: PPOINT;
const pcmdtReserved: IUnknown; const pdispReserved: IDispatch): HRESULT; stdcall;
function GetHostInfo(var pInfo: TDOCHOSTUIINFO): HRESULT; stdcall;
function ShowUI(const dwID: DWORD; const pActiveObject: IOleInPlaceActiveObject;
const pCommandTarget: IOleCommandTarget; const pFrame: IOleInPlaceFrame;
const pDoc: IOleInPlaceUIWindow): HRESULT; stdcall;
function HideUI: HRESULT; stdcall;
function UpdateUI: HRESULT; stdcall;
function EnableModeless(const fEnable: BOOL): HRESULT; stdcall;
function OnDocWindowActivate(const fActivate: BOOL): HRESULT; stdcall;
function OnFrameWindowActivate(const fActivate: BOOL): HRESULT; stdcall;
function ResizeBorder(const prcBorder: PRECT;
const pUIWindow: IOleInPlaceUIWindow;
const fRameWindow: BOOL): HRESULT; stdcall;
function TranslateAccelerator(const lpMsg: PMSG; const pguidCmdGroup: PGUID;
const nCmdID: DWORD): HRESULT; stdcall;
function GetOptionKeyPath(var pchKey: POLESTR; const dw: DWORD): HRESULT; stdcall;
function GetDropTarget(const pDropTarget: IDropTarget;
out ppDropTarget: IDropTarget): HRESULT; stdcall;
function GetExternal(out ppDispatch: IDispatch): HRESULT; stdcall;
function TranslateUrl(const dwTranslate: DWORD; const pchURLIn: POLESTR;
var ppchURLOut: POLESTR): HRESULT; stdcall;
function FilterDataObject(const pDO: IDataObject;
out ppDORet: IDataObject): HRESULT; stdcall;
end; // IDocHostUIHandler

EmbeddedWB的OnGetHostInfo可以做到。
http://www.intelligo.net/iedelphi/ongethostinfo.htm
 
To redwavehb:
的确有一个 TWEBBROWER 的 ACTIVEX控件,那是 IE 带的,Delphi 5 自带了 TWebBrowser
的 VCL 控件,有源码的。
利用 TWebBrowser 写一个自己的 WebBrowser 控件应该可以解决这个问题。

To zhongs:
你说得这么肯定,你能肯定你的看法吗?在回答这个问题之前,你有没有查资料来确认你的答
案呢?
看了这个问题后,我又去看了 TControl, TWinControl, TOleControl, TWebBrowser,
TCustomEdit 的 VCL 源代码,这个思路我不是随便说的。
 
CathyEagle能说的清楚些,如能传我一可行的例程,100分归你
 
EmbeddedWB没找到吗?
http://www.intelligo.net/iedelphi/ongethostinfo.htm
 
to 940801:
不知应override哪方法,或响应哪条Message,请说出来吧

我使用下面这可把TreeView的ScrollBar可去掉:
FlatSB_ShowScrollBar(TreeView1.Handle, SB_BOTH, False);


我在ie4取TWebBrowser.HWND会报错,不知是什么原因:
FlatSB_ShowScrollBar(WebBrowser1.HWND, SB_HORZ , False);
 
利用网页的分帧可以做到:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<frameset framespacing="0" frameborder="0" cols="*,0">
<frame name="main"src="1.html" scrolling="no" noresize>
<frame name="other" src="null.htm" noresize></frameset>
</html>
你把要显示的改为1.html,这样显示出来就没有滚动框了
 
CathyEagle,我已下载到TEmbeddedWB,但没有帮助,你能给我一个例程吗,我的信箱为:
redwavehb@163.net
 
>>我的HTML页面没有比TWEBBROWER的界面大
真要如此,就好办了。
var doc,all,item:olevariant;
begin
doc:=webbrowser.document;
all:=doc.all;
item:=all.tags('scroll');
item:=item.item(0);
item.innertext:='no';
end;
或者在网页里改:《body scroll="no"》,仅对你的前提:“我的HTML页面没有比TWEBBROWER的界面大”有效
要想有通用性,还是CathyEagle大虾的方法好。
 
接受答案了.
 
后退
顶部