我的情况是这样的:有两个应用程序 A 和 B,其中 B 是一个悬浮在屏幕最顶端的小窗口,相当于是 A 的一个辅助程序。A 和 B 同时启动,当 A 全屏的时候,B 才显露出来,设置 A 的全屏方法如下:lStyle := GetWindowLong(MainForm.Handle, GWL_STYLE);
lStyle := lStyle and (not WS_CAPTION);
SetWindowLong(MainForm.Handle, GWL_STYLE, lStyle);
SetWindowPos(MainForm.Handle, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOZORDER Or SWP_NOSIZE);
MainForm.SetBounds(0,0,Screen.Width, Screen.Height);此时我把焦点移到 B 的浮动窗口时,操作系统的任务栏就会出现,焦点返回 A 时,任务栏又消失。怎么样才能让焦点在 B 上的时候也不显示任务栏呢?请教^_^又及:我不想使用 ShowWindow 来隐藏任务栏,因为这样会带来其他问题。还有更好的办法吗?谢谢:)

解决方案 »

  1.   

    全屏时,form的高度-任务栏的高度就行了
      

  2.   

    form的高度-任务栏的高度?
    就是说让任务栏一直显示?可这样就不是全屏了:)
      

  3.   

    请大家帮忙,谢谢。我做过这样的测试,对 B 的窗口这样:
    procedure CreateParams(var Params: TCreateParams); override;procedure TForm1.CreateParams(var Params: TCreateParams);
    begin
      //总在最前
      inherited CreateParams(Params);
      Params.WndParent := A的MainForm.Handle;
      ...
    end;这样焦点到 B 的时候就不会出现任务栏了,但是此时发现,如果 A 弹出一些 ShowMessage 对话框,这些对话框会藏在后面看不见,导致整个程序像没响应一样。能避免这种情况吗?
      

  4.   

    全屏时,form的高度-任务栏的高度就行了
    =============================================哈,说错了,应该是:
    Form的高度=screen的高度-任务栏的高度
      

  5.   

    Form的高度=screen的高度-任务栏的高度就是任务栏一直都能看到,可这样不是全屏啊
      

  6.   

    谢谢 merkey2002 :)to shiyj:因为不能做成一个程序,开发平台不同。
      

  7.   

    我觉得你那个全屏的窗口做的有点。procedure TForm1.FormCreate(Sender: TObject);
    begin
    self.BorderStyle:= bsNone;
    self.FormStyle:= fsStayOnTop;
    self.WindowState:= wsMaximized;
    end;
    这个呢???
      

  8.   

    to xixuemao:
    嗯,这种全屏方式程序很简单,不错。不过仍然存在鼠标点到 B 窗口上,任务栏就会出现的问题:~(
      

  9.   

    看来只能用ShowWindow 来隐藏任务栏了。呼!
      

  10.   

    程序开始时使用ShowWindow隐藏,结束时ShowWindow显示不久ok了吗?搞不明白为什么要这么复杂。
      

  11.   

    把mainform设置为stayontop
    B窗口显示的时候
    windows.setparent(ch,bh);
    showwindow();ch为B的窗口,bh为A窗口句柄
      

  12.   

    naughtyboy(重归起跑线):我试过更改B的Parent为A,但是这样会出问题,A的一些弹出窗口,ShowMessage之类的会没响应我不想用 ShowWindow 来隐藏任务栏,有很多弊病,如隐藏之后Alt+Tab切换到其他任务,任务栏不见了总让人觉得怪怪的。
      

  13.   


      我做了一个最简单的例子,用你这种方法全屏后,接着显示另一个窗体,焦点在另一个窗体上不会出现任务栏。
        想请问你的  个悬浮在屏幕最顶端的小窗口  你是怎么实现的 问题应该在这B窗口上吧
      lStyle := GetWindowLong(self.Handle, GWL_STYLE);
      lStyle := lStyle and (not WS_CAPTION);
      SetWindowLong(self.Handle, GWL_STYLE, lStyle);
      SetWindowPos(self.Handle, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOZORDER Or SWP_NOSIZE);
      self.SetBounds(0,0,Screen.Width, Screen.Height);
      fm:=Tform2.Create(self) ;
      fm.Show ;