`
cfeers
  • 浏览: 140317 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Delphi 最小化到托盘

阅读更多

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, 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;
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;
     lpData.Wnd := Form1.Handle;
     lpData.hIcon := Form1.Icon.Handle;
     lpData.uCallbackMessage := WM_BARICON;
     lpData.uID :=0;
     lpData.szTip := '托管';
     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 := '托管';
    lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    Shell_NotifyIcon(NIM_DELETE,lpData);
    dispose(lpData);
    Form1.Visible := True;
   end;
end;

end.

 

F9,测试通过!

 

********************************清除多余托盘图标***********************************

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellAPI;
const
WM_BARICON=WM_USER+200;
type
   TOSVersion = (osUnknown, os95, os98, osME, osNT3, osNT4, os2K, osXP, os2K3);

TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
private
    procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
    procedure WMBarIcon(var Message:TMessage);message WM_BARICON;
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;
     lpData.Wnd := Form1.Handle;
     lpData.hIcon := Form1.Icon.Handle;
     lpData.uCallbackMessage := WM_BARICON;
     lpData.uID :=0;
     lpData.szTip := '应用程序1.0';
     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 := '托管';
    lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    Shell_NotifyIcon(NIM_DELETE,lpData);
    dispose(lpData);
    Form1.Visible := True;
   end;
end;

function GetOS: TOSVersion; //获得系统类型,用来取得托盘句柄
var
    OS: TOSVersionInfo;
begin
    ZeroMemory(@OS, SizeOf(OS));
    OS.dwOSVersionInfoSize := SizeOf(OS);
    GetVersionEx(OS);
    Result := osUnknown;
    if OS.dwPlatformId = VER_PLATFORM_WIN32_NT then begin
        case OS.dwMajorVersion of
            3: Result := osNT3;
            4: Result := osNT4;
            5: begin
                    case OS.dwMinorVersion of
                        0: Result := os2K;
                        1: Result := osXP;
                        2: Result := os2K3;
                    end;
                end;
        end;
    end
    else if (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 0) then
        Result := os95
    else if (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 10) then
        Result := os98
    else if (OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 90) then
        Result := osME
end;


function GetSysTrayWnd(): HWND; //返回系统托盘的句柄,适合于Windows各版本
var OS: TOSVersion;
begin
    OS := GetOS;
    Result := FindWindow('Shell_TrayWnd', nil);
    Result := FindWindowEx(Result, 0, 'TrayNotifyWnd', nil);
    if (OS in [osXP, os2K3]) then
        Result := FindWindowEx(Result, 0, 'SysPager', nil);
    if (OS in [os2K, osXP, os2K3]) then
        Result := FindWindowEx(Result, 0, 'ToolbarWindow32', nil);
end;


procedure KillTrayIcons (Sender: TObject);
var
    hwndTrayToolBar: HWND;
    rTrayToolBar: tRect;
    x, y: Word;
begin
    hwndTrayToolBar := GetSysTrayWnd;
    Windows.GetClientRect(hwndTrayToolBar, rTrayToolBar);
    for x := 1 to rTrayToolBar.right - 1 do begin
        for y := 1 to rTrayToolBar.bottom - 1 do begin
            SendMessage(hwndTrayToolBar, WM_MOUSEMOVE, 0, MAKELPARAM(x, y));
        end;
    end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
 KillTrayIcons(self);
end;


end.

分享到:
评论

相关推荐

    Delphi7最小化到系统托盘

    至此,我们就实现了Delphi 7中将程序最小化到系统托盘的基本功能。用户现在可以点击“最小化到托盘”菜单项,将程序窗口隐藏,同时在系统托盘区域看到应用程序的图标。点击该图标,程序窗口会重新出现。通过右键菜单...

    Delphi 实现最小化托盘控件

    "Delphi 实现最小化托盘控件"的项目旨在帮助开发者实现这一功能,通过提供的实例代码,可以让用户更好地理解如何将窗口最小化并转换为托盘图标。这涉及到 Delphi 中的 TTrayIcon 组件以及事件处理机制。 TTrayIcon ...

    Delphi制作最小化到系统托盘的程序&TForm1.FormDestroy不执行的原因.zip_win10程序窗口最小化不见了

    在Delphi编程中,开发人员有时需要实现一个功能,即当用户点击窗口的最小化按钮时,程序并不真正地最小化到任务栏,而是隐藏到系统托盘区域。这种功能可以使用户在不关闭程序的情况下节省桌面空间。标题提到的问题...

    CoolTray For Delphi7 最小化托盘插件

    CoolTray for Delphi7正是为解决这一需求而设计的一款强大的最小化托盘插件。它提供了丰富的功能和灵活的配置选项,让开发者可以轻松地将应用程序最小化到系统托盘,从而提高用户体验和软件的可操作性。 首先,让...

    Delphi 7下最小化到系统托盘

    ### Delphi 7 下最小化至系统托盘的实现方法 在Delphi 7中,开发者可以利用系统托盘(System Tray)的功能来增强应用程序的用户体验。系统托盘,也称为任务栏通知区域,是Windows操作系统任务栏的一部分,用于显示...

    delphi 制作托盘图标程序

    当窗体启动时,我们希望窗体自动最小化到托盘,这可以通过在窗体的`OnShow`事件中实现。同时,当窗体最小化时,我们也需要将其隐藏到托盘,这可以通过重写`OnMinimize`事件来完成。以下是一个简单的示例: ```...

    Delphi播放器 可以最小化到托盘。很精致!

    Delphi播放器是一款基于Delphi编程语言开发的多媒体播放软件,其主要特点是可以在不使用时最小化到系统托盘,从而节省桌面空间并保持用户的桌面整洁。Delphi是一种流行的Object Pascal编程环境,由Embarcadero ...

    CMD和最小化系统托盘源码

    在本文中,我们将深入探讨CMD的使用以及如何用Delphi编程语言实现CMD的功能,同时也会介绍如何将程序最小化到系统托盘。 首先,CMD提供了强大的命令行工具,如文件操作(如复制、移动、删除)、系统信息查询、网络...

    Delphi写的最小化托盘控件

    本主题聚焦于“Delphi写的最小化托盘控件”,这是一种常见的软件设计技术,使得应用程序可以在主窗口被最小化后继续在系统托盘区域显示,提供更灵活的用户交互。 最小化托盘控件是Windows应用程序中一个非常实用的...

    delphi 最小化到托盘控件CoolTrayIcon

    今天客户让写一个小工具,点击关闭要让程序最小化到托盘。马上想到以前用Delphi7发过这类程序,Delphi的效率还是一往即如的快,最后把这个控件放上来,也许有些delphier会用到吧,高版本的Delphi已经自带,大家就...

    delphi 系统托盘实例

    "Delphi 系统托盘实例" 是一个教学项目,旨在帮助 Delphi 初学者理解和实现将应用程序最小化到系统托盘的功能。这个实例演示了如何创建一个简单的 Delphi 应用程序,当用户选择“最小化”时,程序窗口不再显示,而是...

    delphi系统托盘组件

    6. **隐藏和显示主窗口**:当用户选择“最小化”按钮时,可以将主窗口隐藏到系统托盘,通过调用Form的Hide方法;当用户点击托盘图标时,可以重新显示主窗口,通过调用Form的Show方法。 7. **自定义行为**:...

    用delphi实现托盘效果

    在Delphi编程环境中,托盘效果通常指的是将应用程序最小化到系统托盘区域,而不是任务栏。这种功能常用于后台运行的应用程序,以便在不占用屏幕空间的同时保持可访问性。下面我们将详细讨论如何用Delphi实现这个效果...

    delphi托盘程序demo

    这通常通过使用`TTrayIcon`组件来实现,它允许我们将程序最小化到系统托盘,并提供托盘菜单供用户操作。 描述中提到,该程序能够隐藏任务栏图标,并且包含托盘菜单,这对于用户交互和程序的隐形运行至关重要。此外...

    TuoPan.rar_最小化到托盘

    通过分析和研究这段Delphi源码,我们可以了解到如何利用Delphi的组件和API函数来实现"最小化到托盘"的功能。这通常涉及到以下几个步骤: 1. **添加托盘图标**:首先,需要在界面上添加一个`TTrayIcon`组件,这是...

    Delphi源码精讲:程序最小化运行及托盘图标+菜单实例..rar

    总的来说,这个"Delphi源码精讲"实例为我们提供了一个深入了解如何在Delphi中实现程序最小化到托盘以及创建托盘菜单的宝贵学习材料。通过学习和实践这部分代码,开发者可以提升自己的Delphi编程技能,更好地理解和...

    利用delphi实现对主窗体的托盘显示效果

    本篇文章将深入探讨如何使用Delphi实现主窗体的托盘显示效果,以及如何实现窗口最小化到托盘。 首先,我们需要导入`ShellCtrls`单元,这个单元提供了对系统托盘图标的支持。在你的项目源代码文件顶部添加以下语句:...

    delphi 系统区托盘控件

    在Delphi编程中,系统托盘控件通常用于创建最小化到系统托盘的应用程序,以便在用户需要时能够快速访问,而不会干扰主工作区。CoolTrayIcon可能包含以下特性: 1. **图标显示**:控件应允许设置不同的图标,以便...

    托盘 冒泡_delphixe托盘消息提醒_

    4. **隐藏主窗口**:为了使应用程序在启动后立即最小化到托盘,我们需要在程序启动时隐藏主窗口并显示托盘图标。这可以通过在FormCreate事件中设置Form的Visible属性为False,同时调用TTrayIcon的Visible属性为True...

    delphi的托盘代码

    在Delphi中,"托盘代码"通常是指将应用程序最小化到系统托盘区的能力,这样用户就可以在不占用任务栏空间的情况下继续运行程序。这种功能在很多应用中都非常常见,比如即时通讯软件、音乐播放器等。 实现Delphi的...

Global site tag (gtag.js) - Google Analytics