您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Delphi >> 如何编制一程序,最下化(或者关闭时)缩到右下角状态栏(变成小图标)?

如何编制一程序,最下化(或者关闭时)缩到右下角状态栏(变成小图标)?

来源:网络整理     时间:2016/7/12 9:13:41     关键词:

关于网友提出的“ 如何编制一程序,最下化(或者关闭时)缩到右下角状态栏(变成小图标)?”问题疑问,本网通过在网上对“ 如何编制一程序,最下化(或者关闭时)缩到右下角状态栏(变成小图标)?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 如何编制一程序,最下化(或者关闭时)缩到右下角状态栏(变成小图标)?
描述:

小弟最近在学DELPHI。。。想尝试些高级技巧。。。
买的书上讲到最小化程序时程序变成小图标缩到任务栏右下角。。但是方法是错的(实验多次,并且请教了朋友)
希望在坐大侠指教。谢谢。。谢谢。。谢谢。。。。。
bopijidan@163.com


解决方案1:

FAQ里面有例子:
一个Form加popupmenu,一个子菜单exit
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,shellapi, Menus;
const    
  mousemsg  =  wm_user  +  1;  //自定义消息,用于处理用户在图标上点击鼠标的事件
  iid  =  100;  //用户自定义数值,在TnotifyIconDataA类型全局变量ntida中使用
type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    exit1: TMenuItem;
    procedure exit1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    //自定义消息处理函数,处理鼠标点击图标事件    
     procedure  mousemessage(var  message:  tmessage);
     message  mousemsg;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  ntida:  TNotifyIcondataA;  //用于增加和删除系统状态图标
implementation
{$R *.dfm}
procedure  TForm1.mousemessage(var  message:  tmessage);    
var    
mousept:  TPoint;  //鼠标点击位置    
begin
inherited;    
if  message.LParam  =  wm_rbuttonup  then  begin  //用鼠标右键点击图标    
getcursorpos(mousept);  //获取光标位置    
popupmenu1.popup(mousept.x,  mousept.y);  //在光标位置弹出菜单    
end;    
if  message.LParam  =  wm_lbuttonup  then  begin  //用鼠标左键点击图标    
//显示应用程序窗口    
ShowWindow(Handle,  SW_SHOW);    
//在任务栏上显示应用程序窗口    
ShowWindow(Application.handle,  SW_SHOW);    
SetWindowLong(Application.Handle,  GWL_EXSTYLE,
not  (GetWindowLong(Application.handle,  GWL_EXSTYLE)    
or  WS_EX_TOOLWINDOW  AND  NOT  WS_EX_APPWINDOW));    
end;    
message.Result  :=  0;
end ;
procedure  TForm1.Exit1Click(Sender:  TObject);
begin    
//为ntida赋值,指定各项参数    
ntida.cbSize  :=  sizeof(tnotifyicondataa);    
ntida.wnd  :=  handle;    
ntida.uID  :=  iid;    
ntida.uFlags  :=  nif_icon  +  nif_tip  +  nif_message;    
ntida.uCallbackMessage  :=  mousemsg;    
ntida.hIcon  :=  Application.Icon.handle;    
ntida.szTip  :=  'Icon';    
shell_notifyicona(NIM_DELETE,  @ntida);  //删除已有的应用程序图标    
Application.Terminate;  //中断应用程序运行,退出应用程序    
end;
procedure  TForm1.FormCreate(Sender:  TObject);    
begin
ntida.cbSize  :=  sizeof(tnotifyicondataa);  //指定ntida的长度
ntida.Wnd  :=  handle;  //取应用程序主窗体的句柄    
ntida.uID  :=  iid;  //用户自定义的一个数值,在uCallbackMessage参数指定的消息中使用
ntida.uFlags  :=  nif_icon  +  nif_tip  +  nif_message;//指定在该结构中uCallbackMessage、hIcon、szTip参数都有效    
ntida.uCallbackMessage  :=  mousemsg;//指定的窗口消息    
ntida.hIcon  :=  Application.Icon.handle;//指定系统状态栏显示应用程序的图标句柄    
ntida.szTip  :=  'Icon';  //当鼠标停留在系统状态栏该图标上时,出现该提示信息    
shell_notifyicona(NIM_ADD,  @ntida);  //在系统状态栏增加一个新图标    
end;    
procedure  TForm1.FormClose(Sender:  TObject;  var  Action:  TCloseAction);    
begin
Action  :=  caNone;  //不对窗体进行任何操作
ShowWindow(Handle,  SW_HIDE);  //隐藏主窗体
//隐藏应用程序窗口在任务栏上的显示
ShowWindow(Application.Handle,  SW_HIDE);
SetWindowLong(Application.Handle,  GWL_EXSTYLE,
GetWindowLong(Application.handle,  GWL_EXSTYLE)
or  WS_EX_TOOLWINDOW  AND  NOT  WS_EX_APPWINDOW);
end;
end.


以上介绍了“ 如何编制一程序,最下化(或者关闭时)缩到右下角状态栏(变成小图标)?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2542372.html

相关图片

相关文章