如何在Delphi XE5中将输入限制为仅字母?
使用只允许用户输入字母字符和退格的代码时遇到了几个问题 当我使用RAD studio 2010编译我的程序时,除了Uses子句中的Vcl问题外,它编译正确,一切正常。然而,当我尝试使用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
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。你的代码没有。支持非英语使用者很容易。你想知道怎么做吗?