我正在在做一个录入姓名的功能,我在数据表里把姓名弄成是char的数据类型,所以在输入的时候把数字也会录入进去,但是没人会用数字当作自己的名字的,所以我想让他在输入的时候只能输入中文或者英文,其他就报出错,不知道这个代码怎么写,望高手有以教我,谢谢

解决方案 »

  1.   

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
         if key in ['0'..'9'] then
         begin
              key := #0;
              showmessag('不能为数字');
         end;
    end;
      

  2.   

    procedure TForm3.Edit3KeyPress(Sender: TObject; var Key: Char);
    begin
      if key in ['0'..'9'] then
      begin
         key:=#0;
         messageDlg('输入不能为数字',mtError,[mbok],0);
      end;
    end;我也是这样写的,但是程序对这些无动于衷啊
      

  3.   

    哦,我知道问题了,老问题已经解决了,但是新问题又出来了,就是在edit这个组件里我把他原先自己带的"edit3 "  这些字我没删除,所以他就没提示出错,如果是自己按键盘进去的话就会提示出错,这就说明如果用复制的话还是能写进去的,能不能解决这个问题?还有就是除了数字,那些符号如"^&*(" 等等也不能用来当名字的啊,如果象上面的写法不是要写很多进去?
      

  4.   

    procedure TForm3.Edit3KeyPress(Sender: TObject; var Key: Char);
    begin   //限制输入数字
        {if (key in ['0'..'9']) then
         begin
             key:=#0;      end;
        //方法2  限制输入数字
         SetWindowLong(Edit1.Handle, GWL_STYLE,
                     GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);
    }   //限制输入中文或英文
        if  not( key in ['A'..'Z','a'..'z']) then  //
        begin
             if (Ord(key)<=160)  then
               key:=#0;
         end;
    end;
      

  5.   

    //修改了一下
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
        procedure Edit1Enter(Sender: TObject);
      private
        { Private declarations }
        procedure WMContextMenu(var msg: TWMContextMenu);message wm_contextmenu;  public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin     if  not( key in ['A'..'Z','a'..'z',#13,#8]) then  // 加个后退回车键
         begin
             if (Ord(key)<=160)  then
               key:=#0;
         end;
          //SendMessage(Edit1.Handle,wm_paste,0,0);end;
    procedure TForm1.WMContextMenu(var msg: TWMContextMenu);
    begin      msg.Result := -1; //屏蔽系统菜单,实现禁用Copy,paste
    end;procedure TForm1.Edit1Enter(Sender: TObject);
    beginend;end.
      

  6.   

    大哥,我试了下你用的方法,但是他只让我输入英文了,不能输入中文了,我的意思是要输入中文和英文两种,能不能再教教我,这么麻烦你是在不好意思还有(Ord(key)<=160)  这句是什么意思?
      

  7.   

    我用的是清华紫光输入法作测试
    我得思路是
    if  not( key in ['A'..'Z','a'..'z',#13,#8]) 
    先允许输入英文(大小写)和回车及后退键
    然后再判断输入是否中文
    (中文是由英文键组成)
      

  8.   

    后退?怎么后退?我能不能加你QQ?我们这样聊太麻烦了,我的QQ是28232546