使用仅允许用户输入字母字符和退格键的代码遇到了两个问题。
当我使用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;
抱歉,如果程序必须来自干净项目(即未命名/未描述)
最佳答案
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;_'
之类的字符设置有效的掩码,这需要在[['A'..'Z','a' ..'z']',并将处理所有验证,编辑击键等。YourTable.FieldByName('Word1').EditMask := 'LLLLL;0;_';
有关更多信息,请参见TField.EditMask的文档,并单击底部到TEditMask的链接以获取有关掩码字符的详细信息。 (在对象检查器中有一个
EditMask
属性的编辑器;它们与TMaskEdit
所使用的编辑器相同,因此您可以将其中之一放在窗体上,然后单击右侧的...
按钮。 EditMask
属性进行访问。)