亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi托盤編程實戰演練

2019-11-18 18:38:06
字體:
來源:轉載
供稿:網友
   很多人認為Delphi是一個RAD工具,包括我本人在上學的時候對Delphi也有偏見,現在走出了“象牙塔”,涉及的面廣了,遇到的問題多了,慢慢地也有了自己的一點心得體會。其實,Delphi是基于Object Pascal 語言的開發工具,也就是說Delphi本質上是一種語言工具,并且是真正的面向對象的。下面我舉的例子就是用Delphi實現的一個托盤小程序。程序短小精悍,脈絡分明,我將對關鍵部分進行詳細講解。就象候俊杰先生把MFC一層一層地剝開一樣,今天我也來一次“庖丁解?!?。

   在Delphi中涉及到系統編程的方面毫無例外都要調用API函數,在ShellAPI.pas單元中有要用到的API函數的原型。

實戰演練:

一.新建一個應用程序:File->New ApplicatonInterface部分定義一個消息常量:const WM_NID=WM_USER+1000; 系統規定從WM_USER開始為用戶自定義消息。

二.定義一個全局變量: NotifyIcon:TNotifyIconData,NotifyIcon是非常重要的一個變量,整個程序基本上是圍著這個變量在轉。TNotifyIconData是一個記錄類型,按住Ctrl鍵,在TNotifyIconData 雙擊即進入ShellAPI.pas單元。(注:在Delphi中,這是一個非常好的對源代碼進行分析的方法,源代碼說明一切,你要想知道程序背后的內幕,最好的方法就是分析源代碼?。┐藭r出現了以下賦值語句:

TNotifyIconData = TNotifyIconDataA,這個意思很明顯,就是說TNotifyIconDataTNotifyIconDataA是同種數據類型,接著往下看有:

TNotifyIconDataA = _NOTIFYICONDATAA,意思與剛才的一樣,再往下看: 

type

_NOTIFYICONDATAA = record

       cbSize: DWord;

       Wnd: HWND;

       uID: UINT;

       uFlags: UINT;

       uCallbackMessage: UINT;

       hIcon: HICON;

szTip: array [0..63] of AnsiChar;

end;

這可真是“千呼萬喚始出來,猶抱琵琶半遮面”?,F在大家很清楚了,我們剛才定義的全局變量NotifyIcon其實是一個包含有7個成分的記錄類型變量,就相當于C/C++中的結構體變量(C/C++的程序員應該是再熟悉不過了)。下面我們逐個來解釋記錄類型中的7個部分各有什么功能。

1>        cbSize就是你定義的NotifyIcon變量的大小,用SizeOf(TNotifyIconData)可以取得,如果你是一個熟練的C/C++程序員,你應該不會陌生。在C/C++中,每當要為一個結構體變量分配內存的時候都要:通過 SizeOf(Struct type) 來獲知存放一個這樣的結構體變量要多少內存。

2>        Wnd是一個句柄,你希望托盤程序產生的消息有哪個窗體來處理就讓Wnd指向那個窗體。

例如:你準備在任務欄的托盤小圖標上單擊時窗體是窗體在“顯示”和“隱藏”之間切換,則把Wnd指向主窗體。

3>  uID:如果你要創建多個托盤小程序,那么怎么區分它們呢?就是靠這個ID號來區分。

3>        uFlags是一個標志位,它表示當前所創建的托盤程序具有哪些性質:

NIF_ICON          表示當前所設置的圖標(即hIcon的值)是有效的

NIF_MESSAGE  表示當前所設置的系統消息(即uCallBackMessage的值)是有效的

NIF_TIP          表示當前所設置的提示條(即szTip的值)是有效的。

4>        uCallBackMessage這是7個部分里面最重要的一個。這里指定一個回調消息,也就是說這里定義一個消息名,當你單擊或者右擊托盤圖標的時候就會向你在Wnd所指向的窗體發送一個在uCallBackMessage中定義的消息名,然后你在程序中定義一個消息出來函數來處理這個消息。這樣就把Windows關于消息的整套流程都處理好了。

6>   hIcon為托盤圖標的句柄,根據這個句柄你就可以增加、修改、刪除圖標。

7>       szTip就是當你的鼠標放到任務欄托盤的小圖標上的時候彈出來的提示信息。

在這里我花了大量的筆墨介紹TNotifyIconData的內幕,把這部分搞清楚了,后面的東西就順理成章了。

三. 雙擊主窗體,進入FormCreate的代碼區域:

TForm1.FormCreate(Sender:TObject);

    Begin

        //NotifyIcon為全局變量,在程序的開頭已經定義了

        with NotifyIcon do

        begin

  cbSize:=SizeOf(TNotifyIconData);

  Wnd:=Handle;   //指向當前窗體Form1的句柄

uID:=1;

  uFlags:=NIM_ICON or NIM_MESSAGE or NIM_TIP;

  uCallBackMessage:=WM_NID;

  hIcon:=application.Icon.Handle;

  szTip:=”張家惡少;

end;.

//把設置好的變量NotifyIcon加入到系統中以便處理

Shell_NotifyIcon(NIM_ADD,@NotifyIcon);

   End;

四.接下來就是定義一個消息處理函數:系統給窗體發來了一個消息,就由下面這個函數來處理。每個消息處理函數都是處理某一類消息的,大家仔細地看看下面函數體的定義和一般的函數定義有什么不一樣:消息處理函數要在后面加上消息的名稱,這樣當系統發來WM_NID消息時,就是自動觸發WMNID消息處理函數。

PRocedure WMNID(var msg:TMessage);message WM_NID;

       begin

        case msg.LParam of

          WM_LBUTTONUp; Form1.Visible:=not Form1.Visible;

           WM_RBUTTONUP: ShowMessage(‘您點擊的是右鍵’);

        End;

End;

好了,一個最簡單的程序誕生了,大家自己設置好自己喜歡的圖標.

Project->Options,選中Application頁面,在Icon項中加載自己喜歡的圖標,這樣程序運行時,在任務欄里顯示的就是你喜歡的圖標了。當你單擊圖標時,窗體Form1會在可見與不可見之間切換,也就是說單擊一下顯示,再單擊一下又隱藏。當你右擊圖標的時候會彈出一條消息:“你點擊的是右鍵”。

五.最后要記住在關閉應用程序的時候要釋放掉建立的托盤程序,否則會占用系統資源。

TForm1.FormDestroy(Sender:TObject);

Begin

  Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);

