M
mill666
Unregistered / Unconfirmed
GUEST, unregistred user!
想让一个edit1控件只能输入实数,就是说只能输入数字和小数点,
程序如下:
uses
ClipBrd;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Mgs: TMsg;
procedure EatKey;
{ Clear Keyboardbuffer }
begin
PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
end;
begin
{ Check if control pressed }
if (ssCtrl in Shift) then
case key of
{ Ctrl + v }
86:
begin
{ determine if the Clipboard contains a string type }
if Clipboard.HasFormat(CF_TEXT) then
{ Check if text consists of numbers }
{ überprüfen, ob der Text aus Zahlen besteht }
try
StrToInt(Clipboard.AsText);
except
{ If no then don't insert text }
{ Wenn nein, dann ignoriere das Einfügen }
EatKey
end;
end;
{ Ctrl + c }
67: { do nothing / nichts machen }
else
EatKey;
end
{ else check for allowed characters such as BackSpace, RETURN...}
else if not (Char(Key) in [#8, #13, #46, #48..#57,#96..#105]) then EatKey;
end;
如果按照上面写,怎么也没办法输入小数点,可是看程序也都没错,难道是ascii的值不一样码?
可是查了ascii表,小数点的值就是#46,可为什么上面的程序就是不能输入小数点?
后来跟踪了一下,发现delphi把小数点的ascii值当成是#190,所以在最后的那个else if里面,把集合增加一个#190在里面,立马可以输入小数点了。
真的很奇怪,而且如果我用
showmessage(char(#190)),可竟然也不是输出小数点哟。这就更加奇怪了。
这是为什么?
程序如下:
uses
ClipBrd;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Mgs: TMsg;
procedure EatKey;
{ Clear Keyboardbuffer }
begin
PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
end;
begin
{ Check if control pressed }
if (ssCtrl in Shift) then
case key of
{ Ctrl + v }
86:
begin
{ determine if the Clipboard contains a string type }
if Clipboard.HasFormat(CF_TEXT) then
{ Check if text consists of numbers }
{ überprüfen, ob der Text aus Zahlen besteht }
try
StrToInt(Clipboard.AsText);
except
{ If no then don't insert text }
{ Wenn nein, dann ignoriere das Einfügen }
EatKey
end;
end;
{ Ctrl + c }
67: { do nothing / nichts machen }
else
EatKey;
end
{ else check for allowed characters such as BackSpace, RETURN...}
else if not (Char(Key) in [#8, #13, #46, #48..#57,#96..#105]) then EatKey;
end;
如果按照上面写,怎么也没办法输入小数点,可是看程序也都没错,难道是ascii的值不一样码?
可是查了ascii表,小数点的值就是#46,可为什么上面的程序就是不能输入小数点?
后来跟踪了一下,发现delphi把小数点的ascii值当成是#190,所以在最后的那个else if里面,把集合增加一个#190在里面,立马可以输入小数点了。
真的很奇怪,而且如果我用
showmessage(char(#190)),可竟然也不是输出小数点哟。这就更加奇怪了。
这是为什么?