小弟想做一个非模式的DLL窗体,form2函数用来输出,
function form2(h:thandle;cap:string):boolean;stdcall;
var
  Form2: TForm2;
begin
  result:=false;
  application.Handle:=h;
  form2:=tform2.Create(application);
  try
    form2.Caption:=cap;
    form2.Show;
    result:=true;
  finally
    application.Handle:=0;
    form2.Free;
  end;
end;
但是在主窗体调用form2函数时,这个窗体总是闪一下就不见了,
我想让它显示在调用窗体之上,但又不是模式窗体,这样我可以操作调用窗体.
例如:A调用显示出来B窗体,B窗体在A之上,但又必须可以在不关闭B的同时可以操作A窗体,请问哪位大侠可以帮忙????

解决方案 »

  1.   

    try
        form2.Caption:=cap;
        form2.Show;
        result:=true;
      finally
        application.Handle:=0;
        form2.Free;           //你一Show完就把它给Free掉,当然是显示不了啦!
      end;
      

  2.   

    form1.BringToFront;试试可不可以呀
      

  3.   

    你的TForm2那里不是有个全局变量吗?就用它了
    begin
      result:=false;
      application.Handle:=h;
      if Not Assigned(form2) then
        form2:=tform2.Create(application);
      try
        form2.Caption:=cap;
        form2.Show;
        result:=true;
      finally
        application.Handle:=0;
       // form2.Free;
      end;
      

  4.   

    楼上的兄弟,用 if not assigned(form2) then时,窗体的标题变成在按钮里显示了,而且窗体也没有显示出来啊???
      

  5.   

    难道CSDN上就没有高手吗?如果分数不够,还可以再加!!!
      

  6.   

    去掉你的form2.free;   在caption:=fsdfdsf   下面加上一句 form2.formstyle:=fsStayOnTop;
      

  7.   

    呵呵,很简单的!
    要调用DLL中的类,必须在DLL中创建!
    窗体也是类!先在DLL中实现一个创建过程!