Windows.IsDBCSLeadByte 可以判断一个字节是否落在汉字区内.

解决方案 »

  1.   

    var
      wstr:widestring;
      i,j:integer;
    begin
      wstr:=edit1.text;
      i:=length(wstr);
      j:=length(edit1.text)*2;
      if i<>j then showmessage('请输入汉字');
    end;
      

  2.   

    launch的方法实现不了,i与j明显不相等,就像美国到处轰炸头上写的是正义,而今天的劫持者头上写的明显是恐怖分子!
      

  3.   

    通过Ascii码判断,如果ascii码小于128的就不是汉字
      

  4.   

    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是用单字节计算,汉字占两个字节,字母数字占一个字节。
      

  5.   

    launch(飞星子) 的方法好象不行
      

  6.   

    launch的方法的确实现不了.
    有别的方法吗?
      

  7.   

    是错了一点;
    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;
      

  8.   

    纯粹是误炸..我对此表示遗憾,不是道歉;
    因为我是根据9x 年Delphi提供的资料的.NI
      

  9.   

    to lwk_hlj
    怎么判断是不是英文字符?
      

  10.   

    var i:integer;
    begin
    for i:=1 to length(edit1.text)-1 do
    if (edit1.text[i] in [#$A1..#$FE]) then
    Result:=True; //是汉字
      

  11.   

    判断第一个字符的ASC码〉128就好了。
      

  12.   

    分数这么少,答的这么多,可见是菜问题
    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;
      

  13.   

    第一个字节的ASC码小于128的,也有汉字!大家说的判断方法只适合于GB2312,对GBK就不能适用了!真得要判断准确,很难,关键没有GBK的资料!
      

  14.   

    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;