我想实现不用showmodal打开窗体
但实现效果却与其相同
如何实现?
最好是打开的窗口是即时建立的
而不是在主窗体创建是建立

解决方案 »

  1.   

    动态创建窗体?
    ^_^;按钮点击时的代码:if not assigned(form2) then
    begin
      form2 := Tform2.create(self);
      form2.showmodal;
    end;
      

  2.   


    if not assigned(form2) then
    begin
      form2 := Tform2.create(Application);
      form2.show;
      form2.FormStyle := fsStayOnTop;
    end;
    //在Form2的onClose添加Form2.free;//or
    if not assigned(form2) then
    begin
    try
      form2 := Tform2.create(Application);
      form2.showModal;
    finally
      form2.free;
    end;
    end;
      

  3.   

    if not assigned(form1) then
    begin
      form1 := Tform1.create(application);
      form1.showmodal;
    end;既然要实现相同的效果,为什么不用showmodal?给我们个理由先.....
      

  4.   

    把form的FormStyle设置成fsStayOnTop,显示窗体时不要用showmodal(不方便),使用show就可以了
    需要动态创建窗体用form1 := Tform1.create(Application);
      

  5.   

    to nhdj(无名): http://expert.csdn.net/Expert/topic/2659/2659132.xml?temp=.1852991
      

  6.   

    在要打开的子窗体上用了bitbtn,它有返回值
    用了showModal 后打开的窗体自动关闭
    不知道各位是否遇到过此类问题?
    怎么解决?。
      

  7.   

    知道问题的答案了
    把bitbtn的modalResult的返回值该为mrNone 就可以了
    //声明
    var
        WindowList: Pointer;
    //.........
    //打开子窗体
     WindowList:= DisableTaskWindows(self.handle);
      frmFareSet.Show;
    //关闭子窗体
     EnableTaskWindows(untMain.WindowList);
    //用此方法也可,但子窗体好象不能动态创建,而是随主窗题一起创建
    各位有何高见
    指点以下。
      

  8.   

    unit ProgressFrm;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;type
      TfrmProgress = class(TForm)
        lbl1: TLabel;
        pgs1: TProgressBar;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;procedure ShowProgressForm(AOwner:TComponent);
    procedure HideProgressForm();
    procedure UpdateProgressForm(AInfo:String;AProgress:Integer);implementation{$R *.dfm}var
      ProgressForm:TfrmProgress;
      WindowList:Pointer;procedure ShowProgressForm(AOwner:TComponent);
    begin
      if not Assigned(ProgressForm) then begin
        ProgressForm:=TfrmProgress.Create(AOwner);
      end;
      ProgressForm.Show;
      WindowList:=DisableTaskWindows(ProgressForm.Handle);
    end;procedure HideProgressForm();
    begin
      if Assigned(ProgressForm) then begin
        EnableTaskWindows(WindowList);
        FreeAndNil(ProgressForm);
      end;
    end;procedure UpdateProgressForm(AInfo:String;AProgress:Integer);
    begin
      if Assigned(ProgressForm) then begin
        ProgressForm.lbl1.Caption:=AInfo;
        ProgressForm.pgs1.Position:=AProgress;
        ProgressForm.Update;
      end;
    end;procedure TfrmProgress.FormCreate(Sender: TObject);
    begin
      PostMessage(pgs1.Handle,$0409,0,clGreen);
    end;end.
      

  9.   

    useage:
      ShowProgressForm(nil);
      try
        for I:=0 to 100 do begin
          UpdateProgressForm('Initializing ' + IntToStr(I),I);
        end;
      finally
        HideProgressForm();
      end;
      

  10.   

    最好这样:
      ShowProgressForm(nil);
      try
        for I:=0 to 100 do begin
          UpdateProgressForm('Initializing ' + IntToStr(I),I);
          Application.ProcessMessages();
        end;
      finally
        HideProgressForm();
      end;