使用仅允许用户输入字母字符和退格键的代码遇到了两个问题。

当我使用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属性进行访问。)

10-05 22:26