乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

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

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

        實戰(zhàn)演練:

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

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

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

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

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

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

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

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

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

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

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

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


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

      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加入到系統(tǒng)中以便處理

      Shell_NotifyIcon(NIM_ADD,@NotifyIcon);

      End;

        四.接下來就是定義一個消息處理函數:系統(tǒng)給窗體發(fā)來了一個消息,就由下面這個函數來處理。每個消息處理函數都是處理某一類消息的,大家仔細地看看下面函數體的定義和一般的函數定義有什么不一樣:消息處理函數要在后面加上消息的名稱,這樣當系統(tǒng)發(fā)來WM_NID消息時,就是自動觸發(fā)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會在可見與不可見之間切換,也就是說單擊一下顯示,再單擊一下又隱藏。當你右擊圖標的時候會彈出一條消息:“你點擊的是右鍵”。
        
        五.最后要記住在關閉應用程序的時候要釋放掉建立的托盤程序,否則會占用系統(tǒng)資源。

      TForm1.FormDestroy(Sender:TObject);

      Begin

      Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);

      End;

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

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多