用TNotifyIconData做出了托盘图标,怎样动态指定其中的提示文字?(150分)

  • 主题发起人 主题发起人 leonstart
  • 开始时间 开始时间
L

leonstart

Unregistered / Unconfirmed
GUEST, unregistred user!
静态指定很简单,直接给szTip赋值就可以了,但动态如何指定呢?<br>另外,如何在程序最小化时缩到托盘图标中,而不是缩到任务栏?
 
var<br>&nbsp; pSMsg: String;<br>&nbsp; lpData:PNotifyIconData;<br>begin<br>&nbsp; lpData := new(PNotifyIconDataA);<br>&nbsp; lpData.cbSize := 88;<br>&nbsp; lpData.Wnd := Form1.Handle;<br>&nbsp; lpData.hIcon := Image1.Picture.Icon.Handle;<br>&nbsp; lpData.uCallbackMessage := WM_BARICON;<br>&nbsp; lpData.uID := 0;<br>&nbsp; pSMsg := '点击打开....';<br>&nbsp; StrToArrOfChar(pSMsg,lpData.szTip);<br>&nbsp; lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;<br>&nbsp; Shell_NotifyIcon(NIM_MODIFY,lpData);<br>&nbsp; dispose(lpData);<br>end;
 
不是缩到托盘里,<br>你的窗口隐藏就行了。<br>在win me下,只要form1.hide就一切ok,<br>在win 95,98下<br>&nbsp; {隐藏图标}<br>&nbsp; SetWindowLong(application.Handle,GWL_EXSTYLE,<br>&nbsp; WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW or WS_EX_TOPMOST);<br>&nbsp; {从任务栏隐藏,在nt下出错,在win me下没试过}<br>&nbsp; RegisterServiceProcess(GetCurrentProcessID,1);<br>
 
1:对HINT属性赋值就可以了<br>2:在程序最小化事件中加上self.hide就可以
 
http://delphi.mychangshu.com/dispdoc.asp?id=540<br>在此Timer的时间到事件中改成:<br>procedure TForm1.Timer1Timer(Sender: TObject);<br>var<br>&nbsp; tips: String;<br>begin<br>&nbsp; Inc(IconIndex);<br>&nbsp; if IconIndex &gt; iconList.Count - 1 then IconIndex := 0;<br>&nbsp; IconList.GetIcon(IconIndex, Icon);<br>&nbsp; TrayInfoID.hIcon := Icon.Handle;<br>&nbsp; tips := 'Demo how to Add Icon to Tray - Icon:'+IntToStr(IconIndex);<br>&nbsp; StrLCopy(TrayInfoID.szTip, PChar(tips),<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SizeOf(TrayInfoID.szTip));<br>&nbsp; Shell_NotifyIcon(NIM_MODIFY, @TrayInfoID);<br>end;<br><br>
 
第一个问题我已经搞定。<br>用的方法是StrPCopy转换一下字符,然后在TIMER里动态NIM_MODIFY,和yhaochuan的方法<br>差不多,不过是我自己摸索出来的哦,呵呵。。。<br>不过第二个问题还没有解决,程序缩小到任务栏那个当然是没问题,但我是在按钮事件里<br>写的,如何能在程序最小化的时候缩小到任务栏呢?<br>to cxx1997 你说“2:在程序最小化事件中加上self.hide就可以”,能把代码写出来吗?
 
procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; ShowWindow(Application.Handle, SW_HIDE);<br>&nbsp; SetWindowLong(Application.Handle, GWL_EXSTYLE,<br>&nbsp; &nbsp; GetWindowLong(Application.Handle, GWL_EXSTYLE)<br>&nbsp; &nbsp; or WS_EX_TOOLWINDOW );<br>&nbsp; ShowWindow(Application.Handle, SW_SHOW);<br>end;<br><br>效果是:在任务栏无按钮,不管FORM显示不显示。<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=846573
 
窗体的隐藏已经实现,但是是在按钮事件里触发的。问题是如何在窗体最小化时实现这一点。<br>Form好像没有最小化事件啊。
 
使用控件TApplicationEvents,里面的onMinimize事件。
 
多人接受答案了。
 
后退
顶部