Delphi里用托盘图标的注意事项

题外话,“托盘图标”这个词貌似非微软的官方术语,官方文档都叫Notify Icon,不过“世上本没有路,走的人多了,也便成了路”,所以说起Tray Icon,知道的人反而更多些。

  1. Main Form的WM_SYSCOMMAND消息这个要捕获,当WPARAM为SC_MINIMIZE时,表示用户点击了主窗口右上角的最小化按钮,这时隐藏主窗口并显示托盘图标,然后直接返回,否则应该用inherited关键字让默认的处理函数执行。
  2. 隐藏的Application窗口的WM_SYSCOMMAND消息也要捕获,同样WPARAM为SC_周MINIMIZE时,表示用户用鼠标右键点击了任务栏上程序窗口按钮时,在出现的系统菜单上选择了“最小化”;另外,用户按下Alt+Space组合键调出的主窗口系统菜单,其实是也是Application窗口的。(捕获这个消息可以用TApplicationEvents的OnMessage事件,同样的,当自己要处理的时候,令Handled这个var参数为True)。
  3. 通常要在主窗口的OnCloseQuery事件里,让用户关闭主窗口的行为变成最小化主窗口(因为很多人都觉得自己的程序是有史以来最牛逼的程序,舍不得被用户关掉)。
  4. 按惯例,右键单击托盘图标时应该出来Popup菜单,这个菜单里如果提供Exit选项,就应该直接关掉主窗口了,所以要通过某种方法(比如一个标志变量)让OnCloseQuery事件里的处理代码知道,现在是不是真的要关闭主窗口了。
  5. 程序退出时不要忘记把托盘图标清理了,不然就会留下一个尾巴——托盘图标还残留在那里,当用户将鼠标移到那个托盘图标时,它忽然就消失了。

你可能感兴趣的:(application,文档,任务,Delphi,微软)