1、如何判断TMEMO中的行是用户通过回车换行而不是TMEMO自己换的行?
2、假如一个字符串中既有汉字又有数字或字母,如何多次提取其中的子字符串,而不产成乱码?我比较通过
IF (LENGTH(STRING)-length(widestring(string)) div 2)<>0 THEN
  copy(string,0,50)
else
  copy(string,0,49);
但也不行,依然会出现乱码!

解决方案 »

  1.   

    1:用keypress事件判断key是否等于#13,如果是是的话,说明是用户按回车
    2:那你就一个一个的取,如果在A-Z或者a-z之间就是字符,否则是汉字!
      

  2.   

    MEMO中的文本不是用户输入的,无法判断#13
      

  3.   

    以下代码不能用啊
    if Pos(memo.lines[0],"\n")<>0 then 
    beign
     showmessage('是换行');end;
      

  4.   

    楼上的办法可以,或者你用一个很苯的方法,就是检查memo里面的字符如果发现有换行回车字符,说明是用户输入的,否则是自动的!
      

  5.   

    2.string类型中,汉字占两位,而且每一位的编码都大于127($7F),即二进制最高位为1,防止出现乱码的方法是判断截取的字符串中字节最高位为1的数量是否为偶数,例如:var
      s, subs: string;
      b: boolean;
      i: integer;
    begin
      s := ...;
      if Length(s) > 50 then
      begin
        b := false;
        for i := 1 to 50 do
          if (Ord(s[i]) and $80) <> 0 then 
            b := not b;
        if b then
          subs := Copy(s, 1, 49)
        else
          subs := Copy(s, 1, 50);
      end;
      //use subs
    end;