关于TWebBrowser的问题,送分

时间:2021-05-13 21:29:49
web.execWB(OLECMDID_FIND,0,EMPTYPARAM,EMPTYPARAM);
我用以上语句想让TWebBrowser弹出查找对话框,但总是弹出系统的
查找文件文件夹对话框,并出现错误提示:
试图激活未注册的拖放目标,如何解决?

5 个解决方案

#1


webbrowser1.execweb(OLECMDID_FIND,OLECMDEXECOPT_DODEFAULT)

#2


to Daiver:
   老兄,你的语句跟我的一样,另外,OLECMDEXECOPT_DODEFAULT=0,

#3


加入webbrowser组件后,uses中加入一个单元,找到这个.pas文件,上面问题就可解决了!
请查看

#4


to yousoft:
   你没看清楚题吗?为什么这样说?

#5


我以前帮人解决过一个找到当前运行的IE,并调用IE的方法的问题。和你这个问题一样,我直接把上次的回答重贴一下:

另:关于控制IE的问题:
我做了一个小例子,也不是很好:
1,在CB中,Server面板上有封装了的IE,Word,Excel,Outlook等自动化对象,
可供我们直接使用,不过,其中的个别控件在2000上,似乎有点问题,我的解决办法:在CB中,Remove 这些包,然后我们自己引入类型库,重建一套!
    类型库是:
Microsoft Internet Controls(Version 1.1) 
      [c:\\winnt\system32\shdocvw.dll]
    引入时,在ClassNames的Memo中,在每个雷名后都加一个1,防止和原来的类名冲突:

TCppWebBrowser_V11
TCppWebBrowser1
TCppInternetExplorer1
TCppShellBrowserWindow1
TCppShellWindows1
TCppShellUIHelper1
TShellFavoritesNameSpace1
TCScriptErrorList1
TCppSearchAssistantOC1

   编译时,可能出现错误,最简单的办法是把出错的语句
注释掉,我检查过,这是几个IE的事件,我们基本用不着!
如果,想用,就得改正这几个错误!就是,把参数独立出来
,改成用指针调用!

2,第二步,使用ICppShellWindow1,获得系统中所有的Internet Explorer 对象,包括文件夹和IE等!
  检查是不是IE的办法是:
    GetApplicationName,看看是不是Explore.exe 还是....
    略去不写了!
   是IE的,使用ICppInternetExplorer1对象连接到他,之后,就可以调用各种方法对这个IE进行控制了!

窗体上,放着两个空件:
.h:
        TCppShellWindows1 *SW;
        TCppInternetExplorer1 *IE;

cpp:

//简单的例子:
        SW->Connect();
//debug:
//获取
        iCount=SW->Get_Count();
        if(iCount<1)
                {
                        ShowMessage("娘西皮,一个没有!");
                        return ;
                };
//我没做判断,直接连接到第一个实例上,
//您应该处理的
        TVariantInParam index(0);
//把IE和实例连接
        IE->ConnectTo(SW->Item(index));

//方法调用举例:获取URL
        WideString temp(IE->Get_LocationURL());
        ShowMessage(temp);

        //IE->Set_FullScreen(1);

//执行OLE Command举例:运行Save As 菜单
//设置存储路径
TVariant *path=new TVariant("c:\\ttt");
//调用,
        IE->ExecWB(
//OLE CMD ID
Shdocvw_tlb::OLECMDID_SAVECOPYAS, 
//执行开关:不显示界面,不过似乎有点问题,
//Save aS 对话框需要用户  安 确定 按钮
Shdocvw_tlb::OLECMDEXECOPT_DONTPROMPTUSER,
 path);
        delete path;

//连接文档:
//把文档连接到IE,说明参见 3
        Doc->ConnectTo(IE->Get_Document());
Doc----?????
具体的使用,我没写,如果想在
这一级上处理,非常繁琐,您需要
处理每个集合,比如框架,图片,
脚本,等等!


3:如果相对IE文档进行更深层次的控制还得在引入
    Microsoft Html Object Library(Version .)
    [C:\\winnt\system32\mshtml.tlb]
   注意:这个类型库包含了几百个接口,需要很长时间,不是死机!
   使用IHTMLDocument对象ConnectTo 到IE的文档上,
就可以对其进行操纵了!这个对象接口非常之多,参见MSDN
集合更多,我也没用过!,看来只能试一试了!具体参见MSDN
文档!

   我写了一个小例子,安以上步骤,能调出IE 的Save As
