Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)
最近在開發中使用到了UpDown這個控件,但是因為之前沒有使用過,所以很不熟悉,于是就編寫了一個簡單的demo來學習UpDown以及其結合TEdit的用法。
初步的常用功能的簡介
目前(2015.08.07)只是涉及到其簡單的用法,因為目前我所需要使用的就只有這些內容,系統化的使用和知識將會在以后需要的時候再補充。
目前涉及到的內容有UpDown組件與TEdit組件的配合使用、UpDown的Position屬性。
尋找UpDown:
如下圖,Win32下,用紅色框框出來的
先看一下這個程序的運行效果圖:
圖1 程序啟動時候的界面
圖2 程序運行的效果
簡單地對程序做一下說明:實現兩個加數的相加操作,既可以在兩個編輯框中直接輸入數字,也可以通過UpDown組件來步進(步進數是1)對編輯框中的數字進行增減,然后點擊按鈕就會在下面顯示相加的信息。
程序分析:
本例涉及到的程序使極其簡單的,但是需要說明一下,因為這是一個小demo,所以我可能沒注意其中組件、變量的命名規范,這是很不好的習慣,在真正的項目中是絕對禁止的,其實也應該從平時小demo的編寫時候就要注意,所以再次以我的本段代碼為一個反面教材!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
ud1: TUpDown;
edt1: TEdit;
lbl1: TLabel;
lbl2: TLabel;
lbl3: TLabel;
edt2: TEdit;
ud2: TUpDown;
lbl4: TLabel;
lbl5: TLabel;
lbl6: TLabel;
lbl7: TLabel;
btn1: TButton;
lbl8: TLabel;
procedure btn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ud1.Associate:= edt1; //在窗體創建的時候,通過將ud1的Associate屬性設置為edt1,將兩個組件聯系在一起,就可以通過ud1對edt1中的數字進行增減了
ud2.Associate:= edt2; //作用同上
end;
procedure TForm1.btn1Click(Sender: TObject);
var
res: Integer;
plus1: Integer;
plus2: Integer;
begin
plus1:= StrToInt(edt1.Text); //可以使用該方式獲取編輯框中的值 //TEdit的Text屬性是string類型
plus2:= ud2.Position; //因為ud2.Associate:= edt2; 所以ud2與edt2聯系在一起,所以也可以使用這樣的方式獲取編輯框中的值 // UpDown的Position屬性是SmallInt類型
res:= plus1 + plus2;
lbl4.Caption:= IntToStr(plus1);
lbl6.Caption:= IntToStr(plus2);
lbl8.Caption:= IntToStr(res);
end;
end.
代碼很簡單,需要說明的知識點也都在代碼中通過注釋說明了。
關于組件的Object Inspector的思考
多說一句,我是通過在窗體創建的方法中顯式聲明了ud1.Associate:= edt1; 以及ud2與edt2的結合的,還有一種方式,以ud1和edt1為例,就是在圖形界面的設計界面上選中ud1,然后去到Object Inspector這個配置界面來配置ud1 的相關屬性,當然就可以配置ud1 的Associate 屬性,將其設置為edt1,這樣就不需要再在窗體的創建方法中通過代碼來聲明了。(此時既可以通過edt1的Text屬性獲取編輯框中的值,不過注意是string類型,也可以通過ud1的Position方法獲取編輯框中的值,Position是SmallInt類型
這里介紹了Object Inspector是為了說明,可能有時候你在看一些代碼的時候,發現很多東西沒有在代碼中,但是運行時候好像又有效果,可能是因為其是在Object Inspector里面進行的配置,而不是在代碼中進行顯式的說明。
關于Object Inspector還有另外一個例子,請參見《解決Delphi圖形化界面的TEdit、TLable等組件手動拖拽固定大小,但是編譯之后顯示有差別的情況》
限制TEdit中只能輸入數字
在TEdit和UpDown的配合使用中,往往需要限制只能在TEdit中輸入整數,為了防止用戶誤操作而輸入漢字或者字母,需要在代碼中實現這個限制。
這里給出限制只能在編輯框中輸入數字(小數點、'-'號、數字)的方法,具體的比如限制只能輸入正整數、限制只能輸入整數……方法可以參考實現。
procedure Tform1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
edt: TEdit;
str, strL, strR: string;
p: integer;
begin
// 獲取當前文本內容, 注意要去掉選中部分(因為會被改寫).
edt := TEdit(Sender);
str := edt.text;
if Length(edt.SelText) <> 0 then
begin
strL := LeftStr(edt.text, edt.SelStart);
strR := RightStr(edt.text, Length(edt.text) - edt.SelStart - edt.SelLength);
str := strL + strR;
end;
// 限制輸入數字/小數點/退格鍵
if not (Key in [#8, #13, #127, '.', '-', '0'..'9']) then Key := #0;
//限制只能輸入一個小數點
if Key = '.' then
begin
p := Pos('.', edt.Text);
if p > 0 then Key := #0;
end;
//限制只能在第一位輸入且只能輸入一個'-'號
if Key = '-' then
begin
if edt.SelStart > 0 then Key := #0;
p := Pos('-', edt.Text);
if p > 0 then Key := #0;
end;
end;
//要uses StrUtils單元
如果程序里有很多的TEdit要做此限制,當然不必給每個控件寫代碼,把事件指定到同一個過程就行了。
注意其中的Tform1.Edit1KeyPress方法不是直接你在代碼編輯器中聲明就可以的,需要通過該編輯框組件的Object Inspector里面,找到Events->OnKeyPress這個事件,如下圖
然后雙擊這個事件,就會在代碼編輯器中出現該方法的聲明,然后就可以進行編輯了,然后再看編輯框組件的Object Inspector里面的OnKeyPress事件,已經有方法了,如下圖:
這也是很多其他組件在編寫組件的事件時使用的方法。
介紹UpDown的更多常用的屬性和方法
總結
以上是生活随笔為你收集整理的Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Office365激活方法(无需密钥)
- 下一篇: canvas学习总结四:绘制虚线