要求:
1.浮动窗口form3始终在当前某窗口form2的上面
2.mianform = form1
3.form3.formstyle=fsnormal

解决方案 »

  1.   

    在form3的onshow事件写
    SetWindowPos(self.handle, HWND_TOPMOST,
          self.Left, self.Top, self.Width, self.Height,0);
      

  2.   

    这个方法不行,跟stayontop一回事
    要求不能覆盖在其他应用程序窗口上, 只浮动在form2上
      

  3.   

    procedure TForm2.FormShow(Sender: TObject);
    begin
            form3.Show;
    end;
    procedure TForm3.FormCreate(Sender: TObject);
    begin
           self.Parent:=form2 ;end;
      

  4.   

    to yang6130(2.5G):
    可以将就这样做, 但是form3的范围被form2框死了
    想做一个类似于Object Inspector那样的浮动窗口,就是可以任意位置浮动的
      

  5.   

    procedure TFlatFrm.FormShow(Sender: TObject);
    begin
       AnimateWindow(Self.Handle, 250, AW_CENTER or AW_ACTIVATE);
       Image1.Repaint ;
      

  6.   

    任意位置浮动
    procedure TFlatFrm.FormCreate(Sender: TObject);
    var 
      hApp: HWND; 
      rcApp, rcWork: TRect; 
    begin
      rcWork.Top:=0; 
      rcWork.Left:=0; 
      rcWork.Bottom:= GetSystemMetrics(SM_CYSCREEN); 
      rcWork.Right:= GetSystemMetrics(SM_CXSCREEN); 
      hApp := FindWindow('Shell_TrayWnd', '');
      if hApp <> 0 then begin
        GetWindowRect(hApp, rcApp);
        if rcApp.Right<rcWork.Right then
          rcWork.Left:=rcApp.Right; //TASKBAR在左
        if rcApp.Bottom<rcWork.Bottom then
          rcWork.Top:=rcApp.Bottom; //TASKBAR在上
        if rcApp.Left>0 then
          rcWork.Right:=rcApp.Left; //TASKBAR在右
        if rcApp.Top>0 then
          rcWork.Bottom:=rcApp.Top; //TASKBAR在下
      end;
      SystemParametersInfo (SPI_SETWORKAREA, 0, @rcWork, SPIF_SENDCHANGE );
      self.Left :=rcwork.Right - self.Width ;
      self.Top :=rcwork.Bottom - self.Height ;
    end;
      

  7.   

    to shunzimm(顺子妹妹):
    一定一定,请问:
    hApp := FindWindow('Shell_TrayWnd', '');是找那个form的句柄呀?
      

  8.   

    问题解决,谢谢以上各位procedure TForm3.AppActive(Sender: TObject);
    begin
      SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or
              SWP_NOSIZE or SWP_NOACTIVATE);
    end;procedure TForm3.AppDeActive(Sender: TObject);
    begin
      SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0,
        SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
    end;procedure TForm3.FormCreate(Sender: TObject);
    begin
      AppActive(nil);
      Application.OnActivate := AppActive;
      Application.OnDeActivate := AppDeActive;
    end;