已经设置了MinimizeToTray,在程序最小化时也确实能够隐藏任务栏图标。但我在右键菜单中打开一个新窗体时,任务栏图标又会重新出现。关闭后也会消失。我希望任务栏图标彻底消失(Winamp和QQ都能做到),请高手指点,谢谢!

解决方案 »

  1.   

    var
      dwExStyle : DWORD;
    begin
       dwExStyle := GetWindowLong(Application.Handle, GWL_EXSTYLE);
       dwExStyle := dwExStyle + WS_EX_TOOLWINDOW;
       SetWindowLong(Application.Handle, GWL_EXSTYLE, dwExStyle);  Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm2, Form2);
      Application.Run;
    end.
      

  2.   

    谢谢Chen Zhuo,这个方法凑效了。只是又出现了新问题:我在托盘弹出菜单中打开一个新窗口时,原来出现在任务栏的图标这次不出现在任务栏了,改出现在桌面紧贴着任务栏的左下角,让我很是不爽。请Chen Zhuo及其他高手继续指点!
      

  3.   

    桌面紧贴着任务栏的左下角??有这样的事情。
    你可以试试delphi带的trayicon看看会不会,高版本才有,可以去里面copy代码出来
      

  4.   

    是这样的:    我的希望我的程序正常运行时只显示托盘图标,因此使用了CoolTrayIcon并设置MinimizeToTray,然后主窗口最小化时任务栏图标会消失。可是当我在托盘菜单中打开新窗口时(如比选择“选项”菜单,然后打开一个窗口让用户设置选项),任务栏图标又会重新出现(新窗口关闭才任务栏图标也会跟着消失)。我不希望看到这种效果,于是发此帖求助。使用了Chen Zhuo的方法之后,程序图标不出现在任务栏了,改出现在桌面窗口最左下角:-(    继续求助。
      

  5.   

    那个是最小化窗口,在选项窗口里加入:
    Private
       procedure OnMiniMize(var msg:TMessage);message WM_SYSCOMMAND;procedure TOptionForm.OnMiniMize(var msg: TMessage);
    begin
     if LOWORD(msg.WParam)=SC_MINIMIZE then Close;
    end;//即当最小化选项窗口时,直接将其关闭
      

  6.   

    谢谢HsWong,不过情况不是这样的。选项窗口是正常显示的,并未最小化。我说的情况是,选项窗口正常显示的时候,Application的窗口出现在任务栏或者桌面左下角,无法隐藏。
      

  7.   

    另外,我试了一下手工创建窗口的方法:procedure CreateWindowExx;
    var
      hWnd     : THandle;
      Msg      : TMsg;
      wndClass : TWndClass;
    begin
       wndClass.style          := CS_HREDRAW or CS_VREDRAW;
       wndClass.lpfnWndProc    := @DefWindowProc;
       wndClass.cbClsExtra     := 0;
       wndClass.cbWndExtra     := 0;
       wndClass.hInstance      := hInstance;
       wndClass.hIcon          := LoadIcon(0, IDI_APPLICATION);
       wndClass.hCursor        := LoadCursor(0, IDC_ARROW);
       wndClass.hbrBackground  := HBRUSH(GetStockObject(WHITE_BRUSH));
       wndClass.lpszMenuName   := nil;
       wndClass.lpszClassName  := 'GettingStarted';   Windows.RegisterClass(wndClass);   hWnd := CreateWindow(
          'GettingStarted',       // window class name
          'Drawing Opaque and Semitransparent Lines 1',       // window caption
          WS_OVERLAPPEDWINDOW,    // window style
          Integer(CW_USEDEFAULT), // initial x position
          Integer(CW_USEDEFAULT), // initial y position
          Integer(CW_USEDEFAULT), // initial x size
          Integer(CW_USEDEFAULT), // initial y size
          0,                      // parent window handle
          0,                      // window menu handle
          hInstance,              // program instance handle
          nil);                   // creation parameters   ShowWindow(hWnd, SW_SHOW);
       UpdateWindow(hWnd);
    end;这个窗口在显示的时候不会导致Application窗口现身。不知道它与Delphi创建的窗口区别在哪里。Help!Help!
      

  8.   

    加多个参数:
      dwExStyle := dwExStyle or WS_EX_TOOLWINDOW or WS_EX_LAYERED;
      

  9.   

    //我说的情况是,选项窗口正常显示的时候,Application的窗口出现在任务栏或者桌面左下角,无法隐藏。你翻翻前几天的帖子,好象谈到了这个问题,找不到的话,可以尝试利用ITaskbarList接口解决此问题
      

  10.   

    我用这个参数做下实验。
    dwExStyle := dwExStyle or WS_EX_TOOLWINDOW or WS_EX_LAYERED; 
    主窗口最小化或者关闭的时候,将它Hide
    再打到其它窗口的时候,非常干净。