a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > Delphi > 正文

Delphi背后---初學(xué)者參考之二(1)

2019-11-18 18:23:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

計(jì)算機(jī)語(yǔ)言一代一代地從機(jī)器語(yǔ)言發(fā)展到高級(jí)語(yǔ)言,從復(fù)雜到簡(jiǎn)單(其實(shí)也不簡(jiǎn)單),體現(xiàn)了計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展。計(jì)算機(jī)語(yǔ)言越高級(jí),就越抽象越人性化,與低層硬件的關(guān)系就越少,使用起來(lái)就越方便。但無(wú)論計(jì)算機(jī)語(yǔ)言如何高級(jí),都是對(duì)操作系統(tǒng)層的抽象,因此我們總可以找出理解高級(jí)語(yǔ)言背后的規(guī)律,那就是:高級(jí)語(yǔ)言寫(xiě)的代碼只是為了描述人們的需求,而這些代碼要通過(guò)“翻譯器”翻譯成機(jī)器語(yǔ)言形式才能被機(jī)算機(jī)識(shí)別執(zhí)行。所謂的翻譯有兩種方式:一是編譯方式,代碼事先通過(guò)編譯器生成機(jī)器語(yǔ)言代碼,再由操作系統(tǒng)調(diào)度執(zhí)行,如Delphi語(yǔ)言、C++語(yǔ)言等;二是解釋方式,該方式在計(jì)算內(nèi)是邊解釋邊執(zhí)行,并不事先生目標(biāo)程序,如Basic語(yǔ)言、腳本語(yǔ)言等。解釋方式的特點(diǎn)運(yùn)行速度慢,對(duì)計(jì)算機(jī)硬件要求比較高。

計(jì)算機(jī)語(yǔ)言定義描述人們需求的規(guī)則,在語(yǔ)言的背后是編譯器或解釋器。編譯器或解釋器的主要工作就是翻譯代碼,成為人與計(jì)算機(jī)交流的主要通道。這樣在操作系統(tǒng)不變的情況下,各種開(kāi)發(fā)工具各顯神通,但最終都要生成計(jì)算機(jī)可執(zhí)行的代碼。所以無(wú)論用哪種計(jì)算機(jī)語(yǔ)言寫(xiě)的程序要判斷其好與壞很大程度上依賴于該語(yǔ)言的編譯器或解釋器。Delphi的編譯器仍然是目前世界上最先進(jìn)最優(yōu)秀效率最高的編譯器。

從高級(jí)語(yǔ)言的特點(diǎn)來(lái)看,它們基本上都是對(duì)操作系統(tǒng)提供的服務(wù)接口封裝,在此基礎(chǔ)上加入自己的語(yǔ)言特性,如OOP、指針、內(nèi)存管理模式等。

Delphi語(yǔ)言的整個(gè)架構(gòu)來(lái),我們寫(xiě)程序要么是直接使用VCL,要么是調(diào)用操作系統(tǒng)提供的API,要么是使用Com服務(wù),又或是直接使用匯編語(yǔ)言完成我們的工作。

1. VCL

Delphi最核心最偉大的就是可視化組件庫(kù)(VCL——Visual Component Library)和跨平臺(tái)組件庫(kù)存(CLX——aComponent Library for Cross-Platform),類(lèi)似于Microsoft MFC,但其架構(gòu)比MFC至少要先進(jìn)兩到三代。用Delphi編程你可以選擇VCL也可以不用VCL一切從頭開(kāi)始。假設(shè)寫(xiě)一個(gè)建窗口并顯示“Hello world”的程序,如果不用VCL,那么你得從調(diào)用APICreateWindow開(kāi)始,這是一件多么麻煩的事,不過(guò)這還得看你的要求。這里只是說(shuō)明用Delphi編程離開(kāi)VCL并不是不行,如控制臺(tái)程序。

