如何最小化到托盘?(50分)

  • 主题发起人 主题发起人 真水无香
  • 开始时间 开始时间

真水无香

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位大侠,如何将应用程序最小化到托盘?再通过单击使其弹出呢/
 
建议你全文检索一下,到处都是。。。呵呵
 
拦截关闭消息!只隐藏。
 
用CoolTrayIcon控件,應該就可搞定.
 
application.Hint := stAppName;<br> &nbsp; &nbsp;TrayIcon1 := TTrayIcon.Create(self);<br> &nbsp; &nbsp;TrayIcon1.Hint := stAppName;<br> &nbsp; &nbsp;TrayIcon1.ShowHint := true;<br> &nbsp; &nbsp;TrayIcon1.Icon.Assign(Application.Icon);<br> &nbsp; &nbsp;TrayIcon1.IconVisible := true;<br> &nbsp; &nbsp;TrayIcon1.PopupMenu := PopupMenu1;<br> &nbsp; &nbsp;TrayIcon1.OnDblClick := pmShowClick;<br> &nbsp; &nbsp;TrayIcon1.OnClick := pmShowClick;<br><br>procedure Tfm_main.ApplicationEvents1Minimize(Sender: TObject);<br>begin<br> &nbsp;TrayIcon1.HideMainForm;<br>end;<br><br>procedure Tfm_main.pmShowClick(Sender: TObject);<br>begin<br> &nbsp;TrayIcon1.ShowMainForm;<br> &nbsp;//ShowModal;<br>end;
 
这个如何:<br><br>---- 2、如何以小图标形式显示在系统的Tray小图标区? <br><br>---- Windows 95/98是基于事件驱动机制的操作系统。任何一个控件都是通过发消息<br>或对系统消息的处理来实现功能的。系统的Tray小图标区实际上也是一个标准控件。<br>对它的控制和操纵,与其他的标准控件一样,也是通过发送消息和处理消息进行的。<br>应用程序通过系统功能调用Shell_NotifyIcon向Tray小图标区发送消息,即可达到我<br>们的目的。 <br><br> Shell_NotifyIcon函数包含在单元ShellApi中,说明如下:<br> function Shell_NotifyIcon(dwMessage: DWORD; <br>lpData: PNotifyIconData): BOOL; stdcall;<br> 其中:<br> dwMessage:要发给Tray小图标区的消息,<br>可以取以下三个值:<br>NIM_ADD &nbsp; &nbsp; &nbsp; 在Tray小图标区上增加一个图标<br>NIM_MODIFY &nbsp; &nbsp;修改一个Tray小图标区的图标<br>    NIM_DELETE &nbsp; &nbsp;删除Tray小图标区的一个图标<br> lpData:指向TNotifyIconDataA结构的指针,<br>此结构是要增加的图标的信息。<br> PNotifyIconData = ^TNotifyIconDataA<br> TNotifyIconDataA = record<br>    cbSize : DWORD;<br>    Wnd : HWND;<br>    uID : UINT;<br>    uFlags : UINT;<br>    uCallbackMessage : UINT;<br>    hIcon : HICON;<br>    szTip : array [0..63] of AnsiChar;<br> end;<br><br>---- 各字段的含义如下所述: <br>cbSize:记录TNotifyIconDataA的大小,<br>设置为SizeOf( TNotifyIconDataA);<br>Wnd:接收Tray小图标区鼠标事件的窗口<br>的句柄,例如:MainForm.Handle;<br>uID:图标的ID(Tray小图标区鼠标<br>事件的wPara参数的值);<br>uFlags:此条消息的有效范围(低三位有效)<br>NIF_MESSAGE &nbsp; &nbsp;0x1 // uCallbackMessage参数有效<br>NIF_ICON &nbsp; &nbsp;0x2 // hIcon is valid参数有效<br>NIF_TIP &nbsp; &nbsp; &nbsp; &nbsp;0x4 // szTip is valid参数有效<br>uCallbackMessage:系统回送消息的ID;<br>hIcon:显示在Tray小图标区上的图标的句柄;<br>szTip:鼠标移动到图标上时系统显示的提示信息。<br> <br>增加小图标程序如下:<br> procedure TMainForm.InstallIcon;<br> var IconData: TNotifyIconData;<br> begin<br> &nbsp; &nbsp; &nbsp;CdRomIcon := TIcon.Create;<br> &nbsp; &nbsp; &nbsp;CdRomIcon.LoadFromFile( 'cddrive.ico' );<br> &nbsp; &nbsp; &nbsp;IconData.cbSize := SizeOf( IconData );<br> &nbsp; &nbsp; &nbsp;IconData.Wnd := Handle;<br> &nbsp; &nbsp; &nbsp;IconData.uID := 1;<br> &nbsp; &nbsp; &nbsp;IconData.uFlags := NIF_ICON <br> &nbsp; &nbsp; &nbsp;or NIF_MESSAGE or NIF_TIP;<br> &nbsp; &nbsp; &nbsp;IconData.uCallBackMessage := WM_USER+1;<br> &nbsp; &nbsp; &nbsp;IconData.hIcon := CdRomIcon.Handle;<br> &nbsp; &nbsp; &nbsp;IconData.szTip := 'CDROM软开关';<br> &nbsp; &nbsp; &nbsp;Shell_NotifyIcon( NIM_ADD, @IconData );<br> end;<br><br>---- 记住,在单元的USES子句中,别忘了要加上ShellApi单元。 <br><br>---- 3、如何响应Tray小图标区上图标的鼠标事件? <br>---- 当用户在你的图标上移动、点击时,Tray小图标区会向应用程序发送如下的消息: <br>   messageID = uCallbackMessage<br>   wParam = uID<br>   lParam = mouse event (如:WM_LBUTTONDOWN)<br><br>---- 我们只需在主窗口的定义中,声明一个过程,来响应这个消息,在它的实现部分就<br>可以对消息进行处理了。 消息处理函数声明: <br> procedure IconOnClick(var message:<br> TMessage); message WM_USER+1;<br> 实现过程:<br> procedure TMainForm.IconOnClick<br>( var message: Tmessage);<br> var p : TPoint;<br> begin<br> if (message.lParam = WM_LBUTTONDOWN) then<br> &nbsp; ShowWindow(Handle, SW_SHOW );<br> if (message.lParam = WM_RBUTTONDOWN) then<br> begin<br> GetCursorPos(p);<br> pop1.Popup( p.x ,p.y );<br> end;<br> end;<br>---- 其中,pop1为在主窗口中定义的弹出式菜单。 <br><br>---- 4、如何控制系统任务栏上不显示应用程序? <br>---- 通常的Windows程序在启动后,会在系统任务栏上显示一个小窗口,我们既然<br>已有了小图标,就没必要再显示一个小窗口了。 <br>---- 这可以通过下列函数实现 <br>SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);<br>ShowWindow(Handle, SW_HIDE);
 
多人接受答案了。
 
后退
顶部