一个托盘程序的问题 托盘程序,想做成这样:在主画面状态下,点任务栏,就收回到系统托盘。(就像flashgetg那样子)要怎么做呢?(主要是怎么获取用户点击了该程序的任务栏这个消息)还有一个问题,怎么执行windows的刷新动作,调用哪个api函数? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 抄来的,你看看行不?呵呵WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, // message identifier PNOTIFYICONDATA pnid // pointer to structure ); 参数说明: dwMessage 向系统发出的对任务条状态区图标的控制消息,可以为以下三个值: NIM_ADD 向任务条状态区添加图标. NIM_DELETE 删除任务条状态区的图标. NIM_MODIFY 更换任务条状态区的图标. pnid 指向记录型数据NOTIFYICONDATA的指针.返回值:成功则返回非零值,失败则返回零值。typedef struct _NOTIFYICONDATA { DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; HICON hIcon; char szTip[64]; } NOTIFYICONDATA, *PNOTIFYICONDATA; 记录成员:cbSize记录型数据NOTIFYICONDATA的大小 .hWnd需要在任务条状态区生成图标的应用程序窗口的句柄。uID应用程序定义的任务条图标的标识.uFlags显示其他成员是否有确定的数据标志性数组,其他成员有:NIF_ICON 确认hIcon成员. NIF_MESSAGE 确认uCallbackMessage成员.NIF_TIP 确认szTip成员. uCallbackMessage当鼠标事件发生在任务条图标区域时所发出的应用程序自定义的消息。hIcon要操作的图标的句柄。szTip图标所显示的hint文字. 我看书上的程序自己做的,应该可以满足你要求了。unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI, StdCtrls, Menus, AppEvnts;const WM_TrayMessage=WM_User+500;type TForm1 = class(TForm) CheckBox1: TCheckBox; PopupMenu1: TPopupMenu; Hello1: TMenuItem; World1: TMenuItem; procedure CheckBox1Click(Sender: TObject); procedure Hello1Click(Sender: TObject); procedure World1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private NID: TNotifyIconData; { Private declarations } public procedure WMTrayMessage(var msg:TMessage);message WM_TrayMessage; //建立wm_traymessage的映射。 //声明是traymessage,只要tray有message,那么就会执行wmtraymessage procedure wmsyscommand(var Msg:TWMSysCommand); message WM_SYSCOMMAND; //托盘图标的返回消息 end;var Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.WMTrayMessage(var msg: TMessage);var p:TPoint;begin if (Msg.LParam=WM_LBUTTONDBLCLK) then begin MessageDlg('您在任务栏图标上按双击左键', mtInformation, [mbOK], 0); end; if msg.LParam=WM_RButtonDown then begin GetCursorPos(p); //取光标位置 PopupMenu1.Popup(p.x,p.y); //弹出菜单 end; if (msg.LParam=WM_LButtonDown) and Form1.Enabled then begin Form1.Visible:=not Form1.Visible;// Shell_NotifyIcon(NIM_DELETE,@NID); end;end;procedure TForm1.CheckBox1Click(Sender: TObject);begin if CheckBox1.Checked then Shell_NotifyIcon(NIM_ADD,@NID) else Shell_NotifyIcon(NIM_DELETE,@NID); {Shell_NotifyIcon是tray区编程函数,它只有两个参数 第一个参数可为:nim_add :向tray区增加一个图标 nim_delete:删除tray区一个图标 nim_modify:修改tray区一个图标 第二个参数包含的信息可以用于系统对任务tray区的处理 }end;procedure TForm1.Hello1Click(Sender: TObject);begin MessageDlg('Hello!', mtInformation, [mbOK], 0);end;procedure TForm1.World1Click(Sender: TObject);begin MessageDlg('World!', mtInformation, [mbOK], 0);end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin CheckBox1.Checked := False;end;procedure TForm1.wmsyscommand(var Msg: TWMSysCommand);begin if (Msg.CmdType=SC_MINIMIZE) or (Form1.Enabled=false) THEN begin Shell_NotifyIcon(NIM_ADD,@NID); Form1.Hide; end else INHERITED; //如果消息是mimimize,就处理消息,否则,让它继续传下去。end;procedure TForm1.FormCreate(Sender: TObject);begin NID.cbSize:=SizeOf(TNotifyIconData); NID.hIcon:=Application.Icon.Handle; NID.szTip:='欢迎使用任务栏图标'; NID.uCallbackMessage:=WM_TrayMessage; NID.uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP; {uflags描述那些项有效 nif_icon:hicon有效 nif_message:ucallbackmessage有效 nif_tip:tip有效} NID.uID:=0;//uID域是程序员定义的一个唯一标识符。如果一个应用程序有多个托盘图标,则每个图标需要有唯一的I D NID.Wnd:=Handle;{tray区返回消息的对象,这些消息将用户对tray区图标的操作通知给程序}end;procedure TForm1.FormDestroy(Sender: TObject);begin Shell_NotifyIcon(NIM_DELETE,@NID);end;end. 搞那么麻烦干什么,网上有现成的控件叫trayicon,Down一个下来,想学的的话,研究研究源码这个控件有多种效果 delphi webbrowser1 中 单选 如何选定单选框的值 有 0 和 1 高分求救--如何得到dbtreeview树形结构中某个节点的所有子孙? batchmove 中的更新和追加更新有什么区别 table.findnearest相当于什么样的SQL语句? rxlib275 能在d6 d7上面安装吗?怎么安装? 如何在dbf表中的当前记录后插入一条记录? 关于BDE+ACCESS ? 求救!!!!!!!!!!!! DELPHI 应用的问题 西安有没有delphi高手? 请问这段代码可否打开并口,并发送数据?在线等! 如何判断某个对话框被激活?
DWORD dwMessage, // message identifier
PNOTIFYICONDATA pnid // pointer to structure
); 参数说明:
dwMessage
向系统发出的对任务条状态区图标的控制消息,可以为以下三个值: NIM_ADD 向任务条状态区添加图标.
NIM_DELETE 删除任务条状态区的图标.
NIM_MODIFY 更换任务条状态区的图标.
pnid 指向记录型数据NOTIFYICONDATA的指针.返回值:成功则返回非零值,失败则返回零值。typedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA; 记录成员:cbSize记录型数据NOTIFYICONDATA的大小 .hWnd需要在任务条状态区生成图标的应用程序窗口的句柄。uID应用程序定义的任务条图标的标识.uFlags显示其他成员是否有确定的数据标志性数组,其他成员有:NIF_ICON 确认hIcon成员.
NIF_MESSAGE 确认uCallbackMessage成员.
NIF_TIP 确认szTip成员.
uCallbackMessage当鼠标事件发生在任务条图标区域时所发出的应用程序自定义的消息。hIcon要操作的图标的句柄。szTip图标所显示的hint文字.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellAPI, StdCtrls, Menus, AppEvnts;const
WM_TrayMessage=WM_User+500;
type
TForm1 = class(TForm)
CheckBox1: TCheckBox;
PopupMenu1: TPopupMenu;
Hello1: TMenuItem;
World1: TMenuItem;
procedure CheckBox1Click(Sender: TObject);
procedure Hello1Click(Sender: TObject);
procedure World1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
NID: TNotifyIconData;
{ Private declarations }
public
procedure WMTrayMessage(var msg:TMessage);message WM_TrayMessage;
//建立wm_traymessage的映射。
//声明是traymessage,只要tray有message,那么就会执行wmtraymessage
procedure wmsyscommand(var Msg:TWMSysCommand); message WM_SYSCOMMAND;
//托盘图标的返回消息 end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.WMTrayMessage(var msg: TMessage);
var
p:TPoint;
begin
if (Msg.LParam=WM_LBUTTONDBLCLK) then
begin
MessageDlg('您在任务栏图标上按双击左键', mtInformation, [mbOK], 0);
end;
if msg.LParam=WM_RButtonDown then
begin
GetCursorPos(p); //取光标位置
PopupMenu1.Popup(p.x,p.y); //弹出菜单
end;
if (msg.LParam=WM_LButtonDown) and Form1.Enabled then
begin
Form1.Visible:=not Form1.Visible;
// Shell_NotifyIcon(NIM_DELETE,@NID);
end;
end;procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then Shell_NotifyIcon(NIM_ADD,@NID) else Shell_NotifyIcon(NIM_DELETE,@NID);
{Shell_NotifyIcon是tray区编程函数,它只有两个参数
第一个参数可为:nim_add :向tray区增加一个图标
nim_delete:删除tray区一个图标
nim_modify:修改tray区一个图标
第二个参数包含的信息可以用于系统对任务tray区的处理
}
end;procedure TForm1.Hello1Click(Sender: TObject);
begin
MessageDlg('Hello!', mtInformation, [mbOK], 0);
end;procedure TForm1.World1Click(Sender: TObject);
begin
MessageDlg('World!', mtInformation, [mbOK], 0);
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CheckBox1.Checked := False;
end;procedure TForm1.wmsyscommand(var Msg: TWMSysCommand);
begin
if (Msg.CmdType=SC_MINIMIZE) or (Form1.Enabled=false) THEN
begin
Shell_NotifyIcon(NIM_ADD,@NID);
Form1.Hide;
end
else
INHERITED;
//如果消息是mimimize,就处理消息,否则,让它继续传下去。
end;procedure TForm1.FormCreate(Sender: TObject);
begin
NID.cbSize:=SizeOf(TNotifyIconData);
NID.hIcon:=Application.Icon.Handle;
NID.szTip:='欢迎使用任务栏图标';
NID.uCallbackMessage:=WM_TrayMessage;
NID.uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
{uflags描述那些项有效
nif_icon:hicon有效
nif_message:ucallbackmessage有效
nif_tip:tip有效}
NID.uID:=0;
//uID域是程序员定义的一个唯一标识符。如果一个应用程序有多个托盘图标,则每个图标需要有唯一的I D
NID.Wnd:=Handle;{tray区返回消息的对象,这些消息将用户对tray区图标的操作通知给程序}
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@NID);
end;end.
这个控件有多种效果