国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > Delphi > 正文

簡易托盤圖標控件-TTrayIcon

2019-09-08 23:09:09
字體:
來源:轉載
供稿:網友
                                                                                                                                                       
                       

{------------------------------------------------------------------------------}
{ 單元名稱: TrayIcon.pas/t/t/t/t/t/t       }
{/t/t/t/t/t/t/t/t/t      }
{ 單元作者: savetime (savetime2k@hotmail.com, http://savetime.delphibbs.com)   }
{ 創建日期: 2004-11-13 12:20:54/t/t/t/t/t/t}
{/t/t/t/t/t/t/t/t/t      }
{ 功能介紹:/t/t/t/t/t/t/t/t    }
{   封裝 Shell_NotifyIcon 的大部分功能,并增加部分常見應用/t/t      }
{/t/t/t/t/t/t/t/t/t      }
{ 使用說明:/t/t/t/t/t/t/t/t    }
{   如果設置了 OnDblClick 事件,則 onClick 的響應時間會增加 GetDoubleClickTime. }
{   否則, onClick 將會立即執行./t/t/t/t/t/t}
{   如果沒有設置 Icon, 將使用 Application 的圖標./t/t/t      }
{/t/t/t/t/t/t/t/t/t      }
{ 更新歷史:/t/t/t/t/t/t/t/t    }
{   彈出右鍵菜單時,點擊其他位置不能關閉該菜單.解決方法:/t/t/t}
{     在彈出菜單之前加上: SetForegroundWindow(FWindow); 即可./t/t  }
{/t/t/t/t/t/t/t/t/t      }
{ 尚存問題:/t/t/t/t/t/t/t/t    }
{   暫時只支持 Win95 Shell 風格, Version 5.0 新功能以后加入/t/t    }
{   DoubleClick 的間隔時間應可隨系統設置更改而更新./t/t/t    }
{   點擊 TrayIcon 時,應可設置是否將應用程序提至前臺./t/t/t   }
{/t/t/t/t/t/t/t/t/t      }
{------------------------------------------------------------------------------}
unit TrayIcon;

interface

uses SysUtils, Classes, Graphics, Controls, Windows, Messages, Forms, Menus,
 ExtCtrls, ShellAPI;

type

//==============================================================================
// TTrayIcon class
//==============================================================================

 TTrayIcon = class(TComponent)
 private
   FWindow: HWND;
   FHint: string;
   FIcon: TIcon;
   FActive: Boolean;
   FonClick: TNotifyEvent;
   FOnDblClick: TNotifyEvent;
   FPopupMenu: TPopupMenu;
   FClickTimer: TTimer;
   FIconData: TNotifyIconData;
   procedure CheckClickTimer(Sender: TObject);
   procedure SendTrayMessage(MsgID: DWORD; Flags: UINT);
   procedure TrayWndProc(var Message: TMessage);
   procedure SetActive(const Value: Boolean);
   procedure SetIcon(const Value: TIcon);
   procedure SetHint(const Value: string);
   procedure SetPopupMenu(const Value: TPopupMenu);
 protected
   procedure Loaded; override;
   procedure Notification(AComponent: TComponent; Operation: TOperation); override;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 published
   property Active: Boolean read FActive write SetActive default False;
   property Hint: string read FHint write SetHint;
   property Icon: TIcon read FIcon write SetIcon;
   property PopupMenu: TPopupMenu read FPopupMenu write SetPopupMenu;
   property onClick: TNotifyEvent read FonClick write FonClick;
   property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick;
 end;

 procedure Register;

implementation

procedure Register;
begin
 RegisterComponents(''Savetime'', [TTrayIcon]);
end;

{ TTrayIcon }

const
 WM_CALLBACKMESSAGE = WM_USER + 100;     // 托盤圖標回調消息常量

procedure TTrayIcon.CheckClickTimer(Sender: TObject);
begin
 FClickTimer.Enabled := False;
 if Assigned(FonClick) then FonClick(Self);
end;

constructor TTrayIcon.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);

 FWindow := Classes.AllocateHWnd(TrayWndProc); // 處理 TrayIcon 消息的窗口

 FIcon := TIcon.Create;

 FClickTimer := TTimer.Create(Self);/t   // 處理單擊和雙擊間隔時間的定時器
 FClickTimer.Enabled := False;
 FClickTimer.Interval := GetDoubleClickTime;   // 控制面板中鼠標雙擊間隔時間
 FClickTimer.OnTimer := CheckClickTimer;

 FIconData.cbSize := SizeOf(FIconData);/t// 初始化 NotifyIconData 結構
 FIconData.Wnd := FWindow;
 FIconData.uID := UINT(Self);
 FIconData.uCallbackMessage := WM_CALLBACKMESSAGE;
end;

destructor TTrayIcon.Destroy;
begin
 Active := False;

 FClickTimer.Free;
 FIcon.Free;
 Classes.DeallocateHWnd(FWindow);

 inherited;
end;

procedure TTrayIcon.Loaded;
begin
 inherited;
 if FActive then
   SendTrayMessage(NIM_ADD, NIF_MESSAGE or NIF_ICON or NIF_TIP);
end;

procedure TTrayIcon.Notification(AComponent: TComponent; Operation: TOperation);
begin
 inherited Notification(AComponent, Operation);
 if (Operation = opRemove) and (AComponent = PopupMenu) then
   PopupMenu := nil;
end;

procedure TTrayIcon.SendTrayMessage(MsgID: DWORD; Flags: UINT);
begin
 if (Flags and NIF_ICON) <> 0 then
 begin
   if FIcon.Handle = 0 then/t/t      // 如果未設置圖標,則使用缺省圖標
     FIconData.hIcon := Application.Icon.Handle
   else
     FIconData.hIcon := FIcon.Handle;
 end;

 FIconData.uFlags := Flags;
 Shell_NotifyIcon(MsgID, @FIconData);
end;

procedure TTrayIcon.SetActive(const Value: Boolean);
begin
 FActive := Value;

 if (not (csDesigning in ComponentState)) and
    (not (csLoading in ComponentState))  then
 begin
   if Value then
     SendTrayMessage(NIM_ADD, NIF_MESSAGE or NIF_ICON or NIF_TIP)
   else
     SendTrayMessage(NIM_DELETE, 0)
 end;
end;

procedure TTrayIcon.SetHint(const Value: string);
begin
 FHint := Value;
 StrPLCopy(FIconData.szTip, PChar(FHint), SizeOf(FIconData.szTip));

 if (not (csDesigning in ComponentState)) and
    (not (csLoading in ComponentState)) and
    FActive then
 begin
   SendTrayMessage(NIM_MODIFY, NIF_TIP);
 end;
end;

procedure TTrayIcon.SetIcon(const Value: TIcon);
begin
 FIcon.Assign(Value);

 if (FActive and not (csDesigning in ComponentState)) then
   SendTrayMessage(NIM_MODIFY, NIF_ICON);
end;

procedure TTrayIcon.SetPopupMenu(const Value: TPopupMenu);
begin
 FPopupMenu := Value;
 if Value <> nil then Value.FreeNotification(Self);
end;

procedure TTrayIcon.TrayWndProc(var Message: TMessage);
var
 PT: TPoint;
begin
 with Message do
 begin
   if Msg = WM_CALLBACKMESSAGE then
   begin
     case LParam of

/tWM_LBUTTONDOWN:
/tbegin
/t  // 如果沒設置 OnDblClick 事件,則直接調用 onclick
/t  if not Assigned(FOnDblClick) then
/t  begin
/t    if Assigned(FonClick) then FonClick(Self);
/t  end
/t  else  // 否則使用時間判斷雙擊時間是否到達
/t    FClickTimer.Enabled := True;
/tend;

/tWM_LBUTTONDBLCLK:
/tbegin
/t  FClickTimer.Enabled := False;
/t  if Assigned(FOnDblClick) then FOnDblClick(Self);
/tend;

/tWM_RBUTTONDOWN:
/tbegin
/t  if Assigned(FPopupMenu) then
/t  begin
/t    SetForegroundWindow(FWindow); // 這句一定要加,否則彈出菜單不會自動隱藏
/t    GetCursorPos(PT);
/t    FPopupMenu.Popup(PT.X, PT.Y);
/t  end;
/tend;
     end;
   end
   else    // 其他消息交由 Windows 處理
     Result := DefWindowProc(FWindow, Msg, WParam, LParam);
 end;
end;

end.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
色吊丝av中文字幕| 日本中文字幕视频| 丁香综合五月| 久久av少妇| **三级三级97片毛片| 久久99精品久久久久久野外| 免费观看v片在线观看| 久久久久国产精品嫩草影院| 在线91av| 96精品视频| a中文在线播放| 国产中文字幕在线看| 国产丝袜自拍| 亚洲成人av在线影院| 麻豆电影传媒二区| 国产青青草在线| 天堂网中文在线| 日本中文字幕高清视频| 精品久久av| 午夜视频免费在线观看| 中文在线观看视频| 九色在线网站| 亚洲精品aaaa| 国产高清自拍视频在线观看| 免费高清av| 中文在线视频| 国产黄在线看| 国产精品自拍亚洲| 亚洲高清在线免费| 国产女主播在线| 国产偷窥老熟盗摄视频| 日本天堂影院在线视频| 国产激情视频一区二区三区| 国产精品天堂| 狠狠插狠狠操| 四虎成年永久免费网站| 国产天堂在线观看| 九九热免费在线视频| 亚洲精品影院在线| 在线成人一区| av人人综合网| 999精品网| 伊人222成人综合网| 中文字幕2019第三页| 精品视频麻豆入口| av福利在线观看| av在线你懂的| 黄污在线观看| 五月伊人六月| 国产高清视频在线播放| 中文岛国精品亚洲一区| 国产色婷婷在线| 国产不卡在线| 尤物视频在线观看视频| 四虎一区二区三区| 国产在线看片| 最近久乱中文字幕| 国产经典三级在线| 亚洲精品视频在线免费| 免费a级毛片在线观看| 国产免费自拍视频| 国产二区三区在线| 日本电影全部在线观看网站视频| 麻豆av在线| 国产xxx在线| 久草网在线视频| 99热在线观看免费| av在线第一页| 国产精品扒开做爽爽爽的视频| 亚洲精品天堂在线观看| 成年人在线观看| 在线āv视频| 国产桃色电影在线播放| 亚洲jjzzjjzz在线观看| 黄色毛片在线观看| 在线观看国产视频| 国产精品自产拍在线网站| 99热免费观看| 国产亚av手机在线观看| 亚洲精品自拍区在线观看| 中文字幕不卡免费视频| 国产国语**毛片高清视频 | 轻轻色免费在线视频| 最新亚洲精品国自产在线观看| 99久久精品免费观看国产| 最新中文字幕在线| 日本高清不卡中文字幕| 精品一区二区三区高清免费不卡| 99视频资源网| 九九热视频免费观看| japanese色国产在线看视频| 国产二区视频在线观看| 国产小视频在线| 天堂在线视频| 成人超碰在线| 男人天堂v视频| 免费视频中文字幕| 免费a级在线播放| 成人亚洲一区二区三区| 麻豆福利在线观看| 免费看av大片| 美女被人操视频在线观看| www.狠狠| 免费影视观看网站入口| 高清欧美精品xxxxx在线看| 福利视频网站导航| 最近中文av字幕在线中文| 中文字幕日本在线观看| 中文字幕专区| 国产区视频在线播放| 午夜免费视频在线国产| 国产一区二区在线|播放| 国产视频一二区| 国产成人精品综合网站| 天天噜天天色| 国产免费永久在线观看| 99视频免费| 中文乱码字幕高清在线观看| 国产黄a三级三级三级av在线看| 2018中文字幕在线| 天天草天天操| 国产精品一区二区三区视频网站| 国产一级二级在线| 四虎www视频| 中文字幕有码在线视频| 国产videos| 黄色av网站在线| 国产www.大片在线| 国产免费网址| gogo高清在线播放免费| 国产精品自产拍在线网站| 精品欧美日韩一区二区 | av小说在线| 国产美女视频一区二区三区| 国产国语**毛片高清视频| www.操操操.com| 国产二区在线播放| 91超碰国产在线| 97福利电影| 成人超碰在线| 热99在线观看| 99在线播放| 国产第一页在线| 国产免费一级| 国产专区在线| 老鸭窝av在线| www.夜夜操.com| 国产精品伦理一区二区三区| 麻豆精品传媒视频观看| 在线亚洲电影| 97在线超碰| 精品久久亚洲一级α| 国产人成网在线播放va免费| 超碰在线免费播放| 日韩a视频在线观看| 天堂网中文在线| 亚洲精品影视在线| 在线黄色国产电影| 国产精品蜜臀| 精品视频vs精品视频| 国产精品777一区二区| 国产网站av| 国产色在线观看| 国产激情视频网址| 国产99在线|亚洲| 在线中文字幕资源| 亚洲成人在线播放| 青青九九免费视频在线| 亚洲国产精品区| 热99在线观看| 中文字幕视频在线| 精品麻豆视频| 免费观看v片在线观看| 黄色免费av| 国产精品免费视频二三区| 国产精品美女一区二区三区四区| 国产亚洲精品久久久网站好莱 | 国产免费永久在线观看| 五月婷婷在线观看| 国产porny蝌蚪视频| 在线免费观看黄色av| 蜜桃视频中文字幕| 午夜av在线播放| 精品一区二区三区高清免费不卡| 午夜在线不卡| 国产一区二区三区不卡在线| 国产精品久久在线| 欧美日韩亚洲国内综合网| 日韩av成人| www.色婷婷| 国产偷激情在线| 日本成人在线播放| 国产经典自拍视频在线观看 | 国产精品综合久久久久| 国产精品69一区二区三区| 日本18视频网站| 在线视频观看国产| 自拍亚洲国产| 黄色在线视频观看网站| 在线观看中文字幕|