通过以下主程序调用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.

解决方案 »

  1.   

    ww.ParentWindow:=ff.Handle;改为ff.InsertControl(ww);
    粘贴复制这个,你最好将dll中的窗体作为一个已存在的窗体,不要动态从TForm创建,然后在那个窗体的OnCreat中写上OleInitialize(nil);在OnClose中写上OleUninitialize;
      

  2.   

    感谢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)等,我都试过,但都一一失败。