托盘怎么实现(高分求解)
托盘如何实现(高分求解)
我想让目标程序隐藏到后台,然后在右小角显示个图表, 点他就出出来
谁能提供下实现方法
我的油箱:59952804@qq.com
------解决方案--------------------
我想让目标程序隐藏到后台,然后在右小角显示个图表, 点他就出出来
谁能提供下实现方法
我的油箱:59952804@qq.com
------解决方案--------------------
- Delphi(Pascal) code
rxlib组件包里的RXTrayIcon 下载地址 http://www.winu.cn/thread-1666-1-1.html 1、设置RXTrayIcon的icon和icons 2、给popupmenu关联一个右键菜单 3、在它的onDblClick事件中写一下代码 procedure TFormMain.RxTrayIcon1DblClick(Sender: TObject); begin ShowWindow(Application.Handle, SW_RESTORE); setwindowpos(application.handle,HWND_TOPMOST,0,0,0,0,swp_hidewindow); end;
------解决方案--------------------
给楼主贴一段代码看看:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellAPI, ImgList, Menus;
const WM_NOTIFY = WM_USER + 101; // TRAY消息
WM_TOOLTRAYICON = WM_USER+1;
type
TfrmMain = class(TForm)
imlToolbar: TImageList;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
procedure OnAppMinimize(Sender: TObject); // 应用程序最小化响应函数
procedure OnNotify(var Msg : TMessage); message WM_NOTIFY;
procedure ToolMSG(var Msg: TWMSYSCOMMAND); Message WM_TOOLTRAYICON;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
NotifyIcon : TNotifyIconData;
implementation
{$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject);
var
Icon : TIcon;
begin
//
//NotifyIcon为全局变量,在程序的开头已经定义了
//
with NotifyIcon do
begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle; //指向当前窗体frmMain的句柄
uID:=1;
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage:=WM_NOTIFY;
hIcon:=Application.Icon.Handle;
icon := TIcon.Create();
frmmain.imlToolbar.GetIcon(0, icon);
hIcon := icon.Handle;
szTip:= '短信程序 ';
end;
Application.OnMinimize := OnAppMinimize;
end;
//
// 应用程序最小化时调用此函数
//
procedure TfrmMain.OnAppMinimize(Sender: TObject);
begin
// if Config.m_Config.m_Hide then
// begin
frmMain.Visible := False;
//
// 把设置好的变量NotifyIcon加入到系统中以便处理
//
Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
// end;
end;
//
// 托盘图标响应事件
//
procedure TfrmMain.OnNotify(var Msg: TMessage);
var
pos : TPoint;
begin
case Msg.LParam of
WM_LBUTTONDBLCLK: // 双击事件
begin
frmMain.Visible := True ;
Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);
Application.Restore();
SetForegroundWindow(frmMain.Handle);
end;
WM_RBUTTONUP: // 右键点击
begin
GetCursorPos(pos);
frmMain.PopupMenu1.Popup(pos.X, pos.Y);