TWebBrowser编程

来源:互联网 发布:手机淘宝2017官方版 编辑:程序博客网 时间:2024/05/17 00:12

1.初始化和终止化

uses ActiveX;

initialization
  OleInitialize(nil);
finalization
  try
    OleUninitialize;
  except
  end;

2.EmptyParam

EmptyParam是一个公用的Variant空变量,不要对它赋值
var
  t:OleVariant;
begin
  webbrowser1.Navigate(edit1.text,t,t,t,t);
  {这句可以写成webbrowser1.Navigate(edit1.text,EmptyParam,EmptyParam,EmptyParam,EmptyParam);}
end;

3.命令操作

常用的命令操作用ExecWB方法即可完成
procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT); overload;
procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT; var pvaIn: OleVariant); overload;
procedure ExecWB(cmdID: rOLECMDID; cmdexecopt: OLECMDEXECOPT; var pvaIn: OleVariant; var pvaOut: OleVariant); overload;

打开:CommandID为OLECMDID_OPEN
另存为:ExecWB(OLECMDID_SAVEAS,OLECMDEXECOPT_DODEFAULT, EmptyParam, EmptyParam);
打印:ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, EmptyParam, EmptyParam);
打印预览:if QueryStatusWB(OLECMDID_PRINTPREVIEW)=3 then ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT, EmptyParam,EmptyParam);
页面设置:ExecWB(OLECMDID_PAGESETUP, OLECMDEXECOPT_DODEFAULT, EmptyParam, EmptyParam);
剪切:ExecWB(OLECMDID_CUT,OLECMDEXECOPT_DODEFAULT);
复制:ExecWB(OLECMDID_COPY,OLECMDEXECOPT_DODEFAULT);
粘贴:ExecWB(OLECMDID_PASTE,OLECMDEXECOPT_DODEFAULT);
全选:ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_DODEFAULT);

  A.使用TWebBrowser的QueryStatusWB方法
    if(QueryStatusWB(OLECMDID_COPY)=OLECMDF_ENABLED or OLECMDF_SUPPORTED) then
      ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, EmptyParam, EmptyParam);
  B.用IHTMLDocument2的QueryCommandEnabled方法
    var
      Doc: IHTMLDocument2;
    begin
      Doc :=WebBrowser1.Document as IHTMLDocument2;
      if Doc.QueryCommandEnabled('Copy') then
        Doc.ExecCommand('Copy',false,EmptyParam);
    end;

4.字体大小

类似“字体”菜单上的从“最大”到“最小”五项(对应整数0~4,Largest等假设为五个菜单项的名字,Tag属性分别设为0~4)。

读取当前页面字体大小。
  var
    t: OleVariant;
  Begin
    WebBrowser1.ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, EmptyParam,t);
    case t of
      4: Largest.Checked :=true;
      3: Larger.Checked :=true;
      2: Middle.Checked :=true;
      1: Small.Checked :=true;
      0: Smallest.Checked :=true;
    end;
  end;

设置页面字体大小。
  Largest.Checked :=false;
  Larger.Checked :=false;
  Middle.Checked :=false;
  Small.Checked :=false;
  Smallest.Checked :=false;
  TMenuItem(Sender).Checked :=true;
  t :=TMenuItem(Sender).Tag;
  WebBrowser1.ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER,t,t);

5.使WebBrowser获得焦点

  uses MSHTML;

方法一:
  if WebBrowser1.Document <> nil then
    IHTMLWindow2(IHTMLDocument2(WebBrowser1.Document).ParentWindow).focus;

方法二:
  procedure TForm1.SetFocusToDoc;
  begin
    if WebBrowser1.Document <> nil then
      with WebBrowser1.Application as IOleobject do
        DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser1, 0, Handle, GetClientRect);
  end;

6.点击提交按钮

A.在Delphi 5光盘上的Info/Extras/SendKeys目录下有一个SndKey32.pas文件,其中包含了两个函数SendKeys和AppActivate,我们可以用SendKeys函数来向WebBrowser发送回车键
Sendkeys('~',true);

B.在OnMessage事件中将接受到的键盘消息传递给WebBrowser。
procedure TMainForm.ApplicationEvents1Message(var Msg: TagMSG;
  var Handled: Boolean);
const
  StdKeys = [VK_TAB, VK_RETURN];
  ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT];
  fExtended = $01000000;
begin
  Handled := False;
  with Msg do
    if ((Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST)) and
      ((wParam in StdKeys) or (GetKeyState(VK_Control) < 0) or
      (wParam in ExtKeys) and ((lParam and fExtended) = fExtended)) then
    try
      if IsChild((PCT.ActivePage as TTabs).FMIE.handle, hWnd) then
      begin
        with (PCT.ActivePage as TTabs).FMIE.Application as IOleInPlaceActiveObject do
          Handled := (TranslateAccelerator(Msg) = S_OK);
        if not Handled then
        begin
          Handled := True;
          TranslateMessage(Msg);
          DispatchMessage(Msg);
        end;
      end;
    except
    end;
end;

7.直接从TWebBrowser得到网页源码及Html

IHtmlDocument2(WebBrowser1.Document).Body.OuterHtml;

8.查找功能

var
  Doc: IHtmlDocument2;
  TxtRange: IHtmlTxtRange;
begin
  Doc :=WebBrowser1.Document as IHtmlDocument2;
  webbrowser1.ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_DODEFAULT);
  TxtRange :=Doc.Selection.CreateRange as IHtmlTxtRange;
  TxtRange.findText('Text to be searched',0,0);
  TxtRange.Select;
