通过DLL动态创建FORM以及WebBrower,出现的一些问题,请教各位!

ZWF8888 2011-01-26 11:57:56
通过以下主程序调用DLL,(1)结果是WebBrower的Align:=alClient属性没有作用,(2)WebBrower不能用CRTL+C、CRLT+V
请各位赐教,是什么原因导致出现以上情况,解决的方法又如何,多谢!


主程序代码
interface

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

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

var
Form2: TForm2;
function aa:string;external 'PP.dll' ;
implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
aa;
end;

end.

DLL文件代码

library PP;

uses
SysUtils,OleCtrls,SHDocVw,Forms, Classes, Controls;


{$R *.res}
var
FF:TForm;
ww:TWebBrowser;
function aa:string;
begin
FF:=TForm.Create(nil);
ww:=TWebBrowser.Create(FF);
ww.ParentWindow:=ff.Handle;
ww.Navigate('www.163.com');
ww.Align:=alClient;
ff.Show;
Result:='OK';
end;

exports aa;

begin
end.
...全文
65 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2011-01-27
  • 打赏
  • 举报
回复
ww.ParentWindow:=ff.Handle;改为ff.InsertControl(ww);
粘贴复制这个,你最好将dll中的窗体作为一个已存在的窗体,不要动态从TForm创建,然后在那个窗体的OnCreat中写上OleInitialize(nil);在OnClose中写上OleUninitialize;
ZWF8888 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
ww.ParentWindow:=ff.Handle;改为ff.InsertControl(ww);
粘贴复制这个,你最好将dll中的窗体作为一个已存在的窗体,不要动态从TForm创建,然后在那个窗体的OnCreat中写上OleInitialize(nil);在OnClose中写上OleUninitialize;
[/Quote]


感谢bdmh的指点,通过修改ww.ParentWindow:=ff.Handle;改为ff.InsertControl(ww);
WebBrower的Align:=alClient属性起作用了!
但在窗体的OnCreat中写上OleInitialize(nil);在OnClose中写上OleUninitialize;还是不能令CTRL+C,CTRL+V起作用。如果WebBrower不是封装在DLL中被调用,直接创建在Form里运行,CTRL+C,CTRL+V是没有问题的。
在网上有说在DLL文件中加OleInitialize(nil)等,我都试过,但都一一失败。



5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