也就是说,你不能把任何的东西置于这个窗体之上,不仅仅是别的窗体,还要包括
开始菜单等等。
我试了delphi的formstyle和windows api的setwindowpos都是没有办法的。

解决方案 »

  1.   


      if Key = chr(13) then
       begin
         if Self.FormStyle = fsStayOnTop then
          begin
           Self.FormStyle := fsNormal;
           Main.BringToFront;
          end
          else Self.FormStyle := fsStayOnTop; 
       end;
      

  2.   

    试试:
     setwindowpos(handle,hwnd_topmost,0,0,0,0,swp_nomove or swp_nosize);
    取消:
     setwindowpos(handle,hwnd_notopmost,0,0,0,0,swp_nomove or swp_nosize);
      

  3.   

    to shmilyjiujiu(啾啾)不懂
    1.这个key值是什么地方得到的?我不对这个程序操作,怎么可以得到这个key值?用的钩子吗?
    2.这里的13指的什么?对于windows的任何操作,都能发送一个13的值吗?
      

  4.   

    if Key = chr(13) then
    //指的是响应Enter键
      

  5.   

    不用看了,楼上的都不行
    1.把我做的部分程序给你参考
    unit IFDrag;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls;type
      TForm1 = class(TForm)
      private
      protected
        procedure CreateParams(var Params: TCreateParams); override;
      public
        { Public declarations }
      end;implementation
    {$R *.dfm}{ TForm1 }procedure TForm1.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 or WS_EX_TOOLWINDOW;
        WndParent := GetDesktopWindow;
      end;
    end;
      

  6.   

    to forgetter() 
    首先谢谢你的关注,
    你的方法我在问这个问题之前试过了,不行,这个方法主要是解决非主窗体显示在所有窗体之上的问题。
    对于我所说的绝对在前是没有办法的,你可以试验一下运行这个程序,然后用window键弹开开式菜单,你就会发现开始菜单会显示在这个窗体之上。
      

  7.   

    if Key = chr(13) then
       begin
         if Self.FormStyle = fsStayOnTop then
          begin
           Self.FormStyle := fsNormal;
           Main.BringToFront;
          end
          else Self.FormStyle := fsStayOnTop; 
       end;
    不过是你的程序必须有焦点
      

  8.   

    to : 楼主~
    1,我的程序是我开发的一个项目中的一个代码。所以,是可行的。2,if Key = chr(13) then  我给用户的设定是   现在界面上点击一下鼠标(对程序来说, 是为了获得焦点)然后当用户敲击回车键,如果当前窗口为置顶,则取消给设置;如果不为置顶,则设置为置顶~还有什么问题嘛~
      

  9.   

    to shmilyjiujiu(啾啾) 首先,谢谢你的关注,但是我想你还是没有仔细看我的问题。
    我要求这个窗口绝对的在最上面,无论这个窗体有没有获得焦点。
    况且,就算这样置顶了,对开始菜单还是没有办法。
     
    不过我相信一定可以做出来,因为我见过这样的程序。
      

  10.   

    TO 楼主 :
     我也有开始菜单。 我是加了一个选择框在form上面,默认为 不显示边框(针对form),选择时候再把form的边框显示。你有个菜单的话,可以在form.show的时候把菜单visible打成false。  
       if Checkbox1.Checked then
        begin
         PlayForm.BorderStyle := bsSizeable;
         PlayForm.Top := StrToInt(windows_Top.Text) - NoneTitle_Size;
         PlayForm.Height := StrToInt(windows_Height.Text) + NoneTitle_Size;
        end
       else
        begin
         PlayForm.BorderStyle := bsNone;
         PlayForm.Top := StrToInt(windows_Top.Text) + NoneTitle_Size;
         PlayForm.Height := StrToInt(windows_Height.Text) - NoneTitle_Size;
        end;至于是否获得焦点的问题,你可以不相应key=13这个事件啊。为什么一定要和我的代码一样??  你不加if Key = chr(13) then不就可以了嘛????form的create或者show的时候,写代码不久可以了嘛??
      

  11.   

    to shmilyjiujiu(啾啾)
     
    你还是误会我的意思了,你看看我的描述,这里的开始菜单是windows的开始菜单,不是自己定义的,况且,windows的开始菜单只是我能想到的一种情况,难说还有别的东西会跑到,这个窗体的上面。
    看看我给forgetter的回复to forgetter()
    首先谢谢你的关注,
    你的方法我在问这个问题之前试过了,不行,这个方法主要是解决非主窗体显示在所有窗体之上的问题。
    对于我所说的绝对在前是没有办法的,你可以试验一下运行这个程序,然后用window键弹开开式菜单,你就会发现开始菜单会显示在这个窗体之上。
      

  12.   

    很简单:(放在最上面)
    setwindowpos
    (form1.Handle,HWND_TOPMOST,form1.Left,form1.Top,form1.Width,form1.Height,0);
    取消放在最上面:
    setwindowpos(form1.Handle,HWND_NOTOPMOST,form1.Left,form1.Top,form1.Width,form1.Height,0);
      

  13.   

    写以个回调函数,在系统获得WM_getfocus WM_getfocus消息的时候,绕过系统api,跳转到你的函数处理,吧你的窗口放在最前,
      

  14.   

    设置窗体的的扩展风格为WS_EX_TOPMOST可以使窗体位于所有窗口之上,但我不知道怎么位为开始菜单之上??
      

  15.   

    以前我也这样想过,即使用了setwindowpos等方法,把窗休置于最上,如果另一个程序也用了同样的方法怎么办?我的窗体能保持最上面?
       致于,要在开始菜单的前面,这个效果在印像中好像看过,就是不知是那个家伙写出来的还没搞定,只能帮你顶