表15.6中的屬性並不是所有類型的字段部件都擁有的,如一個TStringField類型的字段部件是沒有Currency、MaxValue、MinValue和DisplayFormat屬性的,一個TFloatField類型的字段部件是沒有Size屬性的。
對於布爾型屬性,在設計過程中的Object Inspector中雙擊該屬性,該屬性的值將會在True和False之間來回切換,其他屬性需要用戶輸入屬性值或從下拉式列表框中選取屬性值。所有的屬性都可以通過程序代碼進行設置。大多數屬性可以獨立地設置,只有DisplayFormat,EditFormat和EditMask是相互聯系的。在設置它們的屬性值時一定要確保相互協調。
利用EditMask屬性為字段設定編輯模式:
為字段部件設置一定的EditMask屬性值,當編輯輸入該字段的字段值時,用戶只能根據EditMask設定的編輯模式進行編輯或輸入字段值。在為EditMask屬性設置屬性值時可以用手動方式也可以用輸入模式編輯器來完成,當為某字段部件設置EditMask屬性時,雙鼠標雙擊EditMask屬性便可以打開輸入模式編輯器(Input Mask Editor) 。例如在為Customer.DB表的Phone字段設定編輯模式時,首先在Object Inspector中選取與Phone字段對應的Table1Phone字段對象,然後雙擊EditMask屬性,打開輸入模式編輯器。
字段輸入模式編輯器
在字段輸入模式編輯中可以選擇一種輸入模式,而且在TestInput編輯框中輸入字段值進行檢驗。
因為TStringField類型的字段部件沒有DisplayFormat屬性,但是可以把EditMask屬性當DisplayFormat屬性使用。
設定字段的顯示和編輯格式:
Delphi本身為某些類型的字段對象提供了設定其顯示和編輯格式的例程,並且為字段部件的DisplayFormat和EditFormat屬性指定了缺省值,例如對於與浮點型數值字段對應的TFloatField類型的字段部件,而且該字段部件的Currency屬性設置為True 時,字段值1234.56的顯示格式為$1234.56,編輯格式是1234.56。表15.7是Delphi提供了設置字段顯示和編輯格式的例程。
表15.7 字段格式例程
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
例 程 名 運用的字段對象
─────────────────────────────
FormatFloat TFloatField,TCurrencyField
FormatDateTime TDateField,TTimeField,TDateTimeField
FormatInteger TIntegerField,TSmallIntField,TWordField
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
上述這些用於設定日期時間類型、數值型以及貨幣型字段的顯示和編輯格式的例程,都是按國際上通行格式來設定相應類型字段的格式的,用戶可以自己設置字段部件的DisplayFormat和EditFormat屬性,來設定適合自己使用的格式,還可以為有關字段對象的OnGetText和OnSetText事件編寫代碼來設定字段的顯示和編輯格式。
15.6.1.2 字段部件的事件及應用
字段部件常需處理的事件如表15.8所示
表15.8 字段部件的事件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
事件名 用 途
────────────────────────────
OnChange 當字段部件的字段值發生改變時,觸發該事件
OnGetText 當字段部件獲得字段值時,觸發該事件
OnSetText 當字段部件被設置字段值時,觸發該事件
OnValidata 當字值被修改或插入新的字段值時,對字段值
進行有效性檢驗時,觸發該事件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
用戶想自己設定字段的顯示和編輯格式時,可以編寫OnGetText事件和OnSetText事件的處理過程,以達到設定字段的顯示和編輯格式。
15.6.1.3 字段部件的類型轉換函數及使用
字段部件具有一些內部函數用於轉換字段值的類型,對於不同的字段類型,這些轉換函數的作用是不一樣的,表15.9概括了不同類型的字段及轉換函數的作用。
表15.9 字段部件的轉換函數
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字段類型 AsString AsInteger AsFloat AsDatetime AsBoolean
────────────────────────────────────
TStringField 轉換成 轉換成整數 若能轉換 日期 轉換成布型
Stringg型 (若能轉換) 則轉換成 (若能轉換)
────────────────────────────────────
TIntegerField
TSmallField 字符型 整數型 浮點型 不允許 不允許轉換
TWordField
────────────────────────────────────
TFloatField
TCurrencyField 字符串型 捨入成整數 浮點型 不允許 不允許
TBCDField
────────────────────────────────────
TDateField
TDateTimeField 字符串 不允許 浮點數 日期型 不允許
TTimeField
────────────────────────────────────
TBooleanField 轉換成Time 不允許 不允許 不允許 布爾型
或False
────────────────────────────────────
TBytesField
TVarBytesField 字符串 不允許 不允許 不允許 不允許
TBlobField
────────────────────────────────────
TMemoField 二進制 不允許 不允許 不允許 不允許
TGraphilField 字段
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
上述這些轉換函數可以在任何與字段部件有關的表達式中使用,只要是表15.9中允許進行轉換的數據類型,這些轉換函數其實是當做字段部件的屬性來使用的,它們可以出現在賦值語句的兩邊。例如下面的程序代碼是將字段部件TableMyField的字段值轉變成字符串類型的數據,並將它賦給編輯框Edit1的Text屬性:
Edit1.Text := TableMyField.AsString;
而下面的代碼是進行相反的操作,它將編輯框部件Edit1的Text屬性值以字符串的形式賦給字段TableMyField,TableMyField通過AsString接受字符串並將其轉變成自身的數據類型。
TableMyField.AsString :=Edit1.Text;