麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

Delphi托盤編程實戰(zhàn)演練

2019-11-18 18:38:06
字體:
供稿:網(wǎng)友
   很多人認(rèn)為Delphi是一個RAD工具,包括我本人在上學(xué)的時候?qū)?/SPAN>Delphi也有偏見,現(xiàn)在走出了“象牙塔”,涉及的面廣了,遇到的問題多了,慢慢地也有了自己的一點心得體會。其實,Delphi是基于Object Pascal 語言的開發(fā)工具,也就是說Delphi本質(zhì)上是一種語言工具,并且是真正的面向?qū)ο蟮摹O旅嫖遗e的例子就是用Delphi實現(xiàn)的一個托盤小程序。程序短小精悍,脈絡(luò)分明,我將對關(guān)鍵部分進(jìn)行詳細(xì)講解。就象候俊杰先生把MFC一層一層地剝開一樣,今天我也來一次“庖丁解牛”。

   在Delphi中涉及到系統(tǒng)編程的方面毫無例外都要調(diào)用API函數(shù),在ShellAPI.pas單元中有要用到的API函數(shù)的原型。

實戰(zhàn)演練:

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

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

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

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

type

_NOTIFYICONDATAA = record

       cbSize: DWord;

       Wnd: HWND;

       uID: UINT;

       uFlags: UINT;

       uCallbackMessage: UINT;

       hIcon: HICON;

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

end;

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

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

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

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

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

3>        uFlags是一個標(biāo)志位,它表示當(dāng)前所創(chuàng)建的托盤程序具有哪些性質(zhì):

NIF_ICON          表示當(dāng)前所設(shè)置的圖標(biāo)(即hIcon的值)是有效的

NIF_MESSAGE  表示當(dāng)前所設(shè)置的系統(tǒng)消息(即uCallBackMessage的值)是有效的

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

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

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

7>       szTip就是當(dāng)你的鼠標(biāo)放到任務(wù)欄托盤的小圖標(biāo)上的時候彈出來的提示信息。

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

三. 雙擊主窗體,進(jìn)入FormCreate的代碼區(qū)域:

TForm1.FormCreate(Sender:TObject);

    Begin

        //NotifyIcon為全局變量,在程序的開頭已經(jīng)定義了

        with NotifyIcon do

        begin

  cbSize:=SizeOf(TNotifyIconData);

  Wnd:=Handle;   //指向當(dāng)前窗體Form1的句柄

uID:=1;

  uFlags:=NIM_ICON or NIM_MESSAGE or NIM_TIP;

  uCallBackMessage:=WM_NID;

  hIcon:=application.Icon.Handle;

  szTip:=”張家惡少

end;.

//把設(shè)置好的變量NotifyIcon加入到系統(tǒng)中以便處理

Shell_NotifyIcon(NIM_ADD,@NotifyIcon);

   End;

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

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;

好了,一個最簡單的程序誕生了,大家自己設(shè)置好自己喜歡的圖標(biāo).

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

五.最后要記住在關(guān)閉應(yīng)用程序的時候要釋放掉建立的托盤程序,否則會占用系統(tǒng)資源。

TForm1.FormDestroy(Sender:TObject);

Begin

  Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);

End; 

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

E_Mail: [email protected]        QQ: 8133413  張家惡少


上一篇:Delphi程序與Chm幫助關(guān)聯(lián)的簡單實現(xiàn)

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 国产91九色视频 | 国产无遮挡一区二区三区毛片日本 | 在线天堂中文在线资源网 | 婷婷久久青草热一区二区 | 一级免费黄视频 | 性大片1000免费看 | 欧洲色阁中文字幕 | 国产精品久久久久久久av | 色综合网在线观看 | 亚洲欧美aⅴ| 羞羞的小视频 | 亚洲3atv精品一区二区三区 | 欧美精品免费一区二区三区 | 在线中文字幕不卡 | 成人在线视频在线观看 | 欧美黄色一级带 | 免费一级在线视频 | av在线不卡免费 | 看免费的毛片 | 成人在线免费观看视频 | 毛片在线免费播放 | 亚洲欧美成aⅴ人在线观看 免费看欧美黑人毛片 | 国产亚洲精品久久久久久久久 | 精品国产一区二区三区久久久蜜月 | 怦然心动50免费完整版 | 日本高清黄色片 | 污污短视频 | 青草久久av | 九色中文 | 欧美日韩网站在线观看 | 欧美精品99 | 亚洲性生活视频 | 国产午夜免费福利 | 97超级碰碰人国产在线观看 | av亚洲在线观看 | 曰批全过程120分钟免费69 | 精品亚洲午夜久久久久91 | 国产在线播放一区二区 | 天天碰天天操 | 久久久青青草 | 日韩精品网站在线观看 |