程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Delphi中的消息機制

Delphi中的消息機制

編輯:.NET實例教程
 許多的面向對象程序設計語言都支持對消息的處理。消息處理是一種動態響應客戶類發出的請求,它與過程調用不同。過程調用中,客戶類必須知道服務類提供了哪些過程,以及每個過程的調用約定,並且在調用時需要明確指出要調用服務類中的哪個過程,相當於靜態地將客戶類與服務類進行了某種調用關系的綁定,這將導致客戶類與服務類的耦合度增加。消息處理則是動態的,當客戶類需要某程服務時,會向服務類發送一個消息,當服務類收到此消息後,會檢查自己是否有響應此消息的處理過程,如果有則調用該過程。我們可以舉個例子來說明這兩種處理方式的不同。比如我們想從A城市到B城市去,一種方法是你知道酒店商務中心提供訂票服務,打電話訂一張機票,這相當於是過程調用,你明確的知道誰可以提供服務,提供哪種服務;另一種方法是打電話到灑店前台,說你要一張前往B城市的機票,需要其幫你准備,稍後前台就會告訴你是否准備好了,我們並不知道前台是否提供這種服務,只是說出了我們的要求(發送消息給前台)。

        下面我們以Delphi為使用語言,說明在程序設計中消息是如何定義、發送和處理的。在Delphi中聲明消息處理過程之前,首先要定義一個消息常,其值為一個整數(取值范圍在1到49151之間),一般我們會使用Messages單元中定義的WM_USER常量作為基數。



const
  CM_EmbeddableFormClose = WM_User + $01;

 

        一般情況下Windows消息是使用WM_作為前綴,表示Windows Message;用戶自定義的消息則以CM_作為前綴,表示Customer Message。

        在定義好消息之後,就需要定義一個處理該消息的消息過程。消息方法是由消息發分發而觸發的,不需要程序員顯示的調用,所以一般都是將其聲明為一個類的私有方法Private,當然如果該類的子類需要改寫這方法,則可以將其聲明為保護方法Protected



Type
    TMessageTester = class
     private
        procedure EmbeddableFormClose(Var Msg: TMessage); Message CM_EmbeddableFormClose;
     public
       ......
     end;

        此處僅為了說明消息方法的使用,故沒有列出其全部的代碼。由於它被聲明為私有方法,所在在客戶類中是看不到這個方法的,也就無法通過指定方法名的方式調用,但我們可以使用發送消息來調用這一方法。



    PostMessage(HostForm.Handle, CM_EmbeddableFormClose, 0, Handle);
    Application.ProcessMessages;

        這樣我們就向服務類(即上面代碼中的HostForm)發送了CM_EmbeddableFormClose消息,服務類在查找到該消息的處理方法時即執行該方法中的代碼。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved