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

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

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

    如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

    CowNew開源團(tuán)隊(duì)

    http://www.cownew.com 郵件請聯(lián)系 about521 at 163.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評(píng)論 :: 0 Trackbacks
    ?

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

    我們這個(gè)控件將演示控件的自定義事件的書寫。這個(gè)控件有一個(gè)類型為stringSensitiveText屬性,當(dāng)用戶在輸入框中輸入的文字為InvalidText時(shí)就會(huì)觸發(fā)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屬性的添加方法大家已經(jīng)熟悉了,這里不多解釋。

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

    3)、Delphi中的控件的事件機(jī)制是通過方法指針來實(shí)現(xiàn)的。聲明方法指針的格式為:

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

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

    ? 但是我們現(xiàn)在只是聲明了一個(gè)事件屬性,并沒有書寫任何代碼來激發(fā)這個(gè)事件。我們應(yīng)該在合適的時(shí)候激發(fā)此事件,顯而易見我們應(yīng)該在Change方法中激發(fā)此事件:

    procedure TTextSenseEdit.Change;

    begin

    ? inherited;

    ? if Text = SensitiveText then

    ??? if Assigned(OnSensitiveText) then

    ????? OnSensitiveText(Text);

    end;

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

    思考題:

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

    posted on 2005-10-21 23:30 CowNew開源團(tuán)隊(duì) 閱讀(1590) 評(píng)論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲成a人片毛片在线| 久久精品无码专区免费青青| 伊人久久免费视频| 亚洲Av无码乱码在线znlu| 亚洲最大视频网站| 国产大片51精品免费观看| 亚洲高清有码中文字| 一区二区三区福利视频免费观看| 亚洲午夜在线一区| 久热中文字幕在线精品免费| 精品亚洲一区二区| 久久久免费观成人影院| 亚洲AV蜜桃永久无码精品| 国产尤物在线视精品在亚洲| 91在线视频免费91| 在线精品亚洲一区二区| 毛片免费在线视频| 久久久国产亚洲精品| 亚洲综合色婷婷七月丁香| 国产精品无码永久免费888| 最新国产AV无码专区亚洲| 久久国产免费福利永久| 久久WWW免费人成—看片| 亚洲熟妇无码一区二区三区| 亚洲午夜国产精品无码老牛影视 | 亚洲国产精品va在线播放| 我要看WWW免费看插插视频| a视频在线免费观看| 亚洲欧洲成人精品香蕉网| 在线观看免费高清视频| 免费毛片a线观看| 亚洲制服丝袜一区二区三区| 亚洲午夜国产精品无码老牛影视| 热久久精品免费视频| 一级A毛片免费观看久久精品| 亚洲男人av香蕉爽爽爽爽| 暖暖免费日本在线中文| 老司机亚洲精品影院| 91免费国产自产地址入| 国产精品黄页免费高清在线观看| 亚洲精品久久无码av片俺去也|