<font color="red">???</font>为什么不能调用WebBrowser里的查找对话框?(100分)

  • 主题发起人 主题发起人 driby
  • 开始时间 开始时间
D

driby

Unregistered / Unconfirmed
GUEST, unregistred user!
我用IE的WebBrowser控件时,调用它自身的查找对话框就会出现
"试图激活丢弃的未注册的目标"的EOleException类的错误。
然后调出资源管理器里的查找对话框,而不是我想要的WebBrowser
里的查找对话框。而我调WebBrowser的“打开页面”,“保存页面”,“剪切”,
“全选”等命令都很顺利。
我写的源码如下:
var a, b: OleVariant;
begin
WebBrowser1.setfocus;
WebBrowser1.ExecWB(OLECMDID_FIND,1,a,b);
end;

 
en,页面上需要有内容吧?用
try
WebBrowser1.setfocus

WebBrowser1.ExecWB(OLECMDID_FIND,1,a,b);
except
end;
 
从MSDN里,你可以发现 OLECMDID_FIND 这个命令是尚未完成的.
(Not currently implemented. )呵呵



我想知道你是如何调用'拷贝'和'剪切'命令的,因为我用ExecWB方法
调用拷贝时,也总是出现"试图激活丢弃的未注册的目标"的EOleException类的错误.
谢谢.
 
你的Delphi和IE版本号是多少?我的Delphi5+IE5并无问题。
 
to driby:
你的问题解决了吗?
 
使用下段代码,应该可以解决你的问题

HTMLID_FIND = 1
//查找对话框
HTMLID_SOURCE = 2;//显示原代码
HTMLID_OPTIONS = 3;//internet选项

...
InvokeIE(HTMLID_FIND)//调出查找对话框
...


procedure TMainForm.InvokeIE(Value: Integer);
const
CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
var
CmdTarget : IOleCommandTarget;
vaIn, vaOut: OleVariant;
PtrGUID: PGUID;
begin
New(PtrGUID);
PtrGUID^ := CGID_WebBrowser;
if WebBrowser1.Document <> nil then
try
WebBrowser1.Document.QueryInterface(IOleCommandTarget, CmdTarget);
if CmdTarget <> nil then
try
CmdTarget.Exec( PtrGUID, Value, 0, vaIn, vaOut);
finally
CmdTarget._Release;
end;
except
// Nothing
end;
Dispose(PtrGUID);
end;
 
能把它翻译为C++ Builder语言吗?
Delphi的我看不懂
多谢了!!!
 
你随便打一个IE窗口(不是内嵌的那种),看看查看窗口是否能显示出来。我也遇到过这种
情况,多半应该是IE本身的查找窗口不好用了。
 
在主单元所有语句之后,“End.”之前加上下面两句。
initialization
OleInitialize(nil);

finalization
OleUninitialize;
 
driby :
问题有没有解决?
我也碰到了这个问题
 
给你个例子

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OleCtrls, SHDocVw_TLB, StdCtrls;

type
TForm1 = class(TForm)
WB: TWebBrowser;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
uses
ActiveX;

procedure TForm1.FormCreate(Sender: TObject);
begin
WB.Navigate('dailynews.sina.com.cn');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
CmdTarget: IOleCommandTarget;
PtrGUID: PGUID;
vaIn, vaOut: Olevariant;
const
CLSID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
HTMLID_FIND = 1;
begin
New(PtrGUID);
PtrGUID^ := CLSID_WebBrowser;
if WB.Document <> nil then
try
WB.Document.QueryInterface(IOleCommandTarget, CmdTarget);
if CmdTarget <> nil then
try
CmdTarget.Exec(PtrGuid, HTMLID_FIND, 0, vaIn, vaOut);
finally
CmdTarget._Release;
end;
except end;
Dispose(PtrGUID);
end;

end.

 
给你个例子

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OleCtrls, SHDocVw_TLB, StdCtrls;

type
TForm1 = class(TForm)
WB: TWebBrowser;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
uses
ActiveX;

procedure TForm1.FormCreate(Sender: TObject);
begin
WB.Navigate('dailynews.sina.com.cn');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
CmdTarget: IOleCommandTarget;
PtrGUID: PGUID;
vaIn, vaOut: Olevariant;
const
CLSID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
HTMLID_FIND = 1;
begin
New(PtrGUID);
PtrGUID^ := CLSID_WebBrowser;
if WB.Document <> nil then
try
WB.Document.QueryInterface(IOleCommandTarget, CmdTarget);
if CmdTarget <> nil then
try
CmdTarget.Exec(PtrGuid, HTMLID_FIND, 0, vaIn, vaOut);
finally
CmdTarget._Release;
end;
except end;
Dispose(PtrGUID);
end;

end.

 
接受答案了.
 
后退
顶部