TNOTIFYICON Control 1.01 (Build Use Delphi 3.0) Description:
effect:
The notification area adds icons and can be displayed, hidden, and modifies this icon.
Properties:
Notifyicon: TICON wants to add icon in the notification area
Isvisible: Boolean NotifyiCon Displayed Properties
Title: String Notification Area Tips (up to 64 characters)
PopupMenu: TPopupMenu Click on the menu of the notification area icon
PopupStyle: Way to pop up menu
TPopupStyle = set of
(Left_Click, Right_Click, Left_DBClick, Right_DbClick);
Method:
Showicon Displays the icon on the notification area
Hideicon hides the icon on the notification area
Modifyicon Modify the icon on the notification area (if isvisible = false, no display)
Create (Aowner: Tcomponent); OVERRIDE; Constructor
DESTROY; OVERRIDE; destructor
Events:
OnConMouseDown:
PROCEDURE (Sender: Tobject; x, Y: Word; Whobutton: twhobutton) of
Object;
(
When mouse click on the icon on the notification area, x, y is the coordinates of mouse on the screen,
Whobutton = B_LEFT is click the left button, whomutton = b_right is right-click,
)
Onicondoucast:
PROCEDURE (Sender: Tobject; x, Y: Word; Whobutton: twhobutton) of
Object;
(
When the mouse double-click the icon on the notification area, X, Y is the coordinates of mouse on the screen,
Whobutton = b_left is double click on the left button, whomutton = b_right is right-click,
)
About Demo:
This demo gives the basic usage of TNotifyicon.
Contains files:
Notifyicon.dcr
Notifyicon.pas
Demounit.PAS
Demounit.dfm
Popunit.pas
PopUnit.dfm
Demo.dpr
Readme.txt
statement:
TNOTIFYICON control V 1.01
1. This is a free control.
2. If you use it, please send an e-mail to the author, thank you.
3 I used success on Delphi3.0 & 4.0
4. To spread it, please distribute the above 8 files
Author Nanchang University Calculation Department 95 (1) 付 昱 1998.8.17 21:50
Fyg@163.net
Unit Notifyicon;
Interface
Uses
Windows, Messages, Sysutils, Classes, Graphics, Controls, Forms,
Dialogs,
DSGnintf, shellapi, extractrls, 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;
FPOPStyle: TPopupstyle;
FoniconMousedown: tmouseevent;
Fonicondoucast: tmouseevent;
Procedure seticon (icon: ticon);
Procedure setTitle (NewTitle: String);
Function isshowing: bolean;
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);
proca;
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 Onicondoucast: TMouseevent
Read Fonicondoucast Write FonicondoubleClick;
Property Onicymousedown: 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 Ten 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 TNOTICON.NOTIFYICONCLICK (VAR MSG: TMESSAGE);
VAR P: TPOINT;
Begin
Try
Case msg.lparam of
WM_LBUTTONDOWN:
Begin
GetCursorpos (P);
if LEFT_CLICK IN FPOPSTYLE 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 FpopStyle 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 FPOPSTYLE THEN
Begin
SetForegroundWindow (PARENTWINDOW);
FpopupMenu.Popup (P.X, P.Y);
END;
IF Assigned (Fonicondoucast) THEN
Begin
FonicondoubleClick (Self, P.x, P.Y, B_LEFT);
END;
END;
WM_RBUTTONDBLCLK:
Begin
GetCursorpos (P);
if Right_Click In FpopStyle Then
Begin
SetForegroundWindow (PARENTWINDOW);
FpopupMenu.Popup (P.X, P.Y);
END;
IF Assigned (Fonicondoucast) 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 Nanchang University Fuzheng' # 13 # 13'e-mail: fyg@163.net' # 13#13 '
1998.8.17 ',
'TNOTIFYICON Controls V 1.01', MB_ok MB_ICONInInformation)
Else
Application.Messagebox (
'Write by Nanchang University
Fuyugang '# 13 # 13'e-mail: fyg@163.net' # 13#13' 1998.8.17 ',
'TNOTICON Component V 1.01', MB_OK MB_ICONInformation;
END;
Except
ShowMessage ('Tnotifyicon Create Error');
END;
END;
Procedure TNOTICON.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 TNOTICON.HIDECION;
Begin
Try
IF ficonvisible kil
Begin
FICONVISIBLE: = FALSE;
Shell_Notifyicon (Nim_Delete, FPDA);
END;
Except
ShowMessage ('Tnotifyicon Hide Error');
END;
END;
Procedure Tnotifyicon.SetTitle (NewTitle: String);
Begin
FTITLE: = NewTitle;
Stropy (fpda ^ .sztip, pchar (ftitle));
IF ficonvisible kil
Begin
Hideicon;
Showicon;
END;
END;
DESTRUCTOR TNOTIFYICON.DESTROY;
Begin
Try
Hideicon;
Dispose (FPDA);
Ficon.free;
Inherited destroy;
Except
ShowMessage ('Tnotifyicon Destroy Error');
END;
Procedure TNotifyicon.Modifyicon (Newicon: Ticon);
Begin
Try
Seticon (Newicon);
FPDA ^ .hicon: = ficon.handle;
IF ficonvisible kil
Shell_Notifyicon (NIM_MODIFY, FPDA);
Except
ShowMessage ('TNOTICON Modify Error');
END;
END;
Function TNotifyicon.isshowing: boolean;
Begin
Result: = FICONVISIBLE;
END;
End.