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

时间:2014-03-20 16:10:21

标签: delphi delphi-xe5

使用只允许用户输入字母字符和退格键的代码来解决几个问题。

当我使用RAD studio 2010编译程序时,除了Uses子句中的Vcl问题外,它编译正确,一切正常。但是,当我尝试使用XE5进行编译时,出现错误:E2010 Incompatible types: 'Word' and '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;

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

1 个答案:

答案 0 :(得分:3)

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;

更好的是,使用基础EditMask上的TField,并使用类似'LLLLL;0;_'之类的内容为字母字符设置有效掩码,这需要5个字母之间的关联[ ' A' ..' Z'' a' ...'']',并将处理所有验证,编辑击键等。

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

有关详细信息,请参阅TField.EditMask的文档,有关掩码字符的详细信息,请参阅底部的链接TEditMask。 (对象检查器中有EditMask属性的编辑器;它们与TMaskEdit使用的属性相同,因此您可以删除表单上的其中一个并单击...属性右侧的EditMask按钮可以访问它。)