请问各位高手怎么样才能把程序的工具栏图标缩小到系统托盘中,象瑞星等杀毒软件中那样
解决方案 »
- 请问如何获取指定窗口的坐标
- 有关Indy的TIDTCPServer组件的问题,个人经验不足,请有这方面的高手帮忙,具体问题请进入。
- 请问如何实现这样的dbgrid的功能
- 急!!!请问如何控制属于网络打印机Epson 300K 进行 进纸、退纸操作...
- .db是什么数据库格式?谁有过传奇数据库程序的编写,可否请教下。
- 谁有jabber的源码?或下载网址,谢谢:)
- 哈哈,庆贺,一不注意升了三个三角,在看差100分就四个了,庆贺,继续努力!!!!!!!
- 请问Primary key 与 unique index 有什么区别啊
- HELP!!!!
- 扩展存储过程的调用与执行!
- 有N多的问题请教,欢迎各路豪杰进小楼一叙!
- 哪里可以下载delphi6的Update2更新包??
http://www.8860.net/delphicode/dispdoc.asp?id=64
uses
shellapi。;
private
{ Private declarations }
lpData:PNotifyIconData; procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
procedure WMBarIcon(var Message: TMessage) ;message WM_BARICON;
function adoconnected(Sender: TObject):boolean;procedure Tjs_server.WMSysCommand(var Message: TMessage);begin
if (Message.WParam =SC_MINIMIZE) or (Message.WParam =SC_CLOSE ) then
begin
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := self.Handle;
lpData.hIcon := application.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);
hide;
end;end;
procedure Tjs_server.WMBarIcon(var Message: TMessage);
begin
{ if (Message.LParam = WM_LBUTTONDOWN) then
begin
if InputBox('µÇ¼', 'ÇëÊäÈë¿ÚÁî ', '')<>'12345' then exit ;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
show;
end;}
if (Message.LParam = WM_LBUTTONDOWN) then
begin
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
show;
end;
if (Message.LParam = WM_RBUTTONDOWN) then
begin
PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
end;
end;程序上考下来的,自己加个PopupMenu1就可以象那样超做了
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Menus, ShellApi, extctrls;const
//自定义用户信息
WM_TRAYNOTIFY = WM_USER + 1024;
IconID = 1;type
TCycleEvent = procedure(Sender: TObject; Current: Integer) of object;
TMainFormMinimizeEvent = procedure(Sender: TObject; var GotoTray: Boolean) of object; TTrayIcon = class(TComponent)
private
FEnabled: Boolean;
FIcon: TIcon;
FIconVisible: Boolean;
FHint: String;
FShowHint: Boolean;
FPopupMenu: TPopupMenu;
FLeftPopup: Boolean;
FOnClick,
FOnDblClick: TNotifyEvent;
FOnCycle: TCycleEvent;
FOnMouseDown,
FOnMouseUp: TMouseEvent;
FOnMouseMove: TMouseMoveEvent;
FStartMinimized: Boolean;
FMinimizeToTray: Boolean;
HasShown: Boolean;
FClicked: Boolean;
CycleTimer: TTimer; // 图标变换
FDesignPreview: Boolean;
SettingPreview: Boolean;
FIconList: TImageList;
FCycleIcons: Boolean;
FCycleInterval: Cardinal;
IconIndex: Integer; // 当前图标索引
OldAppProc, NewAppProc: Pointer; // 过程变量
procedure SetCycleIcons(Value: Boolean);
procedure SetDesignPreview(Value: Boolean);
procedure SetCycleInterval(Value: Cardinal);
procedure TimerCycle(Sender: TObject);
procedure HandleIconMessage(var Msg: TMessage);
function InitIcon: Boolean;
procedure SetIcon(Value: TIcon);
procedure SetIconVisible(Value: Boolean);
procedure SetHint(Value: String);
procedure SetShowHint(Value: Boolean);
procedure PopupAtCursor;
procedure HookApp;
procedure UnhookApp;
procedure HookAppProc(var Message: TMessage);
protected
IconData: TNotifyIconData; // 系统托盘图标的数据结构
procedure Loaded; override;
function ShowIcon: Boolean; virtual;
function HideIcon: Boolean; virtual;
function ModifyIcon: Boolean; virtual;
procedure Click; dynamic;
procedure DblClick; dynamic;
procedure CycleIcon; dynamic;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); dynamic;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); dynamic;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); dynamic;
procedure DoMinimizeToTray; dynamic;
procedure Notification(AComponent: TComponent; Operation: TOperation);
override;
public
property Handle: HWND read IconData.wnd;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ShowMainForm;
procedure HideMainForm;
procedure Refresh;
published
// 属性操作:
property DesignPreview: Boolean read FDesignPreview
write SetDesignPreview default False;
property IconList: TImageList read FIconList write FIconList;
property CycleIcons: Boolean read FCycleIcons write SetCycleIcons
default False;
property CycleInterval: Cardinal read FCycleInterval
write SetCycleInterval;
property Enabled: Boolean read FEnabled write FEnabled default True;
property Hint: String read FHint write SetHint;
property ShowHint: Boolean read FShowHint write SetShowHint;
property Icon: TIcon read FIcon write SetIcon stored True;
property IconVisible: Boolean read FIconVisible write SetIconVisible
default True;
property PopupMenu: TPopupMenu read FPopupMenu write FPopupMenu;
property LeftPopup: Boolean read FLeftPopup write FLeftPopup
default False;
property StartMinimized: Boolean read FStartMinimized write FStartMinimized
default False; // 程序开始运行时最小化?
property MinimizeToTray: Boolean read FMinimizeToTray write FMinimizeToTray
default False; // 程序最小化时是否自动显示图标?
// 方法:
property OnClick: TNotifyEvent read FOnClick write FOnClick;
property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick;
property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;
property OnMouseUp: TMouseEvent read FOnMouseUp write FOnMouseUp;
property OnMouseMove: TMouseMoveEvent read FOnMouseMove write FOnMouseMove;
property OnCycle: TCycleEvent read FOnCycle write FOnCycle;
end;procedure Register;implementationconstructor TTrayIcon.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FIconVisible := True;
FEnabled := True;
HasShown := False;
SettingPreview := False; FIcon := TIcon.Create;
IconData.cbSize := SizeOf(TNotifyIconData);
// 设置托盘图标回调函数
IconData.wnd := AllocateHWnd(HandleIconMessage);
// 设置图标ID
IconData.uId := IconID;
// 设置 图标,消息句柄,提示
IconData.uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP;
// 当鼠标在图标上有动作时发出的消息
IconData.uCallbackMessage := WM_TRAYNOTIFY; CycleTimer := TTimer.Create(Self);
CycleTimer.Enabled := False;
CycleTimer.Interval := FCycleInterval;
CycleTimer.OnTimer := TimerCycle; if not (csDesigning in ComponentState) then
HookApp;
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Menus, ShellApi, extctrls;const
//自定义用户信息
WM_TRAYNOTIFY = WM_USER + 1024;
IconID = 1;type
TCycleEvent = procedure(Sender: TObject; Current: Integer) of object;
TMainFormMinimizeEvent = procedure(Sender: TObject; var GotoTray: Boolean) of object; TTrayIcon = class(TComponent)
private
FEnabled: Boolean;
FIcon: TIcon;
FIconVisible: Boolean;
FHint: String;
FShowHint: Boolean;
FPopupMenu: TPopupMenu;
FLeftPopup: Boolean;
FOnClick,
FOnDblClick: TNotifyEvent;
FOnCycle: TCycleEvent;
FOnMouseDown,
FOnMouseUp: TMouseEvent;
FOnMouseMove: TMouseMoveEvent;
FStartMinimized: Boolean;
FMinimizeToTray: Boolean;
HasShown: Boolean;
FClicked: Boolean;
CycleTimer: TTimer; // 图标变换
FDesignPreview: Boolean;
SettingPreview: Boolean;
FIconList: TImageList;
FCycleIcons: Boolean;
FCycleInterval: Cardinal;
IconIndex: Integer; // 当前图标索引
OldAppProc, NewAppProc: Pointer; // 过程变量
procedure SetCycleIcons(Value: Boolean);
procedure SetDesignPreview(Value: Boolean);
procedure SetCycleInterval(Value: Cardinal);
procedure TimerCycle(Sender: TObject);
procedure HandleIconMessage(var Msg: TMessage);
function InitIcon: Boolean;
procedure SetIcon(Value: TIcon);
procedure SetIconVisible(Value: Boolean);
procedure SetHint(Value: String);
procedure SetShowHint(Value: Boolean);
procedure PopupAtCursor;
procedure HookApp;
procedure UnhookApp;
procedure HookAppProc(var Message: TMessage);
protected
IconData: TNotifyIconData; // 系统托盘图标的数据结构
procedure Loaded; override;
function ShowIcon: Boolean; virtual;
function HideIcon: Boolean; virtual;
function ModifyIcon: Boolean; virtual;
procedure Click; dynamic;
procedure DblClick; dynamic;
procedure CycleIcon; dynamic;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); dynamic;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); dynamic;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); dynamic;
procedure DoMinimizeToTray; dynamic;
procedure Notification(AComponent: TComponent; Operation: TOperation);
override;
public
property Handle: HWND read IconData.wnd;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ShowMainForm;
procedure HideMainForm;
procedure Refresh;
published
// 属性操作:
property DesignPreview: Boolean read FDesignPreview
write SetDesignPreview default False;
property IconList: TImageList read FIconList write FIconList;
property CycleIcons: Boolean read FCycleIcons write SetCycleIcons
default False;
property CycleInterval: Cardinal read FCycleInterval
write SetCycleInterval;
property Enabled: Boolean read FEnabled write FEnabled default True;
property Hint: String read FHint write SetHint;
property ShowHint: Boolean read FShowHint write SetShowHint;
property Icon: TIcon read FIcon write SetIcon stored True;
property IconVisible: Boolean read FIconVisible write SetIconVisible
default True;
property PopupMenu: TPopupMenu read FPopupMenu write FPopupMenu;
property LeftPopup: Boolean read FLeftPopup write FLeftPopup
default False;
property StartMinimized: Boolean read FStartMinimized write FStartMinimized
default False; // 程序开始运行时最小化?
property MinimizeToTray: Boolean read FMinimizeToTray write FMinimizeToTray
default False; // 程序最小化时是否自动显示图标?
// 方法:
property OnClick: TNotifyEvent read FOnClick write FOnClick;
property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick;
property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown;
property OnMouseUp: TMouseEvent read FOnMouseUp write FOnMouseUp;
property OnMouseMove: TMouseMoveEvent read FOnMouseMove write FOnMouseMove;
property OnCycle: TCycleEvent read FOnCycle write FOnCycle;
end;procedure Register;implementationconstructor TTrayIcon.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FIconVisible := True;
FEnabled := True;
HasShown := False;
SettingPreview := False; FIcon := TIcon.Create;
IconData.cbSize := SizeOf(TNotifyIconData);
// 设置托盘图标回调函数
IconData.wnd := AllocateHWnd(HandleIconMessage);
// 设置图标ID
IconData.uId := IconID;
// 设置 图标,消息句柄,提示
IconData.uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP;
// 当鼠标在图标上有动作时发出的消息
IconData.uCallbackMessage := WM_TRAYNOTIFY; CycleTimer := TTimer.Create(Self);
CycleTimer.Enabled := False;
CycleTimer.Interval := FCycleInterval;
CycleTimer.OnTimer := TimerCycle; if not (csDesigning in ComponentState) then
HookApp;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, shellapi;type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Timer1: TTimer;
open1: TMenuItem;
exit1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure open1Click(Sender: TObject);
procedure exit1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
private
procedure wndproc(var msg:tmessage);override;
{ Private declarations }
public
icondata:tnotifyicondata;
iconcount:integer;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure tform1.wndproc(var msg:tmessage);
var
p:tpoint;
begin
case msg.msg of
wm_user+1:
case msg.LParam of
wm_rbuttondown:
begin
getcursorpos(p);
popupmenu1.Popup(p.X,p.Y);
end;
WM_LBUTTONDBLCLK:
begin
form1.Show;
showwindow(application.Handle ,sw_hide);
end;
end;
end;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
bordericons:=[bisystemmenu];
iconcount:=0;
icondata.cbSize :=sizeof(icondata);
icondata.Wnd :=handle;
icondata.uID:=100;
icondata.uFlags :=nif_message+nif_icon+nif_tip;
icondata.uCallbackMessage :=wm_user+1;
icondata.hIcon :=application.Icon.Handle ;
strpcopy(icondata.szTip,application.Title );
shell_notifyicon(nim_add,@icondata);
timer1.Interval :=1000;
timer1.Enabled :=true;
end;procedure TForm1.open1Click(Sender: TObject);
begin
form1.Show;
showwindow(application.Handle ,sw_hide);
end;procedure TForm1.exit1Click(Sender: TObject);
begin
shell_notifyicon(nim_delete,@icondata);
application.ProcessMessages ;
application.Terminate ;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=canone;
form1.Hide ;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
case (iconcount) of
0: icondata.hIcon :=loadicon(0, idi_application);
1: icondata.hIcon :=loadicon(0, idi_asterisk);
2: icondata.hIcon :=loadicon(0, idi_exclamation);
3: icondata.hIcon :=loadicon(0, idi_hand);
4: icondata.hIcon :=loadicon(0, idi_question);
5: icondata.hIcon :=application.Icon.Handle ;
end;
inc(iconcount);
if iconcount>5 then
iconcount:=0;
application.Title :=timetostr(now);
strpcopy(icondata.szTip ,application.Title );
shell_notifyicon(nim_modify,@icondata);
end;end.