关于隐藏指定的窗体的任务栏图标 ( 积分: 100 )

  • 主题发起人 主题发起人 gotiger
  • 开始时间 开始时间
G

gotiger

Unregistered / Unconfirmed
GUEST, unregistred user!
一:SetWindowLong是不是只能用在Create下。<br>&nbsp;&nbsp;二:我想用SetWindowLong实现指定的窗体的隐藏。比如我的程序有一个主窗体和一个子窗体。我想把主窗体最小话到系统托盘后(已实现),子窗体显示出来(只显示窗体,不在任务栏显示图标)。<br><br>说明:我每次用SetWindowLong(application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);隐藏的时候,都是把俩个窗体全部隐藏。
 
begin<br>&nbsp;&nbsp;Form1.Hide;&nbsp;&nbsp;//隐藏主窗体<br>&nbsp;&nbsp;Form2.Show;&nbsp;&nbsp;//显示子窗体&nbsp;&nbsp;<br>&nbsp;&nbsp;ShowWindow(Application.Handle,&nbsp;SW_HIDE);&nbsp;&nbsp;//隐藏任务栏图标<br>&nbsp;&nbsp;//TrayIcon1.Visible&nbsp;:=&nbsp;True;&nbsp;&nbsp;//显示系统托盘图标<br>end;
 
ShowWindow(Application.Handle,&nbsp;SW_HIDE);&nbsp;隐藏窗体,某些动作会让它重现。<br>&nbsp;就算用这个隐藏,也会把俩个窗体都隐藏了。这样的话,我点系统托盘图标会显示没有任务栏的主窗体。<br><br>&nbsp;&nbsp;我就是想知道能不能指定的隐藏某窗体的在任务栏的图标。。<br><br>在线等待。。。。。。
 
隐藏某窗体的在任务栏的图标?<br>一般情况下一个程序就一个任务栏图标吧,你每个窗体都有任务栏图标的吗?<br><br>子窗体显示出来(只显示窗体,不在任务栏显示图标)。我上面的代码应该可以实行这个要求的。<br><br>另:用SetWindowLong代替ShowWindow也行啊,不一定要在Create中用的
 
我试了SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);必须在CREAT中&nbsp;在其他如:onshow&nbsp;Onactivate都没用。<br><br>我的想法是:程序运行开始时显示任务栏图标,单击一个按钮以后,主窗体托盘,另一个窗体显示窗体,并隐藏任务栏图标。
 
procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;Form1.Hide;&nbsp;&nbsp;//隐藏主窗体<br>&nbsp;&nbsp;Form2.Show;&nbsp;&nbsp;//显示子窗体&nbsp;&nbsp;<br>&nbsp;&nbsp;ShowWindow(Application.Handle,&nbsp;SW_HIDE);&nbsp;&nbsp;//隐藏任务栏图标<br>&nbsp;&nbsp;SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);&nbsp;&nbsp;//在这里加这句后,用ShowWindow(Application.Handle,&nbsp;SW_SHOW);也不会再显示了<br>&nbsp;&nbsp;//TrayIcon1.Visible&nbsp;:=&nbsp;True;&nbsp;&nbsp;//显示系统托盘图标<br>end;
 
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);&nbsp;&nbsp;<br>貌似没有对应的API来显示任务栏图标的吧。
 
SetWindowLong(Application.Handle,&nbsp;GWL_EXSTYLE,&nbsp;GetWindowLong(Application.Handle,&nbsp;GWL_EXSTYLE)&nbsp;and&nbsp;not&nbsp;WS_EX_TOOLWINDOW);<br>//去掉WS_EX_TOOLWINDOW值
 
首先得感谢你&nbsp;跟踪报道<br><br>我试了SetWindowLong这个函数&nbsp;只能在Create下有效果。你可以试下。<br>是不是在其他下面还要加其他语句?<br>这个完了&nbsp;我就结帖
 
是啊,要刷新窗体,//在OnCreate中修改后在OnShow中刷新了窗体<br>如:<br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;SetWindowLong(Self.Handle,&nbsp;GWL_EXSTYLE,&nbsp;WS_EX_TOOLWINDOW);<br>end;<br>点击Button1时修改为Form1为ToolWindow&nbsp;Style,但是没用反应,如果你移动窗体或试图点最少化按钮时就会看到变化了<br><br>&nbsp;&nbsp;ShowWindow(Self.Handle,&nbsp;SW_HIDE);<br>&nbsp;&nbsp;SetWindowLong(Self.Handle,&nbsp;GWL_EXSTYLE,&nbsp;WS_EX_TOOLWINDOW);<br>&nbsp;&nbsp;ShowWindow(Self.Handle,&nbsp;SW_SHOW);<br>用这三句就能看到变化了,不过会闪烁(隐藏再显示)<br><br>睡了,晚安!
 
你的模糊我没看明白,能不能再详细点。我先给你50分哈。。
 
呵呵,分数不重要,你在窗体上放两个Button,分别试试这两个过程就知道了,<br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;SetWindowLong(Self.Handle,&nbsp;GWL_EXSTYLE,&nbsp;WS_EX_TOOLWINDOW);<br>end;<br><br>procedure&nbsp;TForm1.Button2Click(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;ShowWindow(Self.Handle,&nbsp;SW_HIDE);<br>&nbsp;&nbsp;SetWindowLong(Self.Handle,&nbsp;GWL_EXSTYLE,&nbsp;WS_EX_TOOLWINDOW);<br>&nbsp;&nbsp;ShowWindow(Self.Handle,&nbsp;SW_SHOW);<br>end;<br>先隐藏窗体,再设置窗体Style,再显示窗体,肯定能看到效果;<br>至于有没其它办法,我不太清楚,不过我想应该是有的。<br>SetWindowLong应该不会只能用在OnCreate中。<br><br>另:这两天都不在,希望有高手来解疑答惑
 
继续等待答案。难道没人愿意来解答吗???<br>在说下我的目标::::<br><br>&nbsp;&nbsp;程序运行开始时显示任务栏图标,单击主窗体上一个按钮以后,主窗体托盘(已经实现),另一个窗体显示窗体,并隐藏任务栏图标。&nbsp;然后再单击托盘图标的时候显示主窗体并显示在任务栏的图标。<br><br><br>我表达的应该很清楚了。
 
顶下,放几天了。大虾们....
 
没人答,怎么结帖啊。各位富翁。
 
最后一次&nbsp;高手们,进来吧!
 
有许多API方法可行。如:<br>ShowWindow(Application.Handle,&nbsp;SW_HIDE);&nbsp;&nbsp;//隐藏任务栏图标
 
自己搞定了。放分了!
 
多人接受答案了。
 
后退
顶部