怎么让弹出的窗口 显示在最前 但是又不覆盖任务栏?让窗口在最前有两种方面 一是在窗口属性里面设置fsstayontop  还有是用api 里面的setwindowpos里面的topmost  但是这样的窗口最前 会覆盖 任务栏 有没有办法使用弹出窗口始终在最前 但又不覆盖任务栏呢? 效果如果emule的弹出窗口一样能手出招

解决方案 »

  1.   

        procedure WMGetMinMaxInfo(var mes:TWMGetMinMaxInfo);message WM_GetMinMaxInfo;procedure TfrmMain.WMGetMinMaxInfo(var mes: TWMGetMinMaxInfo);
    begin
      mes.MinMaxInfo.ptMaxPosition.X := 0;
      mes.MinMaxInfo.ptMaxPosition.Y := 0;  
      mes.MinMaxInfo.ptMaxSize.X := Screen.Width;
      mes.MinMaxInfo.ptMaxSize.Y := Screen.WorkAreaHeight;
      mes.Result := 0;
      inherited;
    end;截获最大化消息并在里面设置窗口的位置和大小.
      

  2.   

    wintergoes ,倒是一个好办法,不过,我也还有一个方法:
    procedure Createparams(var params: TCreateParams);override;
    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;
    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;
    这个方法,我试了,窗体绝对会在最前面.效果比较好.