<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如鵬網 大學生計算機學習社區

    CowNew開源團隊

    http://www.cownew.com 郵件請聯系 about521 at 163.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks
    ?

    四、對特定字符串敏感的Edit控件

    我們這個控件將演示控件的自定義事件的書寫。這個控件有一個類型為stringSensitiveText屬性,當用戶在輸入框中輸入的文字為InvalidText時就會觸發OnSensitiveText事件。按照慣例,我先把源碼展示給大家:

    unit TextSenseEdit;

    ?

    interface

    ?

    uses

    ? SysUtils, Classes, Controls, StdCtrls;

    type

    ? TSensitiveTextEvent = procedure(AText: string) of object;//方法指針

    ? TTextSenseEdit = class(TEdit)

    ? private

    ??? FSensitiveText: string;

    ??? FOnSensitiveText: TSensitiveTextEvent;

    ??? procedure SetSensitiveText(AValue: string);

    ? protected

    ??? procedure Change;override;

    ? public

    ? published

    ??? property SensitiveText: string read FSensitiveText write SetSensitiveText;

    ??? property OnSensitiveText: TSensitiveTextEvent read FOnSensitiveText write FOnSensitiveText;

    ? end;

    ?

    procedure Register;

    ?

    implementation

    ?

    procedure Register;

    begin

    ? RegisterComponents('Linco', [TTextSenseEdit]);

    end;

    procedure TTextSenseEdit.Change;

    begin

    ? inherited;

    ? if Text = SensitiveText then

    ??? if Assigned(OnSensitiveText) then

    ????? OnSensitiveText(Text);

    end;

    ?

    procedure TTextSenseEdit.SetSensitiveText(AValue: string);

    begin

    ? FSensitiveText := AValue;

    end;

    end.

    代碼解釋:

    1)、SensitiveText屬性的添加方法大家已經熟悉了,這里不多解釋。

    2)、正如大家猜測的,Change方法正是編輯框文字發生變化時的調度方法,它將引起OnChange事件。我們可以在這個方法中監控編輯框文字發生的變化,當文字等于SensitiveText就觸發OnSensitiveText事件(具體的實現方法在后邊解釋)。

    3)、Delphi中的控件的事件機制是通過方法指針來實現的。聲明方法指針的格式為:

    方法指針名稱 = procedure(參數列表) of object;

    聲明事件屬性的方法與聲明普通屬性的方法相同。在我們這個例子中,我們首先聲明一個FOnSensitiveText: TSensitiveTextEvent;私有變量,然后property OnSensitiveText: TSensitiveTextEvent read FOnSensitiveText write FOnSensitiveText; 聲明事件屬性。這樣注冊控件后,當用戶把控件放到窗體中后,就會在Object InspectorEvnets頁中出現OnSensitiveText事件,我們就可以像使用其他事件一樣使用這個事件了。

    ? 但是我們現在只是聲明了一個事件屬性,并沒有書寫任何代碼來激發這個事件。我們應該在合適的時候激發此事件,顯而易見我們應該在Change方法中激發此事件:

    procedure TTextSenseEdit.Change;

    begin

    ? inherited;

    ? if Text = SensitiveText then

    ??? if Assigned(OnSensitiveText) then

    ????? OnSensitiveText(Text);

    end;

    if Text = SensitiveText時就判斷控件使用者是否為OnSetSensitiveText寫代碼了(準確的說是是否為OnSetSensitiveText事件句柄賦值了),如果寫代碼了則調用OnSetSensitiveText(Text);來激發OnSetSensitiveText事件,并把控件的Text傳遞給方法的Avalue參數。正如“方法指針”這個名字一樣,被聲明為方法指針類型的變量可以當作方法使用,用來激發事件。VCL已經為我們預定義了一些常用的事件句柄,我們直接拿來使用:TnotifyEventTmouseEventTmouseMoveEventTkeyPressEvent等,具體可以參考VCL源碼。

    思考題:

    1、做一個支持累加運算的文本編輯框控件,用戶可以在編輯框中輸入正整數。當用戶按回車時,如果編輯框中輸入的不是正整數(為負數、小數或一般字符串)則觸發控件的OnError事件;如果輸入的是正整數,則開始計算從1到用戶輸入的那個正整數中所有整數的和(用123+……這種累加的辦法實現,不要用(1+n)*n/2這種直接計算的方法),并且在計算工程中如果發現計算的中間結果位數是5,則觸發OnTailFive事件。

    posted on 2005-10-21 23:30 CowNew開源團隊 閱讀(1587) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 成人a视频片在线观看免费| 三级网站在线免费观看| 1000部拍拍拍18勿入免费视频软件| 亚洲综合国产精品第一页 | 亚洲午夜精品在线| 99久久99久久精品免费观看| 亚洲男人第一av网站| 最近高清中文字幕免费| 亚洲精品综合久久中文字幕| av无码久久久久不卡免费网站| 亚洲综合网美国十次| 可以免费看黄视频的网站| 亚洲宅男精品一区在线观看| 成人性生交大片免费看无遮挡| 亚洲伊人久久大香线蕉AV| 国产又大又黑又粗免费视频| 激情吃奶吻胸免费视频xxxx| 亚洲一区二区高清| 永久在线观看免费视频 | 国产亚洲成av人片在线观看 | 美女无遮挡免费视频网站| 亚洲国产精品一区二区第一页免| 亚洲国产免费综合| 婷婷精品国产亚洲AV麻豆不片| 成人免费大片免费观看网站| 亚洲精品无码永久在线观看男男| 免费大片在线观看网站| 成人电影在线免费观看| 亚洲乱码一二三四区麻豆| 永久久久免费浮力影院| 香蕉视频在线免费看| 亚洲精品午夜久久久伊人| 国产成人一区二区三区免费视频| 国产成人精品免费大全| 亚洲视频在线观看地址| 国产无遮挡又黄又爽免费视频 | 亚洲色成人四虎在线观看| 久久精品国产亚洲精品| 4虎永免费最新永久免费地址| 美女黄色免费网站| 亚洲男人的天堂在线|