如何在Delphi XE5中将输入限制为仅字母?

如何在Delphi XE5中将输入限制为仅字母?,delphi,delphi-xe5,Delphi,Delphi Xe5,使用只允许用户输入字母字符和退格的代码时遇到了几个问题 当我使用RAD studio 2010编译我的程序时,除了Uses子句中的Vcl问题外,它编译正确,一切正常。然而,当我尝试使用XE5编译时,我得到一个错误:E2010不兼容的类型:“Word”和“AnsiChar” 如果有人能给我指出正确的方向,那就太好了 代码如下: procedure TFRMStuTakeTest.DBEDTWord01KeyDown(Sender: TObject; var Key: Word; Shift: TS

使用只允许用户输入字母字符和退格的代码时遇到了几个问题

当我使用RAD studio 2010编译我的程序时,除了Uses子句中的Vcl问题外,它编译正确,一切正常。然而,当我尝试使用XE5编译时,我得到一个错误:
E2010不兼容的类型:“Word”和“AnsiChar”
如果有人能给我指出正确的方向,那就太好了

代码如下:

procedure TFRMStuTakeTest.DBEDTWord01KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
(*only return value if alphabetic *)
  if Key in ['A'..'Z', 'a'..'z', #8] then
  else
    Key := #0;
end;

抱歉,如果程序必须来自干净的项目(即未命名/非描述性)

OnKeyDown
旨在处理虚拟键代码(使用
VK
常量引用的代码),而不是单个字母和数字击键

使用
OnKeyPress
处理单个字符,而不是
OnKeyDown

procedure TFRMStuTakeTest.DBEDTWord01KeyPress(Sender: TObject; var Key: Char);
begin
  if not CharInSet(Key, ['A'..'Z','a'..'z', #8]) then
    Key := #0;
end;
更好的方法是,使用底层
t字段上的
EditMask
,并使用类似于
'lll的内容为字母字符设置有效掩码;0;_',需要在“['A'..'Z','A'..'Z']”之间包含5个字母,并将处理所有验证、编辑击键等

YourTable.FieldByName('Word1').EditMask := 'LLLLL;0;_';

有关更多信息,请参阅文档,并按照底部的链接获取有关掩码字符的详细信息。(对象检查器中有一个用于
EditMask
属性的编辑器;它们与
TMaskEdit
使用的编辑器相同,因此您可以将其中一个编辑器放到表单上,然后单击
EditMask
属性右侧的
按钮访问它。)

如果您的用户使用的语言不是英语,会发生什么情况?@David Delphi最初是一种供英语使用者/阅读者使用的语言,但Unicode允许使用外来字符,因此,如果我要将Unicode改编为其他语言,我想我可以使用Unicode?您使用的Delphi完全支持Unicode。你的代码没有。支持非英语使用者很容易。你想知道怎么做吗?