六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Delphi自定義消息應用一例

[摘要]---- 現在很多的應用程序都有這樣一種功能,當用戶選擇最小化窗口時,窗口不是象平常那樣最小化到任務欄上,而是“最小化”成一個任務欄圖標。象FoxMail 3.0 NetVampire 3.0等都提供了這樣的功能。實現這樣的功能實際上并不復雜,在窗口最小化時,窗口會發出WM_SYSCOMMAND消...
---- 現在很多的應用程序都有這樣一種功能,當用戶選擇最小化窗口時,窗口不是象平常那樣最小化到任務欄上,而是“最小化”成一個任務欄圖標。象FoxMail 3.0 NetVampire 3.0等都提供了這樣的功能。實現這樣的功能實際上并不復雜,在窗口最小化時,窗口會發出WM_SYSCOMMAND消息,你只要需要截取Windows的WM_SYSCOMMAND消息,在窗口最小化時隱藏窗口并調用WindowsAPI函數Shell_NotifyIcon將定義的圖標添加到任務欄上,Shell_NotifyIcon的函數定義是這樣的:function Shell_NotifyIcon(dwMessage:DWORD; lpData: PNotifyIconData): BOOL; stdcall; 其中的參數dwMessage指定Shell_NotifyIcon函數的操作,可以是NIM_ADD NIM_DELETE NIM_MODIFY三個值中的一個,分別對應添加圖標、刪除圖標、修改圖標的動作。  

---- 參數lpData指向的PNotifyIconData結構的定義如下:  

_NOTIFYICONDATAW = record
    cbSize: DWORD;
    Wnd: HWND;
    uID: UINT;
    uFlags: UINT;
    uCallbackMessage: UINT;
    hIcon: HICON;
    szTip: array [0..63] of WideChar;
  end;

  TNotifyIconData = _NOTIFYICONDATAW;
---- 在這個結構中Wnd指明所屬的窗口,UCallbackMessage指明回調消息,如果指明了Wnd和 uCallbackMessage,則當用戶對任務欄圖標有動作(如點擊圖標,在圖標上移動光標等)。系統都會發送uCallbackMessage消息給Wnd指定的窗口。hIcon是要添加的圖標的句柄,szTip 是圖標的提示行(就是當移動光標到圖標上,出現的一個小黃方框內出現的文字)。消息。實現上面的功能,最主要的是要處理WM_SYSCOMMAND消息和自定義的圖標消息,這些消息在Delphi中并沒有相應的事件。這里就需要使用到Delphi的自定義消息處理功能來截取并處理這些消息。  

---- 首先看下面的程序。在執行程序之前,首先要改變Form1的Icon屬性,給Form1裝入一個圖標,否則在任務欄上會出現一塊空白。  

unit Unit1;
interface
uses
  Windows, Messages, SysUtils,  
Classes, Graphics, Controls, Forms,
  Dialogs,ShellAPI;

const
  WM_BARICON=WM_USER+200;

type
  TForm1 = class(TForm)
  private
     procedure WMSysCommand(var
Message: TMessage); message WM_SYSCOMMAND;
     procedure WMBarIcon(var
Message:TMessage);message WM_BARICON;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.WMSysCommand
(var Message:TMessage);
var
   lpData:PNotifyIconData;
begin
  if Message.WParam = SC_ICON then
  begin
     //如果用戶最小化窗口則將窗口
     隱藏并在任務欄上添加圖標
     lpData := new(PNotifyIconDataA);
     lpData.cbSize := 88;
//SizeOf(PNotifyIconDataA);
     lpData.Wnd := Form1.Handle;
     lpData.hIcon := Form1.Icon.Handle;
     lpData.uCallbackMessage := WM_BARICON;
     lpData.uID :=0;
     lpData.szTip := 'Samples';
     lpData.uFlags := NIF_ICON  
or NIF_MESSAGE or NIF_TIP;
     Shell_NotifyIcon(NIM_ADD,lpData);
     dispose(lpData);
     Form1.Visible := False;
  end
  else
  begin
     //如果是其它的SystemCommand
     消息則調用系統缺省處理函數處理之。
     DefWindowProc(Form1.Handle,Message.
Msg,Message.WParam,Message.LParam);
  end;
//
end;

procedure TForm1.WMBarIcon(var Message:TMessage);
var
   lpData:PNotifyIconData;
begin
  if (Message.LParam = WM_LBUTTONDOWN) then
   begin
     //如果用戶點擊任務欄圖標則將圖標刪除并回復窗口。
     lpData := new(PNotifyIconDataA);
     lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
     lpData.Wnd := Form1.Handle;
     lpData.hIcon := Form1.Icon.Handle;
     lpData.uCallbackMessage := WM_BARICON;
     lpData.uID :=0;
     lpData.szTip := 'Samples';
     lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
     Shell_NotifyIcon(NIM_DELETE,lpData);
     dispose(lpData);
     Form1.Visible := True;
   end;
end;

end.
---- 運行上面的程序,點擊程序窗口標題欄上的最小化按鈕,你就可以看到窗口被“最小化”成了一個任務欄圖標,點擊圖標,窗口又會恢復原來的狀態。  

---- 從上面的程序可以看到,Delphi的自定義消息處理功能的實現也是十分簡單的,首先在Form類的Private定義中加入自定義消息處理函數的定義,定義的描述如下:  

procedure UserPro(Var Message:
TMessage):message WindowsMessage
其中UserPro是用戶自定義消息處理函數的名稱,
WindowsMessage是Windows消息常量或自定義消息常量。
---- 然后在程序中加入消息處理函數,函數的一般格式如下:  

    Procedure UserClass.UserPro(Var Message:TMessage);
    var
//加入定義
    Begin
//加入程序語句
    End;
    其中UserClass是封裝自定義消息處理函數的類的名稱。
---- 最后,Delphi的自定義消息處理函數要涉及到Windows的消息的結構,在這里我就不多說了,大家可以參考Windows API幫助和Delphi的相關幫助信息。相信大家如果掌握了Delphi的自定義消息處理函數,一定可以編寫出象VB一樣簡潔,象C++一樣功能強大的程序來的。


主站蜘蛛池模板: 日韩欧美黄色 | 日韩经典中文字幕 | 青青草99热这里都是精品 | 亚洲看逼| 午夜操操操| 酥酥影院一级毛片在线看 | 午夜影院黄色片 | 齐天大性床战铁扇公主 | 日韩精品亚洲专区在线观看 | 亚洲欧美在线观看一区二区 | 日韩专区亚洲综合久久 | 三级黄色在线播放 | 色黄大片| 日本大胆欧美人术艺术 | 日韩经典中文字幕 | 速度与激情9免费完整版高清 | 日韩一区二区不卡 | 亚洲一区二区影视 | 在线播放侵犯高傲女教师希崎 | 亚洲产国偷v产偷v自拍涩爱 | 青娱乐欧美 | 日韩 欧美 亚洲 国产 | 最近中文字幕无吗免费版 | 亚洲 欧美 精品 中文第三 | 色丁香在线 | 日韩高清的天堂在线观看免费 | 日日摸夜夜欧美一区二区 | 深夜福利成人 | 色www永久免费视频 色www亚洲 | 欧美影院在线观看在线观看看 | 亚洲精品视频在线观看免费 | 午夜免费啪视频 | 午夜小视频男女在线观看 | 日韩影视在线观看 | 视频二区中文字幕 | 亚综合 | 天狼影院伦理片在线bd观看 | 在线观看黄日本高清视频 | 四虎国产永久免费久久 | 亚洲 欧美 日韩中文字幕一区二区 | 欧美视频一区二区三区 |