注册 登录
编程论坛 Delphi论坛

托盘运行失败

s912360101 发布于 2009-10-07 11:57, 1019 次点击
各位大虾。小弟做托盘程序时运行失败。下面的是从网上找的源码。基本上都是你抄来。我抄去的。Delphi7调试不成功。

 unit   Unit1;     
   
  interface     
   
  {   记住在uses部分中包括   ShellAPI}     
  uses     
  Windows,   Messages,   SysUtils,   Classes,     
  Graphics,   Controls,   Forms,   Dialogs,     
  ShellAPI,   StdCtrls;     
   
  {自定义消息,当小图标捕捉到鼠标事件时Windows向回调函数发送此消息}     
  {自定义消息,当小图标捕捉到鼠标事件时Windows向回调函数发送此消息}     
  const   MY_MESSAGE   =   WM_USER   +   100;     
   
  type     
  TForm1   =   class(TForm)     
  procedure   FormCreate(Sender:   TObject);     
  procedure   FormClose(Sender:   TObject;   var   Action:   TCloseAction);     
  procedure   FormPaint(Sender:   TObject);     
  private     
  procedure   OnIconNotify(var   Message:   TMessage);     
  message   MY_MESSAGE;     
  public     
  {   Public   declarations   }     
  end;     
   
  var     
  Form1:   TForm1;     
   
  implementation     
   
  {$R   *.DFM}     
   
   
  {当小图标捕捉到鼠标事件时进入此过程}     
  {当小图标捕捉到鼠标事件时进入此过程}     
  procedure   TForm1.OnIconNotify(var   Message:   TMessage);     
  const     
  Busy:   Boolean   =   false;     
  begin     
  if   not   Busy   then   begin     
  Busy   :=   true;     
  if   Message.LParam=WM_LBUTTONDOWN   then     
  if   Application.MessageBox('Are   you   sure',     
  'Exit',   MB_YESNO)=IDYES   then   Close;     
  Busy   :=   false;     
  end;     
  end;     
   
  {当主Form建立时通知Windows加入小图标}     
  procedure   TForm1.FormCreate(Sender:   TObject);     
  var     
  nid:   TNotifyIconData;     
  begin     
  nid.cbSize   :=   sizeof(nid);   //   nid变量的字节数     
  nid.Wnd   :=   Handle;   //   主窗口句柄     
  nid.uID   :=   -1;   //   内部标识,可设为任意数     
  nid.hIcon   :=   Application.Icon.Handle;   //   要加入的图标句柄,可任意指?   
  nid.hIcon   :=   Application.Icon.Handle;   //   要加入的图标句柄,可任意指?   
   
  nid.szTip   :=   'This   is   a   test   application';   //   提示字符串     
  nid.uCallbackMessage   :=   MY_MESSAGE;   //   回调函数消息     
  nid.uFlags   :=   NIF_ICON   or   NIF_TIP   or   NIF_MESSAGE;   //   指明哪些字段有?   
   
  if   not   Shell_NotifyIcon(NIM_ADD,   @nid)   then   begin     
  ShowMessage('Failed!');     
  Application.Terminate;     
  end;     
  {将程序的窗口样式设为TOOL窗口,可避免在任务条上出现}     
  SetWindowLong(Application.Handle,   GWL_EXSTYLE,   WS_EX_TOOLWINDOW);     
  end;     
   
  {程序被关闭时通知Windows去掉小图标}     
  procedure   TForm1.FormClose(Sender:   TObject;   var   Action:   TCloseAction);     
  var     
  nid:   TNotifyIconData;     
  begin     
  nid.cbSize   :=   sizeof(nid);   //   nid变量的字节数     
  nid.cbSize   :=   sizeof(nid);   //   nid变量的字节数     
  nid.uID   :=   -1;   //内部标识,与加入小图标时的数一致     
  nid.Wnd   :=   Handle;   //主窗口句柄     
  Shell_NotifyIcon(NIM_DELETE,   @nid);   //去掉小图标     
  Shell_NotifyIcon(NIM_DELETE,   @nid);   //去掉小图标     
  end;     
   
  {主窗口初始化完毕并显示时将激活Paint重画事件,此时将主窗口隐藏}     
  procedure   TForm1.FormPaint(Sender:   TObject);     
  begin     
  Hide;     
  end;     
   
  end.
3 回复
#2
s9123601012009-10-09 21:39
怎么没有人啊。?急着呢 。
#3
mohao1632009-10-10 13:57
说实在的,我也不太懂,不过我觉得你要是想要隐藏窗体可以在Project1中添加:
程序代码:
program Project1;
 
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
 
{$R *.res}
 
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  //Application.ShowMainForm:=false;
  Application.Run;
end.

Application.ShowMainForm:=false;  
即可,这样程序在打开后就隐藏到后台去运行了
#4
xuchuantao172009-12-30 23:44
你应该看看,托盘控件的源代码,这比来这里问好,速度也快
1