在richedit中使用流好象会把中文的“转成英文的"
在一个richedit1中输入中文的“,然后使用留Richedit1.line.savetostream(st)中,同时加栽到另一个richedit2中,richedit2.line.loadfromstream(st),为什么内容会不一样呢,中文的“转成英文的",请问有什么方法避免么

解决方案 »

  1.   

    哈哈 我也遇到richedit 的乱码问题,你换成demo 看看 我也是新手 提不出什么建设性建议!
      

  2.   

    不会啊,
    1.RichEdit1.SaveToStream(st)
    2.St.Posistion := 0;
    3.RichEdit1.LoadFromStream(St)
    文字内容不会改变的。这两个方法都是属于TStrings类的,所以RichEdit和Memo是一样的。楼主再检查一下!
      

  3.   

    就是这样的
        RichEdit1.Text := '“123”';
        try
            ms := TMemoryStream.Create;
            RichEdit1.Lines.SaveToStream(ms);
            ms.Position := 0;
            RichEdit2.Lines.LoadFromStream(ms);
        finally
            ms.Free;
        end; 
    结果却是richedit2.text='"123"';
    同时如果在richedit1中,Ctrl+C 标点“,再Ctrl+V时结果也是",
    请zhangcheng125(老狼) 可以测试一下
      

  4.   

    刚才没注意你说的是标点符号,
    呵呵,
    如果标点符号的话,那么请将RichEdit的plainText属性设为True.
      

  5.   

    呵呵,就是使用D6的,更改字体也没有用
    我就是需要使用流方式的,否则RichEdit2.Text := RichEdit1.Text就可以了
    有没有什么好的建议呢?用rxRichEdit是可以的,但程序里面就是只能使用RichEdit,
      

  6.   

    很有意思的问题,不是用到汉字“”还真不会去发现这个问题。花了我3支玉溪,搞定了。
    1、问题出在RichEd32.dll和RichEd20.dll身上.
    2、修改Comctrls.pas,重新编译,将生成的ComCtrls.dcu拷贝到...\Lib\和...\Lib\Debug下覆盖原来的。具体修改点如下:
    A、修改TCustomRichEdit.CreateParams过程
         将RichEditModuleName = 'RICHED32.DLL'改为RichEditModuleName = 'RICHED20.DLL'
         CreateSubClass(Params, 'RICHEDIT')改为CreateSubClass(Params, RICHEDIT_CLASSA)或
                                               CreateSubClass(Params, RICHEDIT_CLASSW)
         RICHEDIT_CLASSA: ANSI; 
         RICHEDIT_CLASSW: UniCode;
    B、修改TRichEditStrings.Insert过程
         将if RichEdit.SelStart <> (Selection.cpMax + Length(Str)) then
             raise EOutOfResources.Create(sRichEditInsertError); 屏蔽掉{}保存---》编译---》拷贝DCU---》收工
    这样修改完,你的问题是解决了,至于还有没有产生其它新的问题就没有工夫测试了.
      

  7.   

    先谢谢sanmaotuo(老冯) 了
    只有改源码么,有没有更好的方法呢
      

  8.   

    没有更好,只有最好! 哈哈哈哈哈哈。结帖。sanmaotuo(老冯)(100分)