如何关闭时隐藏程序而不退出?点拖盘图标后再显示出来 一是关闭时隐藏,任务栏也要隐藏二是点拖盘图标时显示主窗体,任务栏也要显示。请分别给出代码 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 {Demo:关闭主窗体时隐藏主窗体和任务栏按钮,托盘显示图标; 右击托盘图标时主窗体和任务栏按钮重新显示,托盘图标消失; 左击托盘图标时退出程序}unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;const WM_IconMessage = WM_User + 1000;type TForm1 = class(TForm) procedure OnIconNotify(var Msg: TMessage); message WM_IconMessage; procedure FormShow(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementationuses ShellAPI;{$R *.dfm}var Ntf: TNotifyIconData;procedure TForm1.OnIconNotify(var Msg: TMessage);begin if Msg.LParam = WM_RButtonDown then Show; if Msg.LParam = WM_LButtonDown then Application.Terminate;end;procedure TForm1.FormShow(Sender: TObject);begin Shell_NotifyIcon(NIM_DELETE, @Ntf); ShowWindow(Application.Handle, SW_Show);end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin with Ntf do begin cbSize := SizeOf(Ntf); Wnd := Self.Handle; uID := 1; uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; uCallbackMessage := WM_IconMessage; hIcon := Application.Icon.Handle; szTip := 'Mouse Down Here!'; end; ShellApi.Shell_NotifyIcon(NIM_ADD, @Ntf); Self.Hide; ShowWindow(Application.Handle, SW_Hide); CanClose := False;end;end. 参考如下代码unit MainFrm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, ScktComp, ImgList, IniFiles, ShellApi, Menus, DateUtils;const ICON_ID = 1; MI_ICONEVENT = WM_USER + 1;type TfrmMain = class(TForm) Bevel: TBevel; pmMain: TPopupMenu; miAbout: TMenuItem; N1: TMenuItem; miExit: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure btnCloseClick(Sender: TObject); procedure miExitClick(Sender: TObject); procedure miAboutClick(Sender: TObject); private FIconData: TNotifyIcondata; { Private declarations } procedure SetupIcon; procedure IconOnClick(var Msg: TMessage); message MI_ICONEVENT; procedure WMSysCommand(var msg: TWMSysCommand); message WM_SysCommand; public { Public declarations } end;var frmMain: TfrmMain; HwndMutex: THandle;implementation{$R *.dfm}procedure TfrmMain.FormCreate(Sender: TObject);begin SetupIcon;end;procedure TfrmMain.FormDestroy(Sender: TObject);begin Shell_NotifyIcon(NIM_Delete, @FIconData);end;procedure TfrmMain.IconOnClick(var Msg: TMessage);var P: TPoint;begin case Msg.LParam of WM_LBUTTONDOWN: begin FrmMain.Show; FrmMain.WindowState := wsNormal; SetForegroundWindow(FrmMain.Handle); end; WM_RBUTTONDOWN: begin GetCursorPos(P); pmMain.Popup(P.X, P.Y); end; end;end;procedure TfrmMain.WMSysCommand(var msg: TWMSysCommand);begin if Msg.CmdType and $FFF0 = SC_Close then begin //将窗体最小化并隐藏 WindowState := wsMinimized; Hide; end else if msg.CmdType and $FFF0 = SC_MINIMIZE then begin WindowState := wsMinimized; Hide; end else inherited;end;procedure TfrmMain.SetupIcon;begin with FIconData do begin FIconData.cbSize := SizeOf(FIconData); FIconData.Wnd := Handle; FIconData.uID := Icon_ID; FIconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; FIconData.uCallbackMessage := MI_ICONEVENT; FIconData.hIcon := Application.Icon.Handle; FIconData.szTip := 'TrayIcon V1.0'; end; Shell_NotifyIcon(NIM_ADD, @FIconData);end;procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin CanClose := MessageBox(Handle, '确定要退出程序?', '提示', MB_YESNO or MB_ICONQUESTION) = mrYES;end;procedure TfrmMain.btnCloseClick(Sender: TObject);begin WindowState := wsMinimized; Hide;end;procedure TfrmMain.miExitClick(Sender: TObject);begin Close;end;procedure TfrmMain.miAboutClick(Sender: TObject);begin ShellAbout(Handle, PChar(Application.Title), 'TrayIcon Demo', Application.Icon.Handle);end;end.测试可以达到你的要求 用CoolTrayIcon组件,太方便了,呵呵,而且D2007中也自带了类似组件. 谢谢各位 我解决了 是程序本身的一个BUG导致了之前没有实现,现在好了,结贴。另外我用的就是CoolTrayIcon,谢谢lihuasoft朋友捐的分。 多线程编程中对VCL的锁定问题,望高手指教! 高级查询问题 窗口淡入淡出,急 谁有INDY控件的详细使用资料或源程序? 散分2000!答者有分!关于用Delphi编写8583报文格式。 关于 TDBCHART 的问题? D6中try…except…是不是有问题? 初学delphi,又是一个小问题,请教了。 菜鸟从vb转向,问个很菜的问题!!!!! TAPI中如何实现监听状态? 7年了,现在终于能做好数据库项目了.写了个框架,开发两层快如飞,想和大家交流下. 想更改edit的消息,但是我的edit不接受任何消息。请看看
{Demo:关闭主窗体时隐藏主窗体和任务栏按钮,托盘显示图标;
右击托盘图标时主窗体和任务栏按钮重新显示,托盘图标消失;
左击托盘图标时退出程序
}unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;const
WM_IconMessage = WM_User + 1000;type
TForm1 = class(TForm)
procedure OnIconNotify(var Msg: TMessage); message WM_IconMessage;
procedure FormShow(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses ShellAPI;
{$R *.dfm}var
Ntf: TNotifyIconData;procedure TForm1.OnIconNotify(var Msg: TMessage);
begin
if Msg.LParam = WM_RButtonDown then Show;
if Msg.LParam = WM_LButtonDown then Application.Terminate;
end;procedure TForm1.FormShow(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @Ntf);
ShowWindow(Application.Handle, SW_Show);
end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
with Ntf do begin
cbSize := SizeOf(Ntf);
Wnd := Self.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
uCallbackMessage := WM_IconMessage;
hIcon := Application.Icon.Handle;
szTip := 'Mouse Down Here!';
end;
ShellApi.Shell_NotifyIcon(NIM_ADD, @Ntf);
Self.Hide;
ShowWindow(Application.Handle, SW_Hide);
CanClose := False;
end;end.
unit MainFrm;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, ScktComp, ImgList, IniFiles, ShellApi,
Menus, DateUtils;const
ICON_ID = 1;
MI_ICONEVENT = WM_USER + 1;type
TfrmMain = class(TForm)
Bevel: TBevel;
pmMain: TPopupMenu;
miAbout: TMenuItem;
N1: TMenuItem;
miExit: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure btnCloseClick(Sender: TObject);
procedure miExitClick(Sender: TObject);
procedure miAboutClick(Sender: TObject);
private
FIconData: TNotifyIcondata;
{ Private declarations }
procedure SetupIcon;
procedure IconOnClick(var Msg: TMessage); message MI_ICONEVENT;
procedure WMSysCommand(var msg: TWMSysCommand); message WM_SysCommand;
public
{ Public declarations }
end;var
frmMain: TfrmMain;
HwndMutex: THandle;implementation{$R *.dfm}procedure TfrmMain.FormCreate(Sender: TObject);
begin
SetupIcon;
end;procedure TfrmMain.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_Delete, @FIconData);
end;procedure TfrmMain.IconOnClick(var Msg: TMessage);
var
P: TPoint;
begin
case Msg.LParam of
WM_LBUTTONDOWN:
begin
FrmMain.Show;
FrmMain.WindowState := wsNormal;
SetForegroundWindow(FrmMain.Handle);
end;
WM_RBUTTONDOWN:
begin
GetCursorPos(P);
pmMain.Popup(P.X, P.Y);
end;
end;
end;procedure TfrmMain.WMSysCommand(var msg: TWMSysCommand);
begin
if Msg.CmdType and $FFF0 = SC_Close then
begin //将窗体最小化并隐藏
WindowState := wsMinimized;
Hide;
end
else if msg.CmdType and $FFF0 = SC_MINIMIZE then
begin
WindowState := wsMinimized;
Hide;
end
else inherited;
end;procedure TfrmMain.SetupIcon;
begin
with FIconData do
begin
FIconData.cbSize := SizeOf(FIconData);
FIconData.Wnd := Handle;
FIconData.uID := Icon_ID;
FIconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
FIconData.uCallbackMessage := MI_ICONEVENT;
FIconData.hIcon := Application.Icon.Handle;
FIconData.szTip := 'TrayIcon V1.0';
end;
Shell_NotifyIcon(NIM_ADD, @FIconData);
end;procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := MessageBox(Handle, '确定要退出程序?', '提示', MB_YESNO or MB_ICONQUESTION) = mrYES;
end;procedure TfrmMain.btnCloseClick(Sender: TObject);
begin
WindowState := wsMinimized;
Hide;
end;procedure TfrmMain.miExitClick(Sender: TObject);
begin
Close;
end;procedure TfrmMain.miAboutClick(Sender: TObject);
begin
ShellAbout(Handle, PChar(Application.Title), 'TrayIcon Demo', Application.Icon.Handle);
end;end.测试可以达到你的要求