procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if (ord(key)<128) and (key<>#8) then key:=#0; end; ------------ 但是仍然可以用鼠标的右键菜单粘贴非中文字符
不用判断ASCII码,这样就行了: 在确定的按钮click事件中写: var WS:WideString; begin WS:=Edit1.Text; if Odd(Length(Edit1.Text)) or (Length(WS)<>(Length(Edit1.Text) div 2) ) then showMessage('必须输入中文'); end;
这个我会!!! 碰巧我刚刚也遇到了类似的问题; var a:string;begin a:=edit1.text; for i:=1 to length(a) do begin if (i mod 2 <> 0) and (ord(a[i])>128) then continue; // 每个汉字占2字节,且汉字的第一个字节的ASCII码>128,而英文<128 if i mod 2=0 then continue; end; if i<>length(a) then ERROR;//如果不是正常结束循环则发出错误信息 end;
汉字是双字节码,OnKeyPress不能判断。 因为用户肯定是用输入法输入的,按的肯定是英文。
我怎么老觉得有人在 程序这个领域里歧视中文呢!!!!和英文有什么区别?Edit1KeyPress(Sender: TObject; var Key: Char); 不能防止PASTE。。放到 OnChange里去呢?
: cll007(gazo) : devil_li() 两人的合在一起
不用解释: var a:string;begin a:=edit1.text; for i:=1 to length(a) do begin if (i mod 2 <> 0) and (ord(a[i])>128) then continue; // 每个汉字占2字节,且汉字的第一个字节的ASCII码>128,而英文<128 if i mod 2=0 then continue; end; if i<>length(a) then ERROR;//如果不是正常结束循环则发出错误信息 end;就这样做 .
哈哈,我有办法了!看代码function HaveGB2312(const temp:string):boolean; var s:string; w:widestring; begin w:=temp; s:=temp; if length(w)=length(s) then //这样可以判断出该字符中是否包含双字节的字符 result:=false else result:=true; end;很简单的,不用楼上那样麻烦吧!
begin
if (ord(key)<128) and (key<>#8) then
key:=#0;
end;
------------
但是仍然可以用鼠标的右键菜单粘贴非中文字符
确定的时候再检查就解决问题了
在确定的按钮click事件中写:
var
WS:WideString;
begin
WS:=Edit1.Text;
if Odd(Length(Edit1.Text)) or (Length(WS)<>(Length(Edit1.Text) div 2) ) then
showMessage('必须输入中文');
end;
,在onchange事件中更黑
只有不是中文就Clear......似乎更黑
碰巧我刚刚也遇到了类似的问题;
var
a:string;begin
a:=edit1.text;
for i:=1 to length(a) do
begin
if (i mod 2 <> 0) and (ord(a[i])>128) then continue; // 每个汉字占2字节,且汉字的第一个字节的ASCII码>128,而英文<128
if i mod 2=0 then continue;
end;
if i<>length(a) then ERROR;//如果不是正常结束循环则发出错误信息
end;
因为用户肯定是用输入法输入的,按的肯定是英文。
不能防止PASTE。。放到 OnChange里去呢?
: devil_li()
两人的合在一起
var
a:string;begin
a:=edit1.text;
for i:=1 to length(a) do
begin
if (i mod 2 <> 0) and (ord(a[i])>128) then continue; // 每个汉字占2字节,且汉字的第一个字节的ASCII码>128,而英文<128
if i mod 2=0 then continue;
end;
if i<>length(a) then ERROR;//如果不是正常结束循环则发出错误信息
end;就这样做 .
var
s:string;
w:widestring;
begin
w:=temp;
s:=temp;
if length(w)=length(s) then //这样可以判断出该字符中是否包含双字节的字符
result:=false
else
result:=true;
end;很简单的,不用楼上那样麻烦吧!