现在我要处理显示备注问题,因为备注有可能很多,要分行显示,但是在把备注截开的时候,就涉及到中文的字符的分开。
备注都是从sql数据库中取得,其中有中文标点符号,因此有可能在不适当的地方截开了,搞到在quickreport的tqrmemo控件里显示乱码,我如何解决,明天要交货了,55555

解决方案 »

  1.   

    部分代码
       cMemo.lines.clear;
        width:=iniFile.ReadInteger('Setting','cMemo_num',3);
        temp:= DataM.ADOQuery1.FieldByName('CMemo').asstring;
        len:=strlen(pChar(temp));
        i:=0;
        CMemo.Lines.text:='';
        while i<len-1 do
        begin
          temp1:='';
          for j:=1 to width do
          begin
            temp1:=copy(temp,i,1);
            i:=i+1;
          end;
          CMemo.lines.Add(temp1);
        end;
      

  2.   

    好象先转换为WIDESTRING,这样每个字都占2个字节,分割后再转换回来。不好意思,我去年在VB中遇到过这个问题,现在却想不起来了,那个帖子也找不到了。不过我的思路应该是可行的。
      

  3.   

    procedure TfrmOAFWSongShenrpt.QRDBText1Print(sender: TObject;
      var Value: String);
    var
      str,str1 : string;
      strA: PChar;
      charA: char;
      Num: Integer;
      num1:Integer;
    begin
      Num := 0;
      Num1 := 0;
      str1 := '';
      str := Value;
      strA := PChar(str);
      while (Num<Length(Str)) do
      begin
        charA:=StrA[Num];
        if ((CharA=#13) or (CharA=#10)) then
        begin
          inc(Num);
          Num1 := 0;
          str1 := str1+CharA;
        end
        else if CharA>Chr(128) then
        begin
          str1 := str1+CharA;
          str1 := str1+StrA[Num+1];
          Num := Num+2;
          Num1 := Num1+2;
        end
        else
        begin
          Num := Num+1;
          Num1 := Num1+1;
          str1 := str1+CharA;
        end;
        if Num1>=62 then
        begin
          str1 := str1+#13+#10;
          Num1 := 0;
        end;
      end;
      Value := str1;
    end;
    主要就是根据中文的ord后是大于128的,而英文是小于128的
      

  4.   

    用WIDESTRING,每个汉字和英文字母的长度一样也是1(操作时一样),这样就好处理了