我要实现像QQ窗体一样的效果,但这个窗体不是主窗体,是一个子窗体,通过show调用,但子窗体打开以后,我点一个按钮才实现这个效果(把子窗体放在最上层),我点另外一个窗体则不变成普通的效果了!
怎么实现?

解决方案 »

  1.   

    SetWindowPos(Handle,HWND_TOPMOST,Self.Left,Self.Top,Self.Width,Self.Height,SWP_SHOWWINDOW)
      

  2.   

    to huojiehai(海天子) 你的方法不行的
    重载也没有实现
      

  3.   

    我这样也好像也不能实现:
    Public
      procedure Createparams(Var Params:TCreateParams);override;
    实现:
    procedure TFormDrop.Createparams(var Params:TCreateParams);
    begin
      Inherited CreateParams(Params);
      With Params do
      begin
        EXStyle:=ExStyle or WS_EX_TOPMOST OR WS_EX_ACCEPTFILES or WS_DLGFRAME;
        wndParnet:=GetDesktopWindow;
      end;
    end; 
      

  4.   

    你是说要窗体一直在最前面?这很容易啊
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    form1.formstyle:=fsstayontop;
    end;
    这就可以了
      

  5.   

    我的可以的呀,你没设对吧,form1.formstyle:=fsstayontop;有时不灵的
    SetWindowPos(你的置顶form.Handle,HWND_TOPMOST,你的置顶form.Left,你的置顶form.Top,你的置顶form.Width,你的置顶form.Height,SWP_SHOWWINDOW)
      

  6.   

    使你的窗体保留在桌面的最上面
    当我们想让一个窗体保留在桌面的最上面时,可以定义窗体的FormStyle属性,使窗体保持在最上面。但是,使用这种方法后,在切换窗体的模式时,窗体将闪烁。为了避免切换窗体模式时的闪烁,可以使用Windows API函数SetWindowPos来解决这一问题,使用方法如下:
    SetWindowPos(Form1.handle, HWND_TOPMOST, Form1.Left, Form1.Top, Form1.Width, Form1.Height,0);
    用实际窗体名称代替"Form1",调用这个命令就可以将窗体设置为保留在桌面的最上面。如要将窗体切换回正常的窗体,调用下面的命令:
    SetWindowPos(Form1.handle, HWND_NOTOPMOST, Form1.Left, Form1.Top, Form1.Width, Form1.Height,0);
      

  7.   

    一定得用SetWindowPos API函数。DELPHI中的Form1.FormStyle:=fsStayOnTop;在单窗体中可以使用,但在多体窗中就会失效!
      

  8.   

    我业遇到这个问题,但是QQ的窗体就可以一直在上面.
    我的程序开始时能够把别的窗体盖住,但是在调用程序中别的窗体A后,qq总是跟随着新窗体A跳出来.于是我不得不在A出来前,把程序得主窗体setwindowspos 一下,在把A setwindowpos一下,这样虽然可以盖主qq的主窗体,但是在程序中使用messagedly时,他依然能跳出来,我都要晕了