如何在运行程序时使窗体不可见

  收藏 如何在运行程序时使窗体不可见,只留下系统托盘区的程序图标? [问题点数:0分]


hans222
小李
等级:
结帖率:100%
楼主 发表于: 2003-05-15 19:54:18
我是一个delphi初学者,我参照一编关于“CDROM软开关”的文章,写了下面这个unit1.pas代码如下: 




unit Unit1;


interface


uses
  Windows, Messages,shellapi, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, mmsystem;
const
  ICON_ID=1;
  //ICON的ID标志
  MI_ICONEVENT=WM_USER+1;
  //自定义ICON事件消息
type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    open: TMenuItem;
    close: TMenuItem;
    shutdown: TMenuItem;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure openClick(Sender: TObject);
    procedure closeClick(Sender: TObject);
    //procedure shutdownclick(Sender: TObject);
  private
    { Private declarations }
      { Private declarations } 
    NormalIcon,DisabledIcon:TIcon;
    //正常和失效两种情况下的图标
    Status:Boolean;
    //标志"允许使用"还是"禁止使用"}
    procedure InstallIcon;
    //procedure ChangeIcon(s:Boolean);
    procedure UnInstallIcon;
    procedure IconOnClick(var message:TMessage); message MI_ICONEVENT;
  //捕捉自定义消息MI_ICONEVENT的过程IconOnClick的声明 


  public
    { Public declarations }
  end;


var
  Form1: TForm1;


implementation


{$R *.dfm}


{procedure TForm1.ChangeIcon(s:Boolean);
//自定义过程ChangeIcon,改变本程序在指示状态栏的图标
var 
  IconData:TNotifyIconData; 
begin 
  IconData.cbSize:=SizeOf(IconData); 
  IconData.Wnd:=Handle;
  IconData.uID:=ICON_ID; 
  if s=False then //禁止使用 
  begin
    IconData.hIcon:=DisabledIcon.Handle;
    Status:=False;


  end 
  else //允许使用 
  begin 
    IconData.hIcon:=Normalicon.Handle;
    Status:=True;


  end; 
  IconData.uFlags:=NIF_ICON; 
  Shell_NotifyIcon(NIM_MODIFY,@IconData);
end;}
procedure TForm1.IconOnClick(var message:TMessage); 
//处理鼠标在指示状态栏对应的图标上的单击事件 
var 
  p:TPoint;
begin 
  //如果按下的是鼠标左键,并且允许显示,则显示Form2 
  {if((message.lParam=WM_LBUTTONDOWN) and (Status=True)) then
    Form2.Show;}
  //如果按下的是鼠标右键,则显示弹出菜单
  if(message.lParam=WM_RBUTTONDOWN)then 
  begin 
    GetCursorPos(p); 
    PopupMenu1.Popup(p.x,p.y); 
  end;
end; 
procedure TForm1.InstallIcon; 
//安装图标 
var 
  IconData:TNotifyIconData;
begin
  NormalIcon:=TIcon.Create;
  DisabledIcon:=TIcon.Create;
  NormalIcon.LoadFromFile('normal.ico');
//在托盘区显示一个CDROM图标
  IconData.cbSize:=SizeOf(IconData);
  IconData.Wnd:=Handle;
  IconData.uID:=ICON_ID; 
  IconData.uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
  IconData.uCallBackMessage:=MI_ICONEVENT;
  IconData.hIcon:=NormalIcon.Handle;
  IconData.szTip:='CDROM软开关';
  //鼠标悬在状态指示栏对应的图标上时的提示信息
  Shell_NotifyIcon(NIM_ADD,@IconData); 
end;
procedure TForm1.UnInstallIcon; 
//卸载图标 
var 
  IconData:TNotifyIconData; 
begin
  IconData.cbSize:=SizeOf(IconData);
  IconData.Wnd:=Handle; 
  IconData.uID:=ICON_ID; 
  Shell_NotifyIcon(NIM_DELETE,@IconData);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnInstallIcon;
  //卸载图标 
  NormalIcon.Free;
  DisabledIcon.Free;
  //释放两个图标资源
end; 


procedure TForm1.FormCreate(Sender: TObject);
begin 
  Status:=True; 
  InstallIcon; 
  //安装图标
  ShowWindow(Application.Handle,SW_HIDE);
  //隐藏主窗体
  SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
  //在切换状态栏上不显示程序图标
end; 


procedure TForm1.FormActivate(Sender: TObject);
begin
  Form1.width:=0;
  Form1.Height:=0;
  ShowWindow(Application.Handle,SW_HIDE);
  //隐藏Form1
  {form1.Hide}
end;


procedure TForm1.openClick(Sender: TObject);
begin
  mciSendString('Set cdaudio door open wait',nil,0,handle);
end;


procedure TForm1.closeClick(Sender: TObject);
begin
  mcisendstring('set cdaudio door closed wait',nil,0,handle);
end;




end.
  我现在想在程序运行时使窗体不可见,只剩下系统托盘区的程序图标,请问用什么语句,我上面的代码还是会显示窗体。请指教


对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 | TOP 回复次数:6


hch_45
痞子宏
等级:
#1 得分:0 回复于: 2003-05-15 20:00:12
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.ShowMainForm:=false;  //在项目文件中加这句
  Application.Run;
end.
【免费】解读海外市场营销奥秘 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 | TOP


hch_45
痞子宏
等级:
#2 得分:0 回复于: 2003-05-15 20:00:48
begin
  Application.Initialize;
  Application.ShowMainForm:=false;  //在项目文件中加这句
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
第三、四期“Hadoop技术赢门票”活动:聚焦HIVE与HDFS对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 | TOP


xylyge
很想学好
等级:
#3 得分:0 回复于: 2003-05-15 20:02:57
你也可以用cooltrayicon 控件!
手机QQ浏览器4.0 for Android有奖评测对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 | TOP


itczy
浪子曹
等级:
#4 得分:0 回复于: 2003-05-15 20:34:31
用API呀。
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 | TOP


xiaoyuer0851
红旗下的蛋
等级:
#5 得分:0 回复于: 2003-05-15 20:46:42
楼上的,我使用api后,在任务栏中是没有了,在系统托盘中是有一个小图标
但是在任务屏幕上就会出现一个小的栏目,就有点象那个qq登陆的时候最小化一样,在任务栏之上
的界面上会出现一个小的栏目,请指教
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 | TOP


lf43
小飞侠
等级:
#6 得分:0 回复于: 2003-05-15 21:03:31
cooltrayicon可以
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值