procedure SetIcon(Icon: TIcon); virtual; procedure AppMinimize(Sender: TObject); procedure AppRestore(Sender: TObject); procedure DoMenu; virtual; procedure Click; virtual; procedure DblClick; virtual; procedure EndSession; virtual; procedure DoMouseMove(Shift: TShiftState; X, Y: Integer); virtual; procedure DoMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure OnMessage(var Msg: TMessage); virtual; procedure Changed; virtual; property Data: TNotifyIconData read fData; public constructor Create(Owner: TComponent); override; destructor Destroy; override; procedure Minimize; virtual; procedure Restore; virtual; published property Hint: string read fHint write SetHint; property Icon: TIcon read fIcon write SetIcon; property PopupMenu: TPopupMenu read fPopupMenu write fPopupMenu; property OnClick: TNotifyEvent read fOnClick write fOnClick; property OnDblClick: TNotifyEvent read fOnDblClick write fOnDblClick; property OnMinimize: TNotifyEvent read fOnMinimize write fOnMinimize; property OnMouseMove: TMouseMoveEvent read fOnMouseMove write fOnMouseMove; property OnMouseDown: TMouseEvent read fOnMouseDown write fOnMouseDown; property OnMouseUp: TMouseEvent read fOnMouseUp write fOnMouseUp; property OnRestore: TNotifyEvent read fOnRestore write fOnRestore; end;
procedure Register;
implementation
{ Create the component. At run-time, automatically add a tray icon with a callback to a hidden window. Use the application icon and title. } constructor TTrayIcon.Create(Owner: TComponent); begin inherited Create(Owner); fIcon := TIcon.Create; fIcon.Assign(Application.Icon); if not (csDesigning in ComponentState) then begin FillChar(fData, SizeOf(fData), 0); fData.cbSize := SizeOf(fData); fData.Wnd := AllocateHwnd(OnMessage); // handle to get notification message fData.hIcon := Icon.Handle; // icon to display StrPLCopy(fData.szTip, Application.Title, SizeOf(fData.szTip) - 1); fData.uFlags := Nif_Icon or Nif_Message; if Application.Title <> '''''''' then fData.uFlags := fData.uFlags or Nif_Tip; fData.uCallbackMessage := WM_CALLBACK_MESSAGE; if not Shell_NotifyIcon(NIM_ADD, @fData) then // add it raise EOutOfResources.Create(''''Cannot create shell notification icon''''); { Replace the application''''s minimize and restore handlers with special ones for the tray. The TrayIcon component has its own OnMinimize and OnRestore events that the user can set. } Application.OnMinimize := AppMinimize; Application.OnRestore := AppRestore; end; end;
{ Remove the icon from the system tray.} destructor TTrayIcon.Destroy; begin fIcon.Free上一页 [1] [2] [3] [4] [5] 下一页 |