end;

9.提取网页中所有链接

procedure TMainForm.GetLinks;
var
  doc: IHTMLDocument2;
  all: IHTMLElementCollection;
  len, i: Integer;
  item: OleVariant;
begin
  FormLink.lstLink.Clear;
  try
    doc := ((PCT.ActivePage as TTabs).FMIE.Document) as IHTMLDocument2;
  except
    Exit;
  end;
  all := doc.Links;
  len := all.Length;
  for i := 0 to len - 1 do begin
    item := all.item(i, varempty); //EmpryParam亦可
    FormLink.lstLink.Items.Add(item);
  end;
  FormLink.Show;
end;


10.设置TWebBrowser的编码

procedure SetCharSet(AWebBrowser: TWebBrowser; ACharSet:String);
var
  RefreshLevel: OleVariant;
Begin
  IHTMLDocument2(AWebBrowser.Document).Set_CharSet(ACharSet);
  RefreshLevel :=7;              //这个7应该从注册表来,帮助有Bug。
  AWebBrowser.Refresh2(RefreshLevel);
End;

11.转入IHTMLDocument接口

uses mshtml;
var doc:IHTMLDocument2;
doc:=webbrowser1.document as IHTMLDocument2;

12.TWebBrowser控件说明

方法:
GoBack   相当于IE的“后退”按钮,使你在当前历史列表中后退一项
GoForward  相当于IE的“前进”按钮,使你在当前历史列表中前进一项 
GoHome   相当于IE的“主页”按钮,连接用户默认的主页 
GoSearch  相当于IE的“搜索”按钮,连接用户默认的搜索页面 
Navigate  连接到指定的URL 
Refresh   刷新当前页面
Refresh2  同上,只是可以指定刷新级别,所指定的刷新级别的值来自RefreshConstants枚举表,该表定义在ExDisp.h中,可以指定的不同值如下:
 REFRESH_NORMAL  执行简单的刷新,不将HTTP pragma: no-cache头发送给服务器
 REFRESH_IFEXPIRED 只有在网页过期后才进行简单的刷新
 REFRESH_CONTINUE 仅作内部使用。在MSDN里写着DO NOT USE! 请勿使用
 REFRESH_COMPLETELY 将包含pragma: no-cache头的请求发送到服务器
Stop   相当于IE的“停止”按钮,停止当前页面及其内容的载入

属性:
Application  如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDispatch)。如果在宿主对象中自动化对象无效,这个程序将返回WebBrowser控件的自动化对象 
Parent   返回WebBrowser控件的父自动化对象,通常是一个容器,例如是宿主或IE窗口 
Container  返回WebBrowser控件容器的自动化对象。通常该值与Parent属性返回的值相同 
Document  为活动的文档返回自动化对象。如果HTML当前正被显示在WebBrowser中,则Document属性提供对DHTML Object Model的访问途径 
TopLevelContainer   返回一个Boolean值,表明IE是否是WebBrowser控件顶层容器,是就返回true
Type   返回已被WebBrowser控件加载的对象的类型。例如:如果加载.doc文件,就会返回Microsoft Word Document 
Left   返回或设置WebBrowser控件窗口的内部左边与容器窗口左边的距离 
Top   返回或设置WebBrowser控件窗口的内部左边与容器窗口顶边的距离 
Width   返回或设置WebBrowser窗口的宽度,以像素为单位 
Height   返回或设置WebBrowser窗口的高度,以像素为单位 
LocationName  返回一个字符串,该字符串包含着WebBrowser当前显示的资源的名称,如果资源是网页就是网页的标题;如果是文件或文件夹,就是文件或文件夹的名称 
LocationURL  返回WebBrowser当前正在显示的资源的URL 
Busy   返回一个Boolean值,说明WebBrowser当前是否正在加载URL,如果返回true就可以使用stop方法来撤销正在执行的访问操作 

事件
BeforeNavigate2  导航发生前激发,刷新时不激发
CommandStateChange 当命令的激活状态改变时激发。它表明何时激活或关闭Back和Forward菜单项或按钮 
DocumentComplete 当整个文档完成是激发,刷新页面不激发
DownloadBegin  当某项下载操作已经开始后激发,刷新也可激发此事件
DownloadComplete 当某项下载操作已经完成后激发,刷新也可激发此事件
NavigateComplete2 导航完成后激发,刷新时不激发
NewWindow2  在创建新窗口以前激发
OnFullScreen  当FullScreen属性改变时激发。该事件采用VARIENT_BOOL的一个输入参数来指示IE是全屏显示方式(VARIENT_TRUE)还是普通显示方式(VARIENT_FALSE) 
OnMenuBar  改变MenuBar的属性时激发,标示参数是VARIENT_BOOL类型的。VARIANT_TRUE是可见,VARIANT_ FALSE是隐藏 
OnQuit   无论是用户关闭浏览器还是开发者调用Quit方法,当IE退出时就会激发 
OnStatusBar  与OnMenuBar调用方法相同,标示状态栏是否可见。 
OnToolBar  调用方法同上,标示工具栏是否可见。
OnVisible  控制窗口的可见或隐藏,也使用一个VARIENT_BOOL类型的参数 
StatusTextChange 如果要改变状态栏中的文字,这个事件就会被激发,但它并不理会程序是否有状态栏
TitleChange  网页标题有效或改变时激发 

 
原创粉丝点击