VCL是一個(gè)功能強(qiáng)大的類(lèi)庫(kù),它是Delphi語(yǔ)言面向?qū)ο筇匦缘木A與結(jié)晶,類(lèi)圖結(jié)構(gòu)如下:

這是一個(gè)縮略的類(lèi)圖結(jié)構(gòu),但很具有代表性,從類(lèi)圖中我們可以看出,VCL只有一個(gè)根——TObjct,它的每一個(gè)派生類(lèi)只有一個(gè)祖先。這正是Delphi語(yǔ)言的面向?qū)ο蟮奶攸c(diǎn),所有類(lèi)的最原始祖先是TObjcet,繼承方式是單一繼承。需要說(shuō)明的是:

l         雖然VCL設(shè)計(jì)很經(jīng)典也很龐大,但不要被這些所嚇倒。說(shuō)白了他就是一個(gè)類(lèi)庫(kù),是很多有一定關(guān)系的類(lèi)放在一起完成一定功能的類(lèi)庫(kù),而這些類(lèi)要么是封裝WindowsAPI,要么是調(diào)用WindwsCOM服務(wù),又或是使用匯編直接操作內(nèi)存。前面說(shuō)過(guò),我們寫(xiě)程序可以用VCL也可以不用VCL,說(shuō)明VCL并不是必須的。如果有必要,我們可以繼承擴(kuò)展其中任何一個(gè)類(lèi)使之成為符合自己要求的類(lèi)。如我們要擴(kuò)展TPanal類(lèi),使鼠標(biāo)進(jìn)入和離開(kāi)時(shí)能觸發(fā)相應(yīng)的事件(OnMouseEnter/OnMouseLeave),如QQ面板的功能。

u       從【File->New->Unit】新建一個(gè)單元。

u       寫(xiě)代碼如下,然后保存該單元為MyPanelUnit

unit MyPanelUnit;

 

interface

  uses Classes, ExtCtrls, Messages, Controls;

  type

    TMouseActionEvent = PRocedure(Sender: TObject) of object;

    TMyPanel = class(TPanel)

      private

                             FOnMouseEnter, FOnMouseLeave:

                                  FouseActionEvent;

        //截獲鼠標(biāo)進(jìn)入消息

        procedure WMMouseEnter (var Message:   

            TMessage); message CM_MOUSEENTER;

        //截獲鼠標(biāo)移開(kāi)消息

        procedure WMMouseLeave (var Message:        

          TMessage); message CM_MOUSELEAVE;

      published

        property OnMouseEnter: TMouseActionEvent read

           FOnMouseEnter write FOnMouseEnter;

        property OnMouseLeave: TMouseActionEvent read

           FOnMouseLeave write FOnMouseLeave;

    end;

//注意"Register"中的"R"一定要大寫(xiě),這是Delphi語(yǔ)言中唯一要注意大小的地方

procedure Register;

 

implementation

 

{ TMyPanel }

 

procedure Register;

begin

  //DelphiIDE中注冊(cè)組件,顯示在面板"MyControl"

  RegisterComponents('MyControl', [TMyPanel]);

end;

 

procedure TMyPanel.WMMouseEnter(var Message: TMessage);

begin

  //確定鼠標(biāo)進(jìn)入中是否有代碼,如果有執(zhí)行

  if Assigned(FOnMouseEnter) then

    FOnMouseEnter(Self);

end;

 

procedure TMyPanel.WMMouseLeave(var Message: TMessage);

begin

  //確定鼠標(biāo)進(jìn)入中是否有代碼,如果有執(zhí)行

  if Assigned(FOnMouseLeave) then

    FOnMouseLeave(Self);

end;

 

end.

u       然后點(diǎn)擊【Component->Install Component…】,如下圖:

   

在“Unit file name”中選中我們剛才的單元MyPanelUnit.pas,其他選項(xiàng)默認(rèn)。然后點(diǎn)擊“OK”, 在“Package dclusr.bpk will be build then install, Continue?”選擇“Yes”,待編譯安裝完后保存,這樣TmyPanel控件就被安裝到Delphi中了。滾動(dòng)Delphi的控件面板到最后,將會(huì)看到如下圖的控件頁(yè)MyControl

