通过以下主程序调用DLL,(1)结果是WebBrower的Align:=alClient属性没有作用,(2)WebBrower不能用CRTL+C、CRLT+V
请各位赐教,是什么原因导致出现以上情况,解决的方法又如何,多谢!
主程序代码
interfaceuses
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.
请各位赐教,是什么原因导致出现以上情况,解决的方法又如何,多谢!
主程序代码
interfaceuses
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.
粘贴复制这个,你最好将dll中的窗体作为一个已存在的窗体,不要动态从TForm创建,然后在那个窗体的OnCreat中写上OleInitialize(nil);在OnClose中写上OleUninitialize;
WebBrower的Align:=alClient属性起作用了!
但在窗体的OnCreat中写上OleInitialize(nil);在OnClose中写上OleUninitialize;还是不能令CTRL+C,CTRL+V起作用。如果WebBrower不是封装在DLL中被调用,直接创建在Form里运行,CTRL+C,CTRL+V是没有问题的。
在网上有说在DLL文件中加OleInitialize(nil)等,我都试过,但都一一失败。