教你个最简单的方法: 步陬1.主窗体为form1,将form1设置成透明,并把大小缩成一个点,放在角落。 步陬2.双击主窗体,加入代码:SetWindowLong(Application.handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); 在您的程序中加入这两步就可以实现程序一启动主窗口不显示。 其实原理是一样的吧,最小化的时候捕获SYSCOMMAND消息,把窗口最小化到左下角处 再加一个托盘图标。 那么你程序一运行,Onshow事件中,发送最小化消息不就行啦 postMessage(Application.handle,WM_SYSCOMMAND,SC_MINIMIZE,0); unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ShellAPI; const WM_BARICON=WM_USER+200; type TForm1 = class(TForm) private procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND; procedure WMBarIcon(var Message:TMessage);message WM_BARICON; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.WMSysCommand (var Message:TMessage); var lpData:PNotifyIconData; begin if Message.WParam = SC_ICON then begin //如果用户最小化窗口则将窗口 //隐藏并在任务栏上添加图标 lpData := new(PNotifyIconDataA); lpData.cbSize := 88; //SizeOf(PNotifyIconDataA); lpData.Wnd := Form1.Handle; lpData.hIcon := Form1.Icon.Handle; lpData.uCallbackMessage := WM_BARICON; lpData.uID :=0; lpData.szTip := 'Samples'; lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; Shell_NotifyIcon(NIM_ADD,lpData); dispose(lpData); Form1.Visible := False; end else begin //如果是其它的SystemCommand消息则调用系统缺省处理函数处理之。 DefWindowProc(Form1.Handle,Message. Msg,Message.WParam,Message.LParam); end; // end; procedure TForm1.WMBarIcon(var Message:TMessage); var lpData:PNotifyIconData; begin if (Message.LParam = WM_LBUTTONDOWN) then begin //如果用户点击任务栏图标则将图标删除并回复窗口。 lpData := new(PNotifyIconDataA); lpData.cbSize := 88;//SizeOf(PNotifyIconDataA); lpData.Wnd := Form1.Handle; lpData.hIcon := Form1.Icon.Handle; lpData.uCallbackMessage := WM_BARICON; lpData.uID :=0; lpData.szTip := 'Samples'; lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; Shell_NotifyIcon(NIM_DELETE,lpData); dispose(lpData); Form1.Visible := True; end; end; end. |