//USE API!
__________unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ComCtrls, ShellApi, SysTray, ImgList, ExtCtrls;const
WM_SYSTRAY = WM_USER + 1;
IDI_TRAYICON = 0;type
TForm1 = class(TForm)
ImageList1: TImageList;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FWindowHandle: HWnd;
FParentWindow: HWnd;
FPopupMenu: TPopupMenu;
FPopupAlign: TPopupAlignment;
FPopupMode: TPopupMode;
FIcon: TIcon;
FIconData: TNotifyIconData;
i:integer;
public end;var
Form1: TForm1;implementation
{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
FPopupMode := [pmRightClick];
FPopupAlign := paRight;
FParentWindow := Handle
FWindowHandle := AllocateHWnd(WndProc);
i:=0;
FIcon := TIcon.Create;
Imagelist1.GetIcon(i,FIcon);
With FIconData do
begin
uCallbackMessage:=WM_SYSTRAY;
cbSize := SizeOf(FIconData);
uID := IDI_TRAYICON;
wnd := self.Handle;
hIcon := FIcon.Handle;
StrCopy(FIconData.szTip,'Hello');
uFlags := NIF_ICON + NIF_TIP + NIF_MESSAGE;
end;
Shell_NotifyIcon(NIM_ADD, @FIconData);
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
i:=i+1;
if i=Imagelist1.Count then i:=0;
Imagelist1.GetIcon(i,FIcon);
FIconData.hIcon:=FIcon.Handle;
Shell_NotifyIcon(NIM_MODIFY, @FIconData);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @FIconData);
end;procedure WndProc(var Msg: TMessage);
var
P: TPoint;
begin
if (Msg.WParam <> IDI_TRAYICON) then exit;
if Assigned(FPopupMenu) then
FPopupMenu.Alignment := FPopupAlign; GetCursorPos(p);
case Msg.LParam of
WM_LBUTTONDOWN:
begin
if (pmLeftClick in FPopupMode) and Assigned(FPopupMenu) then
begin
SetForegroundWindow(FParentWindow);
FPopupMenu.Popup(p.x,p.y);
end;
if Assigned(FOnIconMouseDown) then
begin
SetForegroundWindow(FParentWindow);
FOnIconMouseDown(Self, mbLeft, p.x, p.y);
end;
end; WM_RBUTTONDOWN:
begin
if (pmRightClick in FPopupMode) and Assigned(FPopupMenu) then
begin
SetForegroundWindow(FParentWindow);
FPopupMenu.Popup(p.x,p.y);
end;
if Assigned(FOnIconMouseDown) then
begin
SetForegroundWindow(FParentWindow);
FOnIconMouseDown(Self, mbRight, p.x, p.y);
end;
end; WM_LBUTTONDBLCLK:
begin
if (pmLeftDblClick in FPopupMode) and Assigned(FPopupMenu) then
begin
SetForegroundWindow(FParentWindow);
FPopupMenu.Popup(p.x,p.y);
end;
if Assigned(FOnIconDoubleClick) then
begin
SetForegroundWindow(FParentWindow);
FOnIconDoubleClick(Self, mbLeft, p.x, p.y);
end;
end; WM_RBUTTONDBLCLk:
begin
if (pmRightDblClick in FPopupMode) and Assigned(FPopupMenu) then
begin
SetForegroundWindow(FParentWindow);
FPopupMenu.Popup(p.x,p.y);
end;
if Assigned(FOnIconDoubleClick) then
begin
SetForegroundWindow(FParentWindow);
FOnIconDoubleClick(Self, mbRight, p.x, p.y);
end;
end; else
Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;
end;
end.
__________unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ComCtrls, ShellApi, SysTray, ImgList, ExtCtrls;const
WM_SYSTRAY = WM_USER + 1;
IDI_TRAYICON = 0;type
TForm1 = class(TForm)
ImageList1: TImageList;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FWindowHandle: HWnd;
FParentWindow: HWnd;
FPopupMenu: TPopupMenu;
FPopupAlign: TPopupAlignment;
FPopupMode: TPopupMode;
FIcon: TIcon;
FIconData: TNotifyIconData;
i:integer;
public end;var
Form1: TForm1;implementation
{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
FPopupMode := [pmRightClick];
FPopupAlign := paRight;
FParentWindow := Handle
FWindowHandle := AllocateHWnd(WndProc);
i:=0;
FIcon := TIcon.Create;
Imagelist1.GetIcon(i,FIcon);
With FIconData do
begin
uCallbackMessage:=WM_SYSTRAY;
cbSize := SizeOf(FIconData);
uID := IDI_TRAYICON;
wnd := self.Handle;
hIcon := FIcon.Handle;
StrCopy(FIconData.szTip,'Hello');
uFlags := NIF_ICON + NIF_TIP + NIF_MESSAGE;
end;
Shell_NotifyIcon(NIM_ADD, @FIconData);
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
i:=i+1;
if i=Imagelist1.Count then i:=0;
Imagelist1.GetIcon(i,FIcon);
FIconData.hIcon:=FIcon.Handle;
Shell_NotifyIcon(NIM_MODIFY, @FIconData);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @FIconData);
end;procedure WndProc(var Msg: TMessage);
var
P: TPoint;
begin
if (Msg.WParam <> IDI_TRAYICON) then exit;
if Assigned(FPopupMenu) then
FPopupMenu.Alignment := FPopupAlign; GetCursorPos(p);
case Msg.LParam of
WM_LBUTTONDOWN:
begin
if (pmLeftClick in FPopupMode) and Assigned(FPopupMenu) then
begin
SetForegroundWindow(FParentWindow);
FPopupMenu.Popup(p.x,p.y);
end;
if Assigned(FOnIconMouseDown) then
begin
SetForegroundWindow(FParentWindow);
FOnIconMouseDown(Self, mbLeft, p.x, p.y);
end;
end; WM_RBUTTONDOWN:
begin
if (pmRightClick in FPopupMode) and Assigned(FPopupMenu) then
begin
SetForegroundWindow(FParentWindow);
FPopupMenu.Popup(p.x,p.y);
end;
if Assigned(FOnIconMouseDown) then
begin
SetForegroundWindow(FParentWindow);
FOnIconMouseDown(Self, mbRight, p.x, p.y);
end;
end; WM_LBUTTONDBLCLK:
begin
if (pmLeftDblClick in FPopupMode) and Assigned(FPopupMenu) then
begin
SetForegroundWindow(FParentWindow);
FPopupMenu.Popup(p.x,p.y);
end;
if Assigned(FOnIconDoubleClick) then
begin
SetForegroundWindow(FParentWindow);
FOnIconDoubleClick(Self, mbLeft, p.x, p.y);
end;
end; WM_RBUTTONDBLCLk:
begin
if (pmRightDblClick in FPopupMode) and Assigned(FPopupMenu) then
begin
SetForegroundWindow(FParentWindow);
FPopupMenu.Popup(p.x,p.y);
end;
if Assigned(FOnIconDoubleClick) then
begin
SetForegroundWindow(FParentWindow);
FOnIconDoubleClick(Self, mbRight, p.x, p.y);
end;
end; else
Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;
end;
end.
解决方案 »
- delphi三层结构如何设计?
- 请问如何将ACCESS中A表中的列A,列B,列C的数据合并到列A里面?
- 要问2个模拟键盘的问题,希望指教
- 急求类似QQ,MSN的皮肤控件
- miky(miky):幫我解決Printer.canvas分欄和自動分列問題,高分求助,分不夠可以再加,知道這方面的高手也請進!急!!
- 兄弟们,为什么?
- 请大家帮忙看看这个问题,如何从一行文本中提取出有用的数据?
- 急件:如何从一个fram1到fram2复制一个chart的内容,包括里的series的数据内容
- 怎样弹出window自带的systemmenu?
- 用DELPHI解决数据库问题---制作一个车购办的程序有几个难点( 大侠都进来看盾,解决问题给高分)
- Delphi 5.0 与 delphi 6.0 中的ADO
- 字段小數點位數由4位修改為6位,對速度有何影響(本人已經開三個貼子只有一個貼子結了還是我自己搞定,希望這個貼子大家help me),大家可以從
tind:TNotifyIconData;
procedure WndProc (var Message:TMessage);message WM_iconcallbackMessage; //上面都是定义//压缩到任务栏
tind.cbSize:=SizeOf (TNotifyIconData);
tind.Wnd:=form1.Handle;
tind.hIcon:=Application.Icon.Handle;
tind.uFlags:=NIF_TIP OR NIF_ICON OR NIF_MESSAGE;
tind.uID:=0;
tind.szTip:='测试';
tind.uCallBackMessage:=WM_ICONCALLBACKMESSAGE;
shell_NotifyIcon (NIM_ADD,@tind);
shell_NotifyIcon (NIM_delete,@tind);
//截获点击消息的函数
procedure WndProc (var Message:TMessage);if msg.LParam=WM_LButtonDown then
begin
ShowWindow(Application.Handle,SW_Show);
Application.Restore;
end
else if msg.LParam=WM_RButtonDown then
begin
GetCursorPos(p);
PopupMenu1.Popup(p.x,p.y);
end;
MY E-mail: [email protected]
Thank you!!!
这个问题好解决
就象zsy_good(如果你想说你爱我,那么请你不要插
所例的