使用只允许用户输入字母字符和退格键的代码来解决几个问题。
当我使用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;
很抱歉,如果程序必须来自干净的项目(即未命名/不具描述性)
答案 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
按钮可以访问它。)