在memo中输入任何字符,需要显示字符数,输入任何一个字符都加1,例如:我输入“abc”显示为3,输入“ab你好”显示为4,这个怎么能实现呢?
   

解决方案 »

  1.   

    length(memo.lines.Text)
    实际的处理就是一个字符串而已。俄没测过回车符计未计到里面:)
      

  2.   

    length(memo.lines.Text)
    实际的处理就是一个字符串而已。俄没测过回车符计未计到里面:)
    这样如果输入“你好abc” 显示的就是6了,显示的不正确啊,我的意思是应该显示5的
      

  3.   


    procedure TForm1.btn1Click(Sender: TObject);
    var
      s: WideString;
    begin
      s := mmo1.Text;
      ShowMessage(IntToStr(Length(s)));
    end;
      

  4.   

    前面已经提到过,memo1回车换行时有回车符算一个。你把全部的字符删除的话,也能显示5,回车换一行的话,显示为7,想要等到实际的长度需要把字符串中不可视的回车符去掉。
    Uses StrUtils;//测试版本为XE
    var tmpStr:string;
    begin
      tmpStr:= memo1.Lines.Text;
      //ShowMessage(tmpStr);
      tmpStr:= AnsiReplaceStr(tmpStr,#13#10,'') ;
      //ShowMessage(tmpStr);
      ShowMessage(IntToStr(Length(tmpStr)));
    end;
      

  5.   

    uses StrUtils;procedure TForm1.Button1Click(Sender: TObject);
    var
      s: Ansistring;
      ws: WideString;
    begin
      s := Memo1.Text;
      s :=  AnsiReplaceStr(s,#13#10,'') ;
      ws := s; //必须用 widestring 转换,才能统计中文
      ShowMessage(IntToStr(Length(ws)));
    end;
      

  6.   

    将字符串中的每个字符,用下列函数检测一下,再统计:function IsMBCSChar(const ch: Char): Boolean; 
    begin 
      Result := (ByteType(ch, 1) <> mbSingleByte); 
    end;
      

  7.   

    汉字是占两个字符,它的首字符的ByteType属性是mbSingleByte值。通过它可以是否为汉字。这样不就可以计数了吗?