End; 

畢業快半年了,很多東西在學校總理解不了,認識不夠深刻;出到社會,接觸了不少道中朋友,受益非淺,每有心得體會,總想寫成文字,一來總結自己學的東西,二來和大家共同交流。

E_Mail: zhangyi1980912@sina.com        QQ: 8133413  張家惡少


上一篇:Delphi程序與Chm幫助關聯的簡單實現

下一篇:DELPHI的通配符比較(第五版)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品伊人久久久大香线蕉| 亚洲一区二区少妇| www.久久撸.com| 久久深夜福利免费观看| 午夜精品国产精品大乳美女| 国产亚洲a∨片在线观看| 久久手机免费视频| 日韩中文字幕第一页| 福利精品视频在线| 国产日韩精品一区二区| 日韩视频在线免费观看| 国产精品成熟老女人| 成人免费淫片aa视频免费| 国语自产精品视频在线看| 茄子视频成人在线| 伊人久久大香线蕉av一区二区| 国产suv精品一区二区| 久久精品中文字幕免费mv| 亚洲欧美中文在线视频| 日本久久精品视频| 亚洲电影免费观看高清完整版在线| 国产成人高潮免费观看精品| 久久久www成人免费精品| 久久久av亚洲男天堂| 亚洲成人网av| 国产精品欧美一区二区三区奶水| 欧美大学生性色视频| 成人精品久久av网站| 5252色成人免费视频| 亚洲精品日韩激情在线电影| 成人在线播放av| 亚洲色图第三页| 91久久久久久国产精品| 国产欧美日韩91| 亚洲自拍欧美色图| 青青草成人在线| 久久99精品久久久久久琪琪| 日韩精品视频免费专区在线播放| 久色乳综合思思在线视频| 国产精品永久免费观看| 久久久亚洲福利精品午夜| 日韩午夜在线视频| 日韩少妇与小伙激情| 国产91精品久久久久久| 国产精品99久久久久久久久久久久| 亚洲午夜av电影| 成人久久精品视频| 日韩视频免费中文字幕| 日韩av黄色在线观看| 欧美在线视频一二三| 国产精品久久久久久av下载红粉| 日韩中文字幕免费看| 亚洲美女免费精品视频在线观看| 国产亚洲精品久久久久动| 日韩精品极品毛片系列视频| 日韩成人在线网站| 欧美激情第一页xxx| 日韩电影大全免费观看2023年上| 欧美激情按摩在线| 欧洲精品在线视频| 欧美富婆性猛交| 伊人久久久久久久久久久| 日韩久久精品电影| 国产一区二区三区久久精品| 国产黑人绿帽在线第一区| 91国在线精品国内播放| 亚洲色图35p| 欧美一区二区三区精品电影| 另类美女黄大片| 久久久久国色av免费观看性色| 亚洲国产女人aaa毛片在线| 国产亚洲视频在线| 欧美专区日韩视频| 欧美重口另类videos人妖| 欧美专区在线播放| 热久久这里只有精品| 久久久精品久久| 中文字幕视频一区二区在线有码| 欧美激情极品视频| 日韩一区视频在线| 国产精品久久久久7777婷婷| 久久97久久97精品免视看| 国产视频福利一区| 欧美激情女人20p| 在线播放日韩欧美| 91精品免费视频| 亚洲精品视频免费在线观看| 亚洲第一网中文字幕| 亚洲毛茸茸少妇高潮呻吟| xxxxx成人.com| 亚洲欧美另类自拍| 日韩av三级在线观看| 性色av一区二区三区在线观看| 欧美小视频在线观看| 日韩成人高清在线| 国产精品国语对白| 国产精品久久婷婷六月丁香| 日韩电影在线观看中文字幕| 亚洲bt欧美bt日本bt| 亚洲福利在线播放| 精品一区精品二区| 亚洲人午夜精品免费| 国产在线视频91| 日韩欧美在线播放| 欧美一区二区.| 久热精品视频在线观看一区| 欧美黑人又粗大| 成人免费观看49www在线观看| 亚洲春色另类小说| 97精品国产97久久久久久| 中日韩午夜理伦电影免费| 国产在线98福利播放视频| 欧美日韩国产色视频| 欧洲亚洲女同hd| 日韩美女主播视频| 亚洲成人精品久久| 国产精品第3页| 欧美日韩免费在线| 国产亚洲在线播放| 亚洲激情电影中文字幕| 国产精品吹潮在线观看| 国产精品日韩电影| yellow中文字幕久久| 亚洲欧洲高清在线| 亚洲精品国产精品国产自| 亚洲国产精品美女| 亚洲无亚洲人成网站77777| 日韩亚洲欧美中文在线| 91久久精品国产| 亚洲影院色无极综合| 日韩精品福利在线| 国产盗摄xxxx视频xxx69| 国产成人午夜视频网址| 成人精品久久一区二区三区| 亚洲精品国精品久久99热一| 国产精品美乳一区二区免费| 亚洲精品免费在线视频| 成人国产精品久久久久久亚洲| 中文字幕国产亚洲| 免费成人高清视频| 91精品久久久久久久久久久久久| 亚洲精品久久久久久下一站| 久久久日本电影| 亚洲国产精品网站| 91精品国产高清自在线| 色婷婷av一区二区三区久久| 91精品国产乱码久久久久久久久| 中文字幕成人精品久久不卡| 亚洲美女黄色片| 国产亚洲综合久久| 97在线精品国自产拍中文| www.日韩av.com| 久久久国产一区二区| 国产一区二区视频在线观看| 日韩高清电影好看的电视剧电影| 日韩亚洲第一页| 国产精品久久久久久影视| 91成人免费观看网站| 国产精品精品久久久久久| 在线观看中文字幕亚洲| 亚洲自拍中文字幕| 欧美性猛交xxxx富婆弯腰| 亚洲va久久久噜噜噜| 亚洲色图15p|