我在DLL程序中写了一个过程:
procedure OpenForm(mainForm:TForm;DS:Tdataset);stdcall;
var
  Form1: TForm;
  ptr:PLongInt;
  QuickRep1: TQuickRep;
begin
  ptr:=@(Application.MainForm);
  ptr^:=LongInt(mainForm);
  Form1:=TForm.Create(mainForm);
  QuickRep1:=TQuickRep.CreateParented();
  QuickRep1:=TQuickRep.Create(Form1);
  QuickRep1.DataSet:=DS;
  QuickRep1.ReportTitle:='DLL';
  QuickRep1.Zoom:=100;
  QuickRep1.PreviewModal;
end;
但是在另外的程序中调用是提示“Control '' has no parent window”
而我把这个过程直接写在程序中,不用通过DLL来调用就不报错!望高手来赐教,在线等

解决方案 »

  1.   

    看你的写法程序应该是Mdi多文档的界面了
    不知道你调用时怎样写的你如果传第Application.mainform 应该不会错,如果传self 或按牛所在的form1 肯定要错。
      

  2.   

    我是这样写的:
    var
      DS:TDataSet;
    begin
        DS:=DataSource1.DataSet;  
    OpenForm(Application.MainForm,DS);
    主要是这个QuickRep1:=TQuickRep.Create(Form1);可能有问题
      

  3.   

    难道csdn里面没有Delphi高手吗???
      

  4.   

    QuickRep1:=TQuickRep.CreateParented();
    QuickRep1:=TQuickRep.Create(Form1);
    --------
    ??
      

  5.   

    QuickRep1:=TQuickRep.CreateParented(from1.Handle);
      

  6.   

    procedure OpenForm(mainForm:TForm;DS:Tdataset);stdcall;
    var
      Form1: TForm;
      ptr:PLongInt;
      QuickRep1: TQuickRep;
    begin
      ptr:=@(Application.MainForm);
      ptr^:=LongInt(mainForm);
      Form1:=TForm.Create(mainForm);
      QuickRep1:=TQuickRep.CreateParented();
      QuickRep1:=TQuickRep.Create(Form1);
      QuickRep1.Parent := Form1;
      QuickRep1.DataSet:=DS;
      QuickRep1.ReportTitle:='DLL';
      QuickRep1.Zoom:=100;
      QuickRep1.PreviewModal;
    end;
      

  7.   

    这局话是没有:QuickRep1:=TQuickRep.CreateParented();
    忘了删除掉