Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字)

  最近在开发中使用到了UpDown这个控件,但是因为之前没有使用过,所以很不熟悉,于是就编写了一个简单的demo来学习UpDown以及其结合TEdit的用法。

初步的常用功能的简介                

  目前(2015.08.07)只是涉及到其简单的用法,因为目前我所需要使用的就只有这些内容,系统化的使用和知识将会在以后需要的时候再补充。

  目前涉及到的内容有UpDown组件与TEdit组件的配合使用UpDown的Position属性

先看一下这个程序的运行效果图:

图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的更多常用的属性和方法        

时间: 2024-12-08 12:45:16

Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字)的相关文章

Delphi控件-复合控件

http://blog.csdn.net/cml2030/article/details/3166634 Delphi控件-复合控件 标签: delphidestructorbuttonstringdivconstructor 2008-10-28 13:48 1835人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 复合控件复合控件是Delphi控件中非常重要的一种控件,复合控件就是将两个或两个以上的控件重新组合成一个新的控件.例如TspinEdit.Tla

DELPHI控件:DBLookupComboBOX组件的使用方法

在许多数据表中,数据是以代码方式存放的,如在班级编码数据表tB03(表5.5)中,系部字段TB0309采用编码方式存放,系部真实名称则存放在系部编码表TB06.使用代码的好处是,用户可在编码表TB06中改变TB0602字段的系部名称,而不会影响使用该编码的其他数据表(如TB03)的运行6其缺点是当用户输人数据编码时,必须查询编码所表示的含义,如"OO"代表"基础部"."1 O"表示"机械系"等,这给数据录入带来很大的麻烦.最好

delphi控件属性大全-详解-简介

button 组件: CAPTION 属性 :用于在按钮上显示文本内容Cancel     属性:是否设置成默认的取消按钮,当设置为真的时候(true) 按ESC触发改按钮的事件!Default 属性:是否设置成默认的确认按钮,当设置为真的时候 按ENTER键的时候触发事件Hint 属性:设置当鼠标在按钮上短暂停留是显示的提示内容.Showhint 属性: 是否显示提示内容默认为假! Bitbtn 组件Kind 属性: 他的值就是位图按钮组件上所显示的图标!GLYPH 属性: 用于在位图按钮上显

对Delphi控件作用的新理解

最近几天,对Delphi控件的含义有了一个新的理解.其实它不仅仅是给程序员提供功能的一个表层调用,控件本身的源代码就是一个很强的工业级源码.而且它的Main例子,往往就已经是半成品.而别的语言里没有那么多控件——换句话说,就是没有那么多工业级项目的源代码(往往都是通用工具类型)供你使用和学习(两层意思).这是我们Delphier独一无二的优势.不得不说,当年设计Delphi的两位老兄Anders Hejlsberg和Chuck Jazdzewski真是双剑合璧,无敌于天下——当然,只是产品无敌于

Delphi控件大全

首先来大体上为控件分一下类,以方便我们后面的讨论.   但因为控件的种类太多,所以就粗略的分为如下几个类别∶   ---界面风格类   ---Shell外观类   ---Editor类   ---Grid类   ---DB类   ---Report类   ---图形类   ---综合类   约定的前提是∶All FreeWare,All source.至于那些要花钱购买的商业控件,我将在后面另外进行讨论.对于文中我们所讨论的每一个控件,都会给出一个品质得分,商业控件和免费控件一视同仁,不以价格论

Delphi控件-复合控件【转】

复合控件复合控件是Delphi控件中非常重要的一种控件,复合控件就是将两个或两个以上的控件重新组合成一个新的控件.例如TspinEdit.TlabeledEdit.TDBNavigator等就是复合控件,TDBNavigator其实就是在一个Panel放上若干个Button而已.制作一个复合控件时,我们一般从TwinControl派生控件.我们这次做的控件是拥有一个Edit编辑框和一个Button按钮的复合控件,在用户在编辑框中输入文字的过程中,Button将随时显示编辑框中文字的长度.我们把控

QLineEdit控件只能输入数字--QValidator结合正则

//QValidator + 正则实现限制LineEdit控件只能输入数字 void ModelManagerDlg::LimitLineEditInputJustInt(QLineEdit* widget) { QRegExp regx("[0-9]+$"); QValidator* validator = new QRegExpValidator(regx, widget); widget->setValidator(validator); } 如上述代码所示,只能输入数字,

delphi控件安装与删除

附带通用控件安装方法:----------基本安装1.对于单个控件,Componet-->install component..-->PAS或DCU文件-->install;2.对于带*.dpk文件的控件包,File-->Open(下拉列表框中选*.dpk)-->install即可:3.对于带*.bpl文件的控件包,Install Packages-->Add-->bpl文件名即可:4.如果以上Install按钮为失效的话,试试Compile按钮:5.是run t

delphi控件属性和事件

常用[属性] Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令 Anchors:与组件连接的窗体的位置点 Align:确定组件的对齐方式 AutoSize:确定组件是否自动调整其大小 BiDiMode:(所有组件) 为从右向左写的语言提供支持 BoundsRect:定义组件边框矩形(只适用于运行时) Borderwidth:(窗口化组件)边框的宽度 BorberStyle:设置组件边框形状(样式) Brush:可确定组件的风格和颜色 Caption:使用该属性可指定标注组件的