Delphi的TWebBrowser编程综述(2)

2008-04-09 04:21:21来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


                  态和执行命令的方法有两种(以复制为例,剪切、粘贴和全选分别将各自的关键字替
                  换即可,分别为CUT,PASTE和SELECTALL):
      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)。
      A、读取当前页面字体大小。
        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;
      B、设置页面字体大小。
        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、添加到收藏夹和整理收藏夹
        const
        CLSID_ShellUIHelper: TGUID =
   ''''{64AB4BB7-111E-11D1-8F79-00C04FC2FBE1}'''';
       var
        p:procedure(Handle: THandle; Path: PChar); stdcall;
       procedure TForm1.OrganizeFavorite(Sender: Tobject);
       var
        H: HWnd;
       begin
        H := LoadLibrary(PChar(''''shdocvw.dll''''));
        if H <> 0 then
        begin
       p := GetProcAddress(H, PChar(''''DoOrganizeFavDlg''''));
         if Assigned(p) then p(Application.Handle,
   PChar(FavFolder));
        end;
        FreeLibrary(h);
       end;
       
       procedure TForm1.AddFavorite(Sender: TObject);
       var
        ShellUIHelper: ISHellUIHelper;
        url, title: Olevariant;
       begin
        Title := Webbrowser1.LocationName;
        Url := Webbrowser1.LocationUrl;
        if Url <> '''''''' then
        begin
         ShellUIHelper := CreateComObject(CLSID_SHELLUIHELPER) as
   IShellUIHelper;
         ShellUIHelper.AddFavorite(url, title);
        end;
       end;
     用上面的通过ISHellUIHelper接口来打开“添加到收藏夹”对话框的方法比较简单,但是有个缺陷,就是打开的窗口不是模式窗口,而是独立于应用程序的。可以想象,如果使用与OrganizeFavorite过程同样的方法来打开对话框,由于可以指定父窗口的句柄,自然可以实现模式窗口(效果与在资源管理器和IE中打开“添加到收藏夹”对话框相同)。问题显然是这样的,上面两个过程的作者当时只知道shdocvw.dll中DoOrganizeFavDlg的原型而不知道DoAddToFavDlg的原型,所以只好用ISHellUIHelper接口来实现(或许是他不够严谨,认为是否是模式窗口无所谓?)。
     下面的过程就告诉你DoAddToFavDlg的函数原型。需要注意的是,这样打开的对话框并不执行“添加到收藏夹”的操作,它只是告诉应用程序用户是否选择了“确定”,同时在DoAddToFavDlg的第二个参数中返回用户希望放置Internet快捷方式的路径,建立.Url文件的工作由应用程序自己来完成。
       procedure TForm1.AddFavorite(IE: TEmbeddedWB);
        procedure CreateUrl(AUrlPath, AUrl: PChar);
        var
         URLfile: TIniFile;
        begin
         URLfile := TIniFile.Create(String(AUrlPath));
        ?RLfile.WriteString(''''InternetShortcut'''', ''''URL'''',
   String(AUrl));
        ?RLfile.Free;
        end;
       var

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:使用break与continue语句和for与continue语句

下一篇:Deiphi编译优化导致的死循环