一个程序App,有两个具有置顶属性的子窗体From1 和 Form2,遇到以下状况:在两台笔记本上(WinXP,IBM R52)运行,From1 和Form2 都能正常置顶(就是都在App 之上)
在一台式机(WinXP,DELL AMD双核)运行,当焦点移到 App 上,Form1 和Form2 都退到 App 后面;
在一台服务器上(Win2003,IBM,2 CPU)运行,当焦点移到App上,Form1 和 Form2 都退到App 后面;请教那位高人见过这种情况,还是只是个人人品问题 ?

解决方案 »

  1.   

    你用WIN32 API吧,SetWindowPos 。Delphi有一些自动控制,在某些情况下会自动转换置顶效果。
      

  2.   

    楼主真会开玩笑,还跟人品有什么关系呢.我给一段代码看看.
    procedure Createparams(var params: TCreateParams);override;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      SystemParametersInfo(SPI_GETWORKAREA, 0, @Rect, 0);
      Rect.Top := 100;
      SystemParametersInfo(SPI_SETWORKAREA, 0, @Rect, 0);
      Left := 0;
      Top := 0;
      Height := 100;
      Width := Screen.Width;
      FormStyle := fsStayOnTop;end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
    Rect.Top := 0;
      SystemParametersInfo(SPI_SETWORKAREA, 0, @Rect, 0);end;procedure TForm1.Createparams(var params: TCreateParams);
    begin
      inherited CreateParams(Params);
      with params do
      begin
        Style:=WS_POPUP;
        ExStyle :=  WS_EX_TOOLWINDOW or WS_EX_TOPMOST or WS_EX_NOACTIVATE or WS_EX_WINDOWEDGE;
        WndParent := GetWindow(FindWindow('Progman', nil), GW_CHILD);
      end;
    end;
      

  3.   

      
      setwindowpos(application.Handle,hwnd_topmost,0,0,0,0,swp_nomove);
      setwindowpos(application.handle,hwnd_notopmost,0,0,0,0,swp_nomove);
      setforegroundwindow(application.Handle);
      把这三句加到timer里.
      

  4.   

    用timer不合理
    好像override窗体类的一个方法可以,忘了