本帖最后由 lonelyboySVC 于 2011-05-23 16:16:59 编辑

解决方案 »

  1.   

    能否把frmDial.InitDialForm();
    贴出?
      

  2.   

     dial := TDial.Create();写成  dial := TDial.Create(application);貌似模态窗体不给它传AOwner的话,就会出现这种情况~
      

  3.   

    但是对于dial := TDial.Create();其不是一个Form也不是一个控制就是一个类。其定义如下:TDial = Class(TObject)
      private
        { Private declarations }
        hParentNotifyWnd : THANDLE;  //父窗口句柄,用于接收通知拨号通知消息
        frmIdle          : TIdleProgress;//状态窗口
        hThread          : THANDLE;  //线程句柄
      public
        { public declarations }
        constructor Create(const AOwner:TComponent;const bShowTaskBar:Boolean);
        destructor  Destroy();override;
        //...
      end;
      

  4.   

    不好意思,没仔细看。 你上层应该是调用这个
    class procedure TDialForm.ShowDialForm(AOwner:TComponent;const bShowWnd:boolean;var bStatus:Boolean);来显示模态窗体的吧?这个AOwner传的是什么? 你44传Application看行不。
      

  5.   

    ---------------------------------------------------------------------------------
    感谢楼上的回复,我的调用这样么写的,如下:procedure TfrmMainForm.btnNetCtrlClick(Sender: TObject);
    var
      bStatus : Boolean;
    begin
      TDialForm.ShowDialForm( frmMainForm ,true , bStatus );
      //...
    end;我试试传Application。说明一下frmMainForm就是上面图1与图2中的主窗口的实例。
      

  6.   

    测试了一下,将调用改成如下方式也不行。TDialForm.ShowDialForm( Application ,true , bStatus );
      

  7.   

    那你就要检查一下,看看主窗体中是不是有线程什么的,在后台做一些工作,更新了主窗体,导致Modal窗体失效。
    ps:或者一个偷懒点的方法,在Modal窗体里,截获WM_ACTIVATE消息,让modal窗体一失去焦点就立刻Active,永远不能失去焦点~
      

  8.   

    dropme
    -------------------------------------------------------
    你好:
       在主窗口程序中只开启了一个线程,这个线程调用了SetWindowPos WindowsAPI,代码如下:function TScreenKeyboard.KeyboardMonitorProc( lpVoid : pointer ) : DWORD ;
    begin
      while true do
      begin
        Sleep( CONSINTMONITORINTERVAL );
        if not Assigned(frmScreenKeyBoard) then break;
        SetWindowPos( frmScreenKeyBoard.Handle ,
                    HWND_TOPMOST,
                    frmScreenKeyBoard.Left,
                    frmScreenKeyBoard.Top,
                    0,0,
                    SWP_NOSIZE or SWP_NOACTIVATE );
        MonitorScreenKeyboard( 0 ); 
        //...
      end;
    end;你说可能是我这段代码引起的。他修改了当前的顶层窗口。我先测试下看看