关于D5的TWebBrowser的问题!(50分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
大家用过D5的TWebBrowser没有?
我想在程序运行的时候动态生成一个WebBrowser,并且放到一个Pabel上,
我是这样做的:

var
web:twebbrowser;
begin
web:=twebbrowser.create(panel1);
web.name:='web1';
web.parent:=panel;

可是在编译时,最后两句出错,错误的意思是: name,parent是只读属性.
我看了webbrowser的name属性的帮助,解释是:
"Indicates the name for the executable that hosts the Web Browser component."
看不懂什么意思,似乎这个name属性不是用来表示这个webbrowser的名字的.

可是以前D4这样做是可以的, D5的TWebbrowser和D4的不一样,D5现在不用
带那个html.ocx了,是直接和IE的DLL打交道.

谁能邦邦我?
 
D4也不能这样做

你有两种方法:

1.
web:=twebbrowser.Create(panel1);
TWinControl(web).parent:=panel1;


2.
web:=twebbrowser.CreateParented(panel1.handle);
 
那么name属性呢? 因为我不能确定要动态生成几个,所以一定要有不同的名字.
 
name 在IDE可以用来区分控件,在运行期间没有什么用处,不能用name对控件进行引用
顶多用来和某个字符串比较是否相等,呵呵^_^
你可以用一个TList来保存这些TWebBrowser或者开一个足够大的数组
然后通过下标对其进行引用.
 
name不是字符串是个指针,就是对象自己。
 
public; var wb2:TWebBrowser;

procedure xxxx;
begin
wb2:=TWebBrowser.CreateParented(self.WebBrowser1.ParentWindow);
form1.InsertControl(wb2);
wb2.Align:=alClient;
wb2.GoHome;
end;

webBrower1是预先放在form上的另一个webBrowser;

如果没有webBrowser1的话,
wb2:=TWebBrowser.CreateParented(self.WindowHandle);
form1.InsertControl(wb2);

hhe,偷来的
 
:CJ,从那里来的,那name的实现机制该是如何呢
 
这个问题我已经解决,受she的启发,这样给webbrowser起名字:
twincontrol(web).Name :='web'+inttostr(i);
用parent的InsertControl来插入webbrowser (今天一进来,发现和CJ说的一样)

但是,she,你犯了一个错误,怎么说"不能用name对控件进行引用"呢? 如果我动态生成一大堆控件,我如何区别引用他们呢?

这个name用处可大了,在我的这个程序里,我这样使用name属性:
Twebbrowser(self.FindComponent('web'+inttostr(i))).stop;

难道你没有用过FindComponent函数?

多谢大家!
 
呵呵,我的意思是在运行期间不能像写程序时直接用name这个字符串对控件进行
引用,没有说清楚.
我没有用过FindComponent函数,因为我都是把成堆的TWebBrowser放在一个
TList里面,或开一个大数组,然后用下标索引.
 
cAkk:
这样试:
twincontrol(web).Name :='web'+inttostr(i);
它的名字最终有效果吗?我的怎么不行?
 
我不太喜欢对动态生成的构件命名,而比较喜欢用Tag属性
 
name管它呢?如下:
WebBrowser:= TWebBrowser.Create(self);
webBrowser.ParentWindow:=panel.Handle;
webbrowser.Dock(panel,a);
WebBrowser.Align:=alClient;
WebBrowser.Visble:=true;

使用:
for i:=0 to panel.ControlCount-1 do
begin
if panel.Controls is TWebBrowser then
(panel.Controls as TWebBrowser).Navigate(Urls.Text);
end;
诸如此类的,你干什么都行!!!
 
后退
顶部