就像qq的主窗口那样,搜索过了dwExStyle := GetWindowLong(Application.Handle, GWL_EXSTYLE);
  SetWindowLong(Application.Handle, GWL_EXSTYLE, dwExStyle    OR   WS_EX_TOOLWINDOW
  AND   NOT   WS_EX_APPWINDOW);实验证明没有效果,放在project里不行,formshow里也不行 ShowWindow(Application.Handle,   SW_HIDE);在project里不行,formshow里面可行,但程序一旦动态创建窗口并打开的话,任务栏按钮又出来了……我该怎么做才能做得像qq主窗口那样?
请指教

解决方案 »

  1.   

    用你第一种方法可行,放在OnCreate里面。procedure TForm1.FormCreate(Sender: TObject);
    begin
      SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
    end;
      

  2.   

    回楼上,实现证明不行
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);end;end.projectprogram Project1;uses
      Forms,
      windows,
      Unit1 in 'Unit1.pas' {Form1};{$R *.res}
    var
      dwExStyle:dword;
    begin
      Application.Initialize;
    //  Application.MainFormOnTaskbar := True;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
      

  3.   

    在工程代码中:
    Application.MainFormOnTaskbar:=False;
    (D7及以前版本不支持)
      

  4.   

    我也有类似的困惑!
    隐藏一个其他正在运行中的程序的任务栏图标,要么使用showwindow(handle,sw_hide),或者使用 
    SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW),当然方法是非常有效的, 但是,如果需要被隐藏的程序是Delphi开发的,怎么就没法隐藏其任务栏图标了,只隐藏了窗口!
      

  5.   

    看看窗口是否使用同一个Application,我在DLL中创建窗口时曾经遇到过这样的问题,后来把Application.handle设置为主程序的就可以了
      

  6.   

    你的D是什么版本的
    7以下的 不支持
    我是D7我这是可以的procedure TForm1.FormCreate(Sender: TObject);
    begin
      SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
    end;
      

  7.   

    回楼上各位
    小弟的是2007
    Application.MainFormOnTaskbar:=False; 
    也试过了,不行小弟的工程只有一个线程,代码就这么简单(2楼)
      

  8.   

    偶记得D7里貌似也有设置是否在TASKBAR上显示的吧...
      

  9.   

    SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);还是设置样式吧...D7里貌似没有... 
      

  10.   

    在FormShow里
      ShowWindow( Application.Handle, SW_HIDE );
      

  11.   

    FormShow里 
      ShowWindow( Application.Handle, SW_HIDE );
    不行?不会吧,应该可以的
      

  12.   

    回楼上两位
    在project里不行,formshow里面可行,但程序一旦动态创建窗口并打开的话,任务栏按钮又出来了…… 
      

  13.   

    回楼上
    我2楼就贴出了我测试工程的所有代码了,这个情况下是隐藏不了任务栏按钮
    然后顶楼里面关于动态创建窗口的那个formshow代码,确实会再出现任务栏按钮,而且每次formshow触发的时候,任务栏都会先出现按钮,然后一闪之后消失
      

  14.   

    我再放一次测试工程的代码吧,综合了以上大家热心教小弟的方法了
    unit1,主窗口
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    //  SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
    //  ShowWindow( Application.Handle, SW_HIDE );
    //  SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) and not WS_EX_TOOLWINDOW);
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
    //  SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
    //  ShowWindow( Application.Handle, SW_HIDE );//看这里,这里在Application.MainFormOnTaskBar := false;或如下注释掉Application.MainFormOnTaskBar := true;的时候起作用,也确实把任务栏按钮隐藏了,但只要最小化窗口之后又在出现任务栏按钮
    //其他注释的语句无论怎么组合都不能起作用
    end;end.
    project
    program Project1;uses
      Forms,
      windows,
      Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
    //  Application.MainFormOnTaskBar := true;  Application.Run;
    end.麻烦大家研究一下,难道ide的版本之间差异真的那么大么?
      

  15.   

    动态创建窗口并打开就有问题是吧,你就不会在每个FormShow里都写上ShowWindow( Application.Handle, SW_HIDE );
      

  16.   

    我觉得这次应该行了 procedure TForm1.FormShow(Sender: TObject);
    begin
      ShowWindow( Application.Handle, SW_HIDE );
    end;从additional上拉个ApplicationEvents1 放到窗体上,ApplicationEvents1的OnMinimize事件中选择FormShow这个过程关心你一下,最小化后任务栏上也没有了,你可怎么把它弄出来哩 难道再定义个热键sw_normal 纯粹折腾弟兄们
      

  17.   

    回19楼:即使每个formshow都有这句话,任务栏还是会一闪之后才消失按钮
    回20楼:弄出来的话用trayicon就好了,这个没事关于和trayicon,他里面有个hidetaskbaricon的函数,他估计也是调用了ShowWindow( Application.Handle, SW_HIDE );这句,但他说明里面说当有动态窗口或二级窗口创建的时候,任务栏按钮还是会出现,这是windows的默认行为这我就不解了,为什么qq的窗口就能做到?
      

  18.   

    form2:= TForm2.Create(Self);與form2:=TForm2.Create(Application);是不一樣的,我試過,只有後面的才可以!
      

  19.   

    回楼上,我都是create(application)