全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)Delphi輔導(dǎo)講義 164

字號(hào):

16.4.2 TDBGrid部件的事件及應(yīng)用
    TDBGrid部件在具有很多重要屬性的同時(shí),Delphi也為它賦予了一些事件,以用于控制用戶在TDBGrid部件中的操作,我們通過(guò)為其中的一些事件編寫處理程序,可以有效地控制TDBGrid部件的行為。因?yàn)樵赥DBGrid部件中一次是顯示多條記錄和記錄中的多個(gè)字段,也許在實(shí)際應(yīng)用中,不同的用戶各有自己特殊的需要,如只想改變其中某一列的值或者控制用戶每次只能進(jìn)出網(wǎng)格中指定的列等等。表16.7列出了TDBGrid部件的主要事件及目的用途。
    表16.7 TDBGrid部件中的主要事件
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    事 件 名 目 的 用 途
    ────────────────────────────────
    OnColEntor 當(dāng)用戶進(jìn)入網(wǎng)格各列時(shí),觸發(fā)該事件
    OnColExit 當(dāng)用戶離開網(wǎng)格各列時(shí),觸發(fā)該事件
    OnDblClick 當(dāng)用戶在網(wǎng)格中雙擊鼠標(biāo)左鍵時(shí),觸發(fā)該事件
    OnDragDrop 當(dāng)用戶在網(wǎng)格中用鼠標(biāo)進(jìn)行拖放操作時(shí),觸發(fā)該事件
    OnDragOver 當(dāng)用戶在網(wǎng)格中用鼠標(biāo)拖動(dòng)網(wǎng)格時(shí),觸發(fā)該事件
    OnDrawDataCell 用于定制繪制網(wǎng)格中各網(wǎng)格單元,當(dāng)向網(wǎng)格中填充數(shù)
    據(jù)時(shí)觸發(fā)該事件
    OnEndDrag 當(dāng)用戶停止拖動(dòng)網(wǎng)格時(shí),觸發(fā)該事件
    OnEnter 當(dāng)網(wǎng)格獲得焦點(diǎn)時(shí),觸發(fā)該事件
    OnExit 當(dāng)網(wǎng)格失去焦點(diǎn)時(shí),觸發(fā)該事件
    OnKeyDown 當(dāng)用戶在網(wǎng)格中按下任何鍵或組合鍵時(shí),觸發(fā)該事件
    OnKeyPress 當(dāng)用戶在網(wǎng)格中按了任何一個(gè)數(shù)字鍵或字母鍵時(shí),觸
    發(fā)該事件
    OnKeyUp 當(dāng)用戶在網(wǎng)格中釋放任何被按下的鍵時(shí),觸發(fā)該事件
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    上述這些事件在我們開發(fā)實(shí)際的應(yīng)用程序時(shí),是很有用處的,讀者們可以仔細(xì)地研究這些事件的用途,并參看聯(lián)機(jī)幫助信息。
    例如,我們可以為TDBGrid部件的OnDblClick事件編寫處理程序,當(dāng)用戶在網(wǎng)格中雙擊鼠標(biāo)左鍵時(shí),彈出一個(gè)列表框供用戶為網(wǎng)格中某一列選擇一個(gè)字段值。在例16.1中我們創(chuàng)建如圖16.5所示的應(yīng)用,在Object Inspector中設(shè)置各字段部件的Visible屬性,在網(wǎng)格中只顯示CustNo、Company、Country和City字段。我們?yōu)镈BGrid編寫OnDblclick事件處理過(guò)程,當(dāng)用戶編輯修改Country字段時(shí),雙擊鼠標(biāo)左鍵便彈出一個(gè)列表框ListBox1,其中顯示“中國(guó)”、“美國(guó)”、“日本”、“英國(guó)”、“法國(guó)”、“俄羅斯”供用戶選擇,用戶單擊其中的國(guó)家名稱后,將相應(yīng)的洲名選入網(wǎng)格中。
    其中ListBox1的Items屬性寫入上述國(guó)家的名稱,并且設(shè)置其Visible屬性為False。
    6.5 TDBNavigator部件及其應(yīng)用
    TDBNavigator 部件主要用于在數(shù)據(jù)集中進(jìn)行記錄導(dǎo)航和為用戶操縱數(shù)據(jù)集中的記錄提供了一組簡(jiǎn)單明了的控制按鈕。TDBNavigator部件中包含一組控制按鈕,用戶單擊其中的按鈕可以向前向后移動(dòng)記錄指針、插入記錄、修改現(xiàn)存記錄、投寄對(duì)記錄的修改、取消修改、刪除記錄;以及刷新記錄的顯示等。
    圖16.7為TDBNavigator部件中的控制按鈕。
    下表描述了TDBNavigator部件中的各個(gè)控制按鈕。
    表16.8 TDBNavigator部件中的控制按鈕
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    按鈕名稱 主 要 功 能
    ─────────────────────────────────
    First 將當(dāng)前記錄指針移到數(shù)據(jù)庫(kù)表中第一條記錄處
    Prior 將記錄指針移到當(dāng)前記錄的前一條記錄處
    Next 將記錄指針移到當(dāng)前記錄的后一條記錄處
    Last 將當(dāng)前記錄指針移到數(shù)據(jù)庫(kù)表中最后一條記錄處
    Insert 調(diào)用數(shù)據(jù)集部件的Insert方法,在當(dāng)前記錄的前面
    插入一條新記錄,并將數(shù)據(jù)集部件置為插入狀態(tài)
    Delete 刪除當(dāng)前記錄,如果TDBNavigator部件的ConfirmDelete
    屬性設(shè)置為true時(shí),會(huì)彈出刪除確認(rèn)對(duì)話框
    Edit 將數(shù)據(jù)集部件置為編輯狀態(tài),以便用戶修改當(dāng)前的記錄
    Post 投寄對(duì)當(dāng)前記錄的修改
    Cancel 取消對(duì)當(dāng)前記錄的修改,并將數(shù)據(jù)集部件置為瀏覽狀態(tài)
    Refresh 清除數(shù)據(jù)瀏覽部件的顯示緩沖區(qū),并用與其相連的數(shù)據(jù)
    集部件(TTable或TQuery)中的記錄刷新顯示緩沖區(qū)。
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    TDBNavigator部件的屬性較少。下面我們作一簡(jiǎn)單的介紹:TDBNavigator部件的一個(gè)重要屬性是VisibleButtons屬性,該屬性中包含著多個(gè)可選的擴(kuò)展子屬性,主要用于選擇TDBNavigator部件中各個(gè)控制按鈕的顯示與否的。因?yàn)樵趯?shí)際的應(yīng)用當(dāng)中,我們并不需要那么多的控制按鈕。如在一個(gè)瀏覽數(shù)據(jù)庫(kù)表的應(yīng)用中,我們一般只需要First、Prior、Next、Last四個(gè)按鈕就行了,那么我們便在VisibleButtons屬性中設(shè)置其它的按鈕為False即可。
    ShowHint屬性:該屬性是布爾型屬性,它用于控制是否顯示TDBNavigator部件中各按鈕的動(dòng)態(tài)提示信息。缺省情況下該屬性的值為False,當(dāng)設(shè)置它的值為True時(shí),當(dāng)用戶將鼠標(biāo)光標(biāo)停留在TDBNavigator部件中某一個(gè)控制按鈕上,超過(guò)1秒鐘時(shí)間后,Delphi便會(huì)自動(dòng)顯示有關(guān)該控制按鈕的提示信息。
    Hints屬性:在缺省情況下,TDBNavigator部件中的各控制按鈕都有相應(yīng)的動(dòng)態(tài)提示信息,如First、Prior、Next、Last等,用戶可以根據(jù)自己的需要,通過(guò)設(shè)置Hints屬性可以為各控制按鈕設(shè)置其他的動(dòng)態(tài)提示信息,用戶自己設(shè)置的動(dòng)態(tài)提示信息會(huì)覆蓋原來(lái)的提示信息。
    16.6 TDBMemo部件及其應(yīng)用
    TDBMemo部件主要用于顯示和編輯數(shù)據(jù)庫(kù)表中的大二進(jìn)制(BLOB)類型的字段值。TDBMemo部件能夠顯示多行文本,也允許用戶在其中輸入和修改多行文本信息,它是Delphi中用來(lái)顯示和編輯數(shù)據(jù)庫(kù)表中的大二進(jìn)制類型的文本字段的的數(shù)據(jù)瀏覽部件。
    TDBMemo部件的主要屬性和作用如下:
    ReadOnly屬性:這是布爾型屬性,為True時(shí),用戶只能在TDBMemo部件中顯示BLOB型文本信息,如Paradox和dBASE數(shù)據(jù)庫(kù)表中的備注型字段。當(dāng)為False時(shí),用戶在TDBMemo 部件中不僅可以顯示BLOB文本信息而且還允許用戶編輯修改其中的文本信息。
    MaxLength屬性:該屬性是整數(shù)型屬性,設(shè)置該屬性的值用于限制用戶向TDBMemo 部件中輸入字符的個(gè)數(shù)。若設(shè)置該值為0時(shí),表示輸入字符的個(gè)數(shù)沒有限制。
    SCrollBar屬性:說(shuō)明TDBMemo部件是否顯示滾動(dòng)條。
    WordWrap屬性:說(shuō)明在TDBMemo部件中輸入文本信息時(shí),輸入到右邊界時(shí),是否自動(dòng)換行。
    Alignment屬性:說(shuō)明文本信息在TDBMemo部件中的對(duì)齊方式,有三種可選值:taLeftJustify、taCenter和taRightJustify。其含義分別是左對(duì)齊,居中和右對(duì)齊。
    在運(yùn)行過(guò)程中,用戶對(duì)TDBMemo部件中顯示的文本信息是不能夠進(jìn)行剪切、拷貝和粘貼操作的,要想具備這些功能,用戶必須編程調(diào)用CutToClipboard、CopyToClipboard 和PasteFromClipboard方法分別來(lái)實(shí)現(xiàn)剪切,拷貝和粘貼操作。
    AutoDisplay屬性:因?yàn)門DBMemo部件中包含著大量的文本信息。應(yīng)用程序在運(yùn)行過(guò)程中要顯示其中的信息需要花費(fèi)很多的時(shí)間,特別是當(dāng)用戶移動(dòng)記錄指針時(shí),都要更新TDBMemo部件中顯示的信息,這樣會(huì)大大減慢程序的運(yùn)行速度。為此Delphi為TDBMemo部件設(shè)定了AutoDisplay屬性,用來(lái)控制是否自動(dòng)顯示表中的備注型字段。當(dāng)AutoDisplay設(shè)置為False時(shí),在TDBMemo部件中只顯示其對(duì)應(yīng)表中的字段名而不顯示字段中的文本信息,用戶如果想瀏覽字段中的文本信息,用鼠標(biāo)左鍵雙擊TDBMemo部件的內(nèi)部即可;當(dāng)設(shè)置AutoDisplay屬性為True時(shí),在TDBMemo部件中會(huì)自動(dòng)地顯示其對(duì)應(yīng)數(shù)據(jù)庫(kù)表中的字段值。
    這里要注意的是,TDBMemo部件中顯示和編輯文本信息的字節(jié)數(shù)為32K,在使用過(guò)程中不要超過(guò)這一限制。
    圖16.8是TDBMemo顯示數(shù)據(jù)庫(kù)表中備注型字段的情形。該例子在C:\Delphi\DEMOS\DA子目錄中,項(xiàng)目名稱為FashFact.dpr。
    用TDBMemo部件顯示備注型字段