var
wstr:widestring;
i,j:integer;
begin
edit1.text:=trim(edit1.text);
wstr:=edit1.text;
i:=length(wstr)*2;
j:=length(edit1.text);
if i<>j then showmessage('请输入汉字');
end;
这个是绝对Work的;只要你的系统是双字节(unicode)系统<中文Win98,中文Win2k,中文WinNT>;
使用 widestring时,无论是一个汉字或一个英文字母,他计算的长度是1;
而使用string时,一个汉字长度是2,一个英文字母的长度是1;
分数这么少,答的这么多,可见是菜问题
var
i,english_count:integer;
str:string
begin
str:=edit1.text;
english_count:=0;
for i=1 to length(str) do
begin
if word(str[i])<127 then english_count:=english_count+1;
end;
showmessage(pchar('共有'+inttostr(english_count)+'个英文字母'))
end;
是错了一点;
var
wstr:widestring;
i,j:integer;
begin
edit1.text:=trim(edit1.text);
wstr:=edit1.text;
i:=length(wstr)*2;
j:=length(edit1.text);
if i<>j then showmessage('请输入汉字');
end;
launch的方法要改成这样:
var
wstr:widestring;
i,j:integer;
begin
wstr:=edit1.text;
i:=length(wstr);
j:=edit1.gettextlen*2;
if i<>j then showmessage('请输入汉字');
end;
edit1.gettextlen是用单字节计算,汉字占两个字节,字母数字占一个字节。