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

首頁 > 編程 > Delphi > 正文

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

2019-11-18 18:23:07
字體:
來源:轉載
供稿:網友

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

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

從高級語言的特點來看,它們基本上都是對操作系統提供的服務接口封裝,在此基礎上加入自己的語言特性,如OOP、指針、內存管理模式等。

Delphi語言的整個架構來,我們寫程序要么是直接使用VCL,要么是調用操作系統提供的API,要么是使用Com服務,又或是直接使用匯編語言完成我們的工作。

1. VCL

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

VCL是一個功能強大的類庫,它是Delphi語言面向對象特性的精華與結晶,類圖結構如下:

這是一個縮略的類圖結構,但很具有代表性,從類圖中我們可以看出,VCL只有一個根——TObjct,它的每一個派生類只有一個祖先。這正是Delphi語言的面向對象的特點,所有類的最原始祖先是TObjcet,繼承方式是單一繼承。需要說明的是:

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

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

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

unit MyPanelUnit;

 

interface

  uses Classes, ExtCtrls, Messages, Controls;

  type

    TMouseActionEvent = PRocedure(Sender: TObject) of object;

    TMyPanel = class(TPanel)

      private

                             FOnMouseEnter, FOnMouseLeave:

                                  FouseActionEvent;

        //截獲鼠標進入消息

        procedure WMMouseEnter (var Message:   

            TMessage); message CM_MOUSEENTER;

        //截獲鼠標移開消息

        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"一定要大寫,這是Delphi語言中唯一要注意大小的地方

procedure Register;

 

implementation

 

{ TMyPanel }

 

procedure Register;

begin

  //DelphiIDE中注冊組件,顯示在面板"MyControl"

  RegisterComponents('MyControl', [TMyPanel]);

end;

 

procedure TMyPanel.WMMouseEnter(var Message: TMessage);

begin

  //確定鼠標進入中是否有代碼,如果有執行

  if Assigned(FOnMouseEnter) then

    FOnMouseEnter(Self);

end;

 

procedure TMyPanel.WMMouseLeave(var Message: TMessage);

begin

  //確定鼠標進入中是否有代碼,如果有執行

  if Assigned(FOnMouseLeave) then

    FOnMouseLeave(Self);

end;

 

end.

u       然后點擊【Component->Install Component…】,如下圖:

   

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

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

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

procedure TForm1.MyPanel1MouseEnter(Sender: TObject);

begin

  ShowMessage('鼠標進入MyPanel1');

end;

然后按F9運行,移動鼠標到MyPanel1上,看一下結果如何。

就這么簡單,我們擴展了TPanel,使其具有處理鼠標進入和移開事件的能力,所以VCL并不神秘,任何人都可以重寫里面的組件(類),使之成為自己所要的東西。

l         Delphi支持接口繼承,從某種意義上說實現了多重繼承,如TComponent的定義如下:

TComponent = class(TPersistent, IInterface,

IInterfaceComponentReference)

l         不要拿抽象類創建實例。類中只要有一個方法是抽象方法,那么這個類就是抽象類。如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;

一個方法的定義中只要有abstract關鍵字就是抽象方法。用抽象類來創建實例沒有任何意義,因為ReadWrite并沒有實現,如果調用則會出現為例。

 

(未完,請參看Delphi背后---初學者參考之二(2) )

(如需要轉載,請注明出處及作者http://haitian.myrice.com)


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

下一篇:在Delphi中使用動態圖標

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 欧美一级精品 | 亚洲成人精品久久久 | 久久亚洲精品久久国产一区二区 | 蜜桃网在线观看 | 欧美日本日韩 | 成人在线视频播放 | 亚洲最黄视频 | 国产精品久久久久久久av三级 | 视频国产一区二区 | 中文字幕22页 | 午夜在线视频一区二区三区 | 在线视频1区 | 黄污在线看| 草草视频免费观看 | 久久成人国产精品 | 亚洲一级片免费观看 | 成人在线视频网 | 免费看综艺策驰影院 | 国产大片全部免费看 | 全网免费毛片 | 91精品国产成人 | av色先锋 | 91精品国产91| 成人在线精品视频 | 亚洲精中文字幕二区三区 | 国产精品亚洲综合一区二区三区 | 久久精品视频16 | 精品一区在线视频 | 精品国产一区二区三区四区阿崩 | 国产一区二区在线免费播放 | 爱爱视频天天干 | 欧美日韩在线播放一区 | 国产妇女乱码一区二区三区 | av影院在线 | 久久精品男人 | 中文字幕在线观看二区 | 欧美一区二区三区不卡免费观看 | 亚洲射情| 视频一区二区久久 | 久草干 | 欧美成年私人网站 |