|
|
TNotifyIcon 控件1.01 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
TNotifyIcon 控件1.01 (Build use Delphi 3.0) 说明: 作用: 往通知区加图标,并可显示,隐藏,修改这个图标.
属性(properties): NotifyIcon:TIcon 欲加在通知区的图标 IsVisible:boolean NotifyIcon是否显示的属性 Title:string 通知区图标上的提示(最多64个字符) PopupMenu:TPopupMenu 点击通知区图标弹出的菜单 PopupStyle:TPopupStyle 弹出菜单的方式 TPopupStyle=Set of (Left_Click,Right_Click,Left_DbClick,Right_DbClick); 方法(methods): ShowIcon 将图标显示在通知区上 HideIcon 将通知区上的图标隐藏 ModifyIcon 修改通知区上的图标(若IsVisible=false,则不显示出来) Create(AOwner: TComponent); override; 构造方法 Destroy; override; 析构方法 事件(Events): OnIconMouseDown: procedure(Sender:TObject;x,y:Word;WhoButton:TWhoButton) of Object; ( 在Mouse点击通知区上的图标时发生,x,y为Mouse在屏幕上的坐标, WhoButton=b_Left为点击左键,WhoButton=b_Right为点击右键, ) OnIconDoubleClick: procedure(Sender:TObject;x,y:Word;WhoButton:TWhoButton) of Object; ( 在Mouse双击通知区上的图标时发生,x,y为Mouse在屏幕上的坐标, WhoButton=b_Left为双击左键,WhoButton=b_Right为双击右键, ) 关于Demo: 这个演示程序给出了TNotifyIcon的基本用法.
包含文件: NotifyIcon.dcr NotifyIcon.pas DemoUnit.pas DemoUnit.dfm PopUnit.pas PopUnit.dfm Demo.dpr Readme.txt
声明: TNotifyIcon 控件 V 1.01 1.这是一个免费控件. 2.如果你使用它,请发一个E-Mail给作者,谢谢. 3我在Delphi3.0 & 4.0 上使用成功 4.若要传播它,请完全分发上述8个文件
作者 南昌大学计算系95(1) 付昱纲 1998.8.17 21:50 E-mail [email protected]
unit NotifyIcon;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DsgnIntf,ShellApi,ExtCtrls,Menus;
const WM_MY_Notify=WM_USER+100; type
TPopupStyle=Set of (Left_Click,Right_Click,Left_DbClick,Right_DbClick); TWhoButton=(b_Left,b_Right); TMouseEvent= procedure(Sender:TObject;x,y:Word;WhoButton:TWhoButton) of Object;
//---------class TNotifyIcon--------- TNotifyIcon = class(TCustomControl) private { Private declarations } FIcon:TIcon; FPda:PNOTIFYICONDATA; FTitle:string; FIconVisible:boolean; FPopupMenu:TPopupMenu; FPopupStyle:TPopupStyle; FOnIconMouseDown:TMouseEvent; FOnIconDoubleClick:TMouseEvent; procedure SetIcon(Icon:TICON); procedure SetTitle(NewTitle:string); function IsShowing:boolean; procedure ShowIt(Accept:boolean); procedure NotifyIconClick(var msg : TMessage); Message WM_My_Notify; protected { Protected declarations } public { Public declarations } property IsVisible:boolean read IsShowing write ShowIt; constructor Create(AOwner: TComponent); override; procedure ShowIcon; procedure HideIcon; destructor Destroy; override; procedure ModifyIcon(NewIcon:TIcon); procedure Paint;override; published { Published declarations } property Height default 33; property Width default 33; property NotifyIcon:TIcon read FIcon write SetIcon; property Title:string read FTitle write SetTitle ; property OnIconDoubleClick:TMouseEvent read FOnIconDoubleClick write FOnIconDoubleClick; property OnIconMouseDown:TMouseEvent read FOnIconMouseDown write FOnIconMouseDown; property PopupMenu:TPopupMenu read FPopupMenu write FPopupMenu; property PopupStyle:TPopupStyle read FPopupStyle write FPopupStyle default []; end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('MyControl', [TNotifyIcon]); end;
procedure TNotifyIcon.ShowIt(Accept:boolean); begin if Accept=true then ShowIcon else HideIcon; end;
procedure TNotifyIcon.Paint; begin if (csDesigning in ComponentState) then begin Width:=33; Height:=33; With Canvas do begin Brush.Color:=clInfoBk; Ellipse(0,0,Self.Width,Self.Height); Font.Color:=clBlue; Brush.Style:=bsClear; FloodFill(5,5,clInfoBk,fsBorder); Brush.Color:=clInfoBk; TextOut(3,Self.Height div 2-6,'Notify'); end end; end;
procedure TNotifyIcon.NotifyIconClick(var msg : TMessage); var p:TPoint; begin try case msg.LParam of WM_LBUTTONDOWN: begin GetCursorPos(p); if Left_Click in FPopupStyle then begin SetForegroundWindow(ParentWindow); FPopupMenu.Popup(p.x,p.y); end; if Assigned(FOnIconMouseDown) then begin FOnIconMouseDown(Self,p.x,p.y,b_Left); end; end; WM_RBUTTONDOWN: begin GetCursorPos(p); if Right_Click in FPopupStyle then begin SetForegroundWindow(ParentWindow); FPopupMenu.Popup(p.x,p.y); end; if Assigned(FOnIconMouseDown) then begin FOnIconMouseDown(Self,p.x,p.y,b_Right); end; end; WM_LBUTTONDBLCLK: begin GetCursorPos(p); if Left_DbClick in FPopupStyle then begin SetForegroundWindow(ParentWindow); FPopupMenu.Popup(p.x,p.y); end; if Assigned(FOnIconDoubleClick) then begin FOnIconDoubleClick(Self,p.x,p.y,b_Left); end; end; WM_RBUTTONDBLCLk: begin GetCursorPos(p); if Right_Click in FPopupStyle then begin SetForegroundWindow(ParentWindow); FPopupMenu.Popup(p.x,p.y); end; if Assigned(FOnIconDoubleClick) then begin FOnIconDoubleClick(Self,p.x,p.y,b_Right); end; end; end; except end; end;
function MAKELANGID(p, s:word):Cardinal; begin result:= (((s)shl 10) or(p)); end;
constructor TNotifyIcon.Create(AOwner: TComponent); begin try inherited Create(AOwner); FIcon:=TIcon.Create; Height:=36; Width:=36; Visible:=false; FTitle:='Welcome'; FIconVisible:=false; //-------------set tray info--------- ParentWindow:=TWinControl(AOwner).Handle; New(Fpda); With FPda^ do begin uCallbackMessage:=WM_MY_Notify; cbsize:=SizeOf(FPda^); uID:=200; wnd:=Handle; uFlags:=NIF_ICON+NIF_Tip+NIF_MESSAGE; end;
if (csDesigning in ComponentState) then begin if GetUserDefaultLCID = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED) then Application.MessageBox( 'Write by 南昌大学 付昱纲'#13#13'E-mail:[email protected]'#13#13' 1998.8.17', 'TNotifyIcon 控件 V 1.01',MB_OK+ MB_ICONINFORMATION) else Application.MessageBox( 'Write by NanChang University FuYuGang'#13#13'E-mail:[email protected]'#13#13' 1998.8.17', 'TNotifyIcon Component V 1.01',MB_OK+ MB_ICONINFORMATION); end; except ShowMessage('TNotifyIcon Create error'); end; end;
procedure TNotifyIcon.SetIcon(Icon:TICON); begin FIcon.Assign(Icon); end;
procedure TNotifyIcon.ShowIcon; begin try if FIcon.Handle=0 then begin Exit; end; if FIcon.Handle<>FPda^.hIcon then HideIcon; if FIconVisible=false then begin FPda^.hIcon:=FIcon.handle; FIconVisible:=true; Shell_NotifyIcon(NiM_ADD,FPda); end; except ShowMessage('TNotifyIcon Show Error '); end; end;
procedure TNotifyIcon.HideIcon; begin try if FIconVisible then begin FIconVisible:=false; Shell_NotifyIcon(NiM_DELETE,FPda); end; except ShowMessage('TNotifyIcon Hide Error'); end; end;
procedure TNotifyIcon.SetTitle(NewTitle:string); begin FTitle:=NewTitle; StrCopy(FPda^.szTip,PChar(FTitle)); if FIconVisible then begin HideIcon; ShowIcon; end; end;
destructor TNotifyIcon.Destroy; begin try HideIcon; Dispose(FPda); FIcon.Free; inherited Destroy; except ShowMessage('TNotifyIcon Destroy Error'); end; end;
procedure TNotifyIcon.ModifyIcon(NewIcon:TIcon); begin try SetIcon(NewIcon); FPda^.hIcon:=FIcon.handle; if FIconVisible then Shell_NotifyIcon(NiM_Modify,FPda); except ShowMessage('TNotifyIcon Modify Error'); end; end;
function TNotifyIcon.IsShowing:boolean; begin Result:=FIconVisible; end;
end.

|
|
相关文章:相关软件: |
|