如何使from在按下(显示桌面)按键后无效~!~!~!
还是显示在桌面上????

解决方案 »

  1.   

    呵呵,编译这个程序看看 ???program  Test_by_Mazi;uses
      Windows, Messages;var
      ThreadMessage: TMsg;
      WindowHanlde: DWORD;  //----窗体过程-----
    function WindowProc(WinHanlde, MessageID, WParam, LParam : Longword):Longint; stdcall;
    begin
      Result := DefWindowProc(WinHanlde, MessageID, WParam, LParam);
      if (MessageID = WM_DESTROY) then  PostQuitMessage(0);
    end;  //---注册窗体类----
    function RegWindowClass: Boolean;
    var
      WindowClass: TWndClass;
    begin
     {--填充结构体--}
      WindowClass.Style := CS_HREDRAW or CS_VREDRAW;     // 窗体类风格
      WindowClass.lpfnWndProc := @WindowProc;            // 指定窗体过程
      WindowClass.cbClsExtra := 0;                       // 无额外类信息
      WindowClass.cbWndExtra := 0;                       // 无额外窗体信息
      WindowClass.hInstance := hInstance;                // 实例句柄
      WindowClass.hIcon := LoadIcon(0, IDI_QUESTION);    // 指定图标
      WindowClass.hCursor := LoadCursor(0, IDC_HAND);    // 指定光标
      WindowClass.hbrBackground := COLOR_WINDOW;         // 预定义颜色
      WindowClass.lpszMenuName := nil;                   // 没有菜单
      WindowClass.lpszClassName := 'tLiuMaZi';           // 欲注册的类名
     {--注册窗体类--}
      Result := RegisterClass(WindowClass) <> 0;
    end;  //---建立主窗体------
    procedure Create_Window;
    begin
      if (not RegWindowClass) then
      begin
        MessageBox(0, '注册窗体类失败' , nil, 0);    Halt;
      end;
      WindowHanlde := CreateWindowEx(WS_EX_LEFT or WS_EX_LTRREADING or WS_EX_RIGHTSCROLLBAR or
                                     WS_EX_TOPMOST or WS_EX_WINDOWEDGE or WS_EX_CONTROLPARENT,
                                     'tLiuMaZi','Demo by LiuMazi',
                                     WS_CAPTION or WS_VISIBLE or WS_CLIPSIBLINGS or
                                     WS_CLIPCHILDREN or WS_SYSMENU or WS_THICKFRAME or WS_OVERLAPPED,
                                     100, 100, 300, 200, 0, 0, hInstance, nil);
      if (WindowHanlde = 0) then
      begin
        MessageBox(0, '建立主窗体失败', nil, 0);   Halt;
      end;
    end;begin
      Create_Window;
      while GetMessage(ThreadMessage, 0, 0, 0) do
      begin
        TranslateMessage(ThreadMessage);//翻译按键消息为字符消息
        DispatchMessage(ThreadMessage); //分发消息至窗体处理过程
      end; 
    end.
      

  2.   

    关键之处就在于 :  WS_EX_TOPMOST . Delphi中可以这样写:procedure CreateParams(var Params: TCreateParams); override;procedure TForm1.CreateParams(var Params: TCreateParams);
    begin
      inherited CreateParams(Params);
      Params.ExStyle := Params.ExStyle or WS_EX_TOPMOST or WS_EX_TOOLWINDOW;
      Params.WndParent := 0;
    end;
      

  3.   

    发现一个问题,这样的窗口不能有最小话按钮,比如这样是可以的:
      WindowHanlde := CreateWindowEx(WS_EX_TOPMOST ,
                                     'tLiuMaZi','Demo by LiuMazi',
                                     WS_CAPTION or WS_VISIBLE or
                                     WS_SYSMENU or WS_MAXIMIZEBOX,
                                     100, 100, 300, 200, 0, 0, hInstance, nil);
    如果再or一个WS_MINIMIZEBOX就不行了.
      

  4.   

    解决 最小化
    procedure WMSYSCommand(var Msg: TWMSYSCommand); message WM_SYSCOMMAND;
    procedure TFormEx.WMSYSCommand(var Msg: TWMSYSCommand);
    begin
      if Msg.CmdType = SC_MINIMIZE then
      begin
        DefaultHandler(Msg);
        WindowState := wsMinimized;
      end else
        inherited;
    end;
      

  5.   

    SetWindowLong(Application.Handle, GWL_ExSTYLE, WS_EX_TOOLWINDOW);
      

  6.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      SetWindowLong(Application.Handle,GWL_ExSTYLE,WS_EX_TOOLWINDOW);
    end;
      

  7.   

    把form窗口置顶,再enabled:=false;