u       然后再新建一個(gè)工程,單擊【File->New->application】,把MyControl頁(yè)中的MyPanel拖到Form上,按F11鍵,切換到Events頁(yè),如下:

TPanel比較一下,看是不是多了OnMouseEnterOnMouseLeave事件。雙擊OnMouseEnter,寫(xiě)代碼如下:

procedure TForm1.MyPanel1MouseEnter(Sender: TObject);

begin

  ShowMessage('鼠標(biāo)進(jìn)入MyPanel1');

end;

然后按F9運(yùn)行,移動(dòng)鼠標(biāo)到MyPanel1上,看一下結(jié)果如何。

就這么簡(jiǎn)單,我們擴(kuò)展了TPanel,使其具有處理鼠標(biāo)進(jìn)入和移開(kāi)事件的能力,所以VCL并不神秘,任何人都可以重寫(xiě)里面的組件(類(lèi)),使之成為自己所要的東西。

l         Delphi支持接口繼承,從某種意義上說(shuō)實(shí)現(xiàn)了多重繼承,如TComponent的定義如下:

TComponent = class(TPersistent, IInterface,

IInterfaceComponentReference)

l         不要拿抽象類(lèi)創(chuàng)建實(shí)例。類(lèi)中只要有一個(gè)方法是抽象方法,那么這個(gè)類(lèi)就是抽象類(lèi)。如TStrings定義如下:

    TStream = class(TObject)

  private

   

  protected

   

  public

    function Read(var Buffer; Count: Longint): Longint; virtual; abstract;

    function Write(const Buffer; Count: Longint): Longint; virtual; abstract;

   

  end;

一個(gè)方法的定義中只要有abstract關(guān)鍵字就是抽象方法。用抽象類(lèi)來(lái)創(chuàng)建實(shí)例沒(méi)有任何意義,因?yàn)?/SPAN>ReadWrite并沒(méi)有實(shí)現(xiàn),如果調(diào)用則會(huì)出現(xiàn)為例。

 

(未完,請(qǐng)參看Delphi背后---初學(xué)者參考之二(2) )

(如需要轉(zhuǎn)載,請(qǐng)注明出處及作者http://haitian.myrice.com)


上一篇:Delphi模式編程之策略模式(上)

下一篇:在Delphi中使用動(dòng)態(tài)圖標(biāo)

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

新聞熱點(diǎn)

疑難解答

圖片精選

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

主站蜘蛛池模板: 日本久久久亚洲精品 | 久久人体| 国产精品一区二区在线观看免费 | av网站在线免费看 | 色噜噜亚洲 | 国产综合久久 | 亚洲一区二区日韩 | 国产一区二区三区免费 | 毛片在线免费 | 五月综合婷 | 午夜精品久久久久 | 日韩欧美中文字幕视频 | 亚欧色视频 | 97超碰自拍 | 亚洲欧美一区二区三区视频 | 日韩视频二区 | 欧美一区二区三区免费观看 | 国产三级在线观看 | 国产精品国产三级国产专播品爱网 | 亚洲精品99久久久久中文字幕 | 97av视频| 日韩国产激情 | 国产一区二区毛片 | 欧美黄色网 | 国产大奶视频 | 综合国产 | 日韩欧美一区二区三区视频 | 天堂va| 欧美日韩系列 | 精品视频一区二区三区 | 久久香蕉国产 | 欧美精品一区二区三区在线四季 | 国产精品乱码一区二区三区 | 丁香婷婷综合激情五月色 | 国产精品毛片一区二区在线看 | 欧美乱淫| 欧美一区高清 | 国产日韩精品视频 | 午夜色视频在线观看 | 国产精品久久av | 国产精品久久久久久久岛一牛影视 |