如何把窗体关闭到系统托盘

unit Unit1;  

interface  

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, AppEvnts;  

type
  TForm1 = class(TForm)
    TrayIcon1: TTrayIcon;
    Button1: TButton;
    procedure TrayIcon1Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
  end;  

var
  Form1: TForm1;  

implementation  

{$R *.dfm}  

{关闭}
procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.Terminate;
end;  

{点击关闭按钮时让窗体最小化到系统托盘}
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  Tag := Ord(WindowState);
  WindowState := wsMinimized;
  TrayIcon1.SetDefaultIcon;
  TrayIcon1.Visible := True;
  Hide;
  CanClose := False;
end;  

{点击系统托盘中的图标恢复窗口}
procedure TForm1.TrayIcon1Click(Sender: TObject);
begin
  TrayIcon1.Visible := False;
  Show;
  WindowState := TWindowState(tag);
  SetForegroundWindow(Handle);
end;  

end.
--------------------------------------------------------------------------------  

窗体文件:
--------------------------------------------------------------------------------  

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = ‘Form1‘
  ClientHeight = 206
  ClientWidth = 339
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = ‘Tahoma‘
  Font.Style = []
  OldCreateOrder = False
  OnCloseQuery = FormCloseQuery
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 232
    Top = 40
    Width = 75
    Height = 25
    Caption = ‘Button1‘
    TabOrder = 0
    OnClick = Button1Click
  end
  object TrayIcon1: TTrayIcon
    OnClick = TrayIcon1Click
    Left = 160
    Top = 104
  end
end

  

时间: 2024-10-31 20:52:12

如何把窗体关闭到系统托盘的相关文章

Delphi 7下最小化到系统托盘(主要是WM_TRAYMSG和WM_SYSCOMMAND消息)

在Delphi 7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本.定义如下: 123456789   _NOTIFYICONDATAA = record   cbSize: DWORD;   Wnd: HWND;   uID: UINT;   uFlags: UINT;   uCallbackMessage: UINT;   hIcon: HICON;   szTip: array [0..63] of Ansi

服务程序增加系统托盘

服务程序增加系统托盘 用Delphi创建服务程序作者:未知 文章来源:岁月联盟 Windows 2000/XP和2003等支持一种叫做"服务程序"的东西.程序作为服务启动有以下几个好处:(1)不用登陆进系统即可运行.(2)具有SYSTEM特权.所以你在进程管理器里面是无法结束它的.笔者在2003年为一公司开发机顶盒项目的时候,曾经写过课件上传和媒体服务,下面就介绍一下如何用Delphi7创建一个Service程序.运行Delphi7,选择菜单File-->New-->Oth

系统托盘编程完全指南

原文:http://www.hellocpp.net/Articles/Article/574.aspx 第一部分 自从Windows 95面市以来,系统托盘应用作为一种极具吸引力的UI深受广大用户的喜爱.使用系统托盘UI的Windows应用程序数不胜数,比如"金山词 霸"."Winamp"."RealPlayer"等等.那么如何编写自己的托盘应用呢?本文是系列文章中的第一篇,这些文章将比较系统地描述托盘应用的 编程.并创建自己的C++类来增强系

java应用程序-系统托盘

本实例是用来制作应用程序的系统托盘,比如类似qq在窗体的右下角的图标格式.代码直接复制可用. 1 import java.awt.AWTException; 2 import java.awt.Image; 3 import java.awt.MenuItem; 4 import java.awt.PopupMenu; 5 import java.awt.SystemTray; 6 import java.awt.TrayIcon; 7 import java.awt.event.ActionE

玩转VC++系统托盘程序(WIN8)

 WINDOWS系统托盘是一个特殊区域,通常在桌面的右下角,也就是任务栏的右边.系统常驻在托盘的程序有时钟,音量控制,输入法,网络状态等.第三方应用如QQ程序也是一个典型的托盘程序,当最小化时企鹅会乖乖的待在屏幕右下角等待主人的呼唤. 系统托盘的方便之处在于,程序在暂时不用时,将它放到托盘里,随用随叫,不必将其关闭.而QQ在接收到消息后,也会在托盘中闪动提示,十分人性化. 那么如何用VC++来开发托盘程序呢?下面会用一个例子来玩转WINDOWS托盘程序. 首先,定义一下需要的功能.(需求确定

删除系统托盘区中的指定图标

有些应用软件为便于提醒用户和方便用户操作,会在系统托盘区生成属于自己的托盘图标,这样用户可以通过该图标弹出的气泡提示了解对应软件的运行状态,或通过关联的菜单便捷的操作该软件.但在某些情况下,应用程序可能会遭遇异常关闭的情况而导致来不及删除对应的系统托盘图标而将其遗留在系统托盘区中,当再次运行该软件时会发现托盘区出现多个同样的图标.那么如何删除无效/指定的系统托盘区图标呢? 首先,我们需要找到系统托盘栏所在的窗口,由于我们不清楚需要删除的图标是在普通系统托盘区中还是在溢出系统托盘区中,所以需要把这

C#.NET常见问题(FAQ)-如何捕捉窗体关闭的事件,弹窗确认是否退出

首先定位到窗体的FormClosing事件中,写关闭之前要执行的方法名称 ? 一般只需要添加下面的代码即可实现窗体关闭的时候提示是否确认退出 //捕捉窗体Close事件,关闭窗口时提示 if (MessageBox.Show("请您确认是否退出(Y/N)", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { e.Cancel = false;//允许

设置一个软件的系统托盘

这两天正好做练习,碰到将一个小软件做出可使用托盘的,于是将这一部分随手记录下来 (框体继承JFrame) PopupMenu popup = new PopupMenu();//定义弹出菜单 //定义SystemTray成员变量    SystemTray tray;    //定义TrayIcon成员变量    TrayIcon trayIcon; //判断当前操作系统是否支持系统托盘        if (SystemTray.isSupported())        {         

使用QT创建系统托盘

使用QT来创建一个系统托盘,事实上是一件很简单的事.为什么这么说?一是因为QT文档给出了比较详细的例子,二是QT的结构比较优雅,设计风格统一.但是在动手之前,我们要从哪里下手?虽然QT文档给出了一个比较详细的例子,但由于功能较多,所以看起来比较费劲.我们在这只是抽丝剥茧,只实现系统托盘这一个功能. 首先,使用QT creator创建一个GUI工程,继承于QDialog还是QMainWindow还是QWidget都无所谓.我们以继承QMainWindow为例说明.创建完毕之后,creator将自动