对话框!


注意:如果在您的机器上出现类没有注册,或根本就找不到
这两个类型库,请安装IE5

#1


webbrowser1.execweb(OLECMDID_FIND,OLECMDEXECOPT_DODEFAULT)

#2


to Daiver:
   老兄,你的语句跟我的一样,另外,OLECMDEXECOPT_DODEFAULT=0,

#3


加入webbrowser组件后,uses中加入一个单元,找到这个.pas文件,上面问题就可解决了!
请查看

#4


to yousoft:
   你没看清楚题吗?为什么这样说?

#5


我以前帮人解决过一个找到当前运行的IE,并调用IE的方法的问题。和你这个问题一样,我直接把上次的回答重贴一下:

另:关于控制IE的问题:
我做了一个小例子,也不是很好:
1,在CB中,Server面板上有封装了的IE,Word,Excel,Outlook等自动化对象,
可供我们直接使用,不过,其中的个别控件在2000上,似乎有点问题,我的解决办法:在CB中,Remove 这些包,然后我们自己引入类型库,重建一套!
    类型库是:
Microsoft Internet Controls(Version 1.1) 
      [c:\\winnt\system32\shdocvw.dll]
    引入时,在ClassNames的Memo中,在每个雷名后都加一个1,防止和原来的类名冲突:

TCppWebBrowser_V11
TCppWebBrowser1
TCppInternetExplorer1
TCppShellBrowserWindow1
TCppShellWindows1
TCppShellUIHelper1
TShellFavoritesNameSpace1
TCScriptErrorList1
TCppSearchAssistantOC1

   编译时,可能出现错误,最简单的办法是把出错的语句
注释掉,我检查过,这是几个IE的事件,我们基本用不着!
如果,想用,就得改正这几个错误!就是,把参数独立出来
,改成用指针调用!

2,第二步,使用ICppShellWindow1,获得系统中所有的Internet Explorer 对象,包括文件夹和IE等!
  检查是不是IE的办法是:
    GetApplicationName,看看是不是Explore.exe 还是....
    略去不写了!
   是IE的,使用ICppInternetExplorer1对象连接到他,之后,就可以调用各种方法对这个IE进行控制了!

窗体上,放着两个空件:
.h:
        TCppShellWindows1 *SW;
        TCppInternetExplorer1 *IE;

cpp:

//简单的例子:
        SW->Connect();
//debug:
//获取
        iCount=SW->Get_Count();
        if(iCount<1)
                {
                        ShowMessage("娘西皮,一个没有!");
                        return ;
                };
//我没做判断,直接连接到第一个实例上,
//您应该处理的
        TVariantInParam index(0);
//把IE和实例连接
        IE->ConnectTo(SW->Item(index));

//方法调用举例:获取URL
        WideString temp(IE->Get_LocationURL());
        ShowMessage(temp);

        //IE->Set_FullScreen(1);

//执行OLE Command举例:运行Save As 菜单
//设置存储路径
TVariant *path=new TVariant("c:\\ttt");
//调用,
        IE->ExecWB(
//OLE CMD ID
Shdocvw_tlb::OLECMDID_SAVECOPYAS, 
//执行开关:不显示界面,不过似乎有点问题,
//Save aS 对话框需要用户  安 确定 按钮
Shdocvw_tlb::OLECMDEXECOPT_DONTPROMPTUSER,
 path);
        delete path;

//连接文档:
//把文档连接到IE,说明参见 3
        Doc->ConnectTo(IE->Get_Document());
Doc----?????
具体的使用,我没写,如果想在
这一级上处理,非常繁琐,您需要
处理每个集合,比如框架,图片,
脚本,等等!


3:如果相对IE文档进行更深层次的控制还得在引入
    Microsoft Html Object Library(Version .)
    [C:\\winnt\system32\mshtml.tlb]
   注意:这个类型库包含了几百个接口,需要很长时间,不是死机!
   使用IHTMLDocument对象ConnectTo 到IE的文档上,
就可以对其进行操纵了!这个对象接口非常之多,参见MSDN
集合更多,我也没用过!,看来只能试一试了!具体参见MSDN
文档!

   我写了一个小例子,安以上步骤,能调出IE 的Save As
对话框!


注意:如果在您的机器上出现类没有注册,或根本就找不到
这两个类型库,请安装IE5