简单问题,送分了(100分)

  • 主题发起人 主题发起人 wlm_8888
  • 开始时间 开始时间
W

wlm_8888

Unregistered / Unconfirmed
GUEST, unregistred user!
steam_temp:=TMemoryStream.Create;
steam_sum:=TMemoryStream.Create;


RxRichEdit1.Lines.SaveToStream(steam_temp);

steam_sum.Position:=0;
steam_temp.Position:=0;

steam_sum.CopyFrom(steam_temp,steam_temp.Size);


steam_temp.Clear;

RxRichEdit2.Lines.SaveToStream(steam_temp);

steam_temp.Position:=0;

steam_sum.Seek(0,soFromEnd);
steam_sum.CopyFrom(steam_temp,steam_temp.Size);

RxRichEdit2.Clear;

steam_sum.Position:=0;

RxRichEdit1.Lines.LoadFromStream(steam_sum);


我的两个内存流怎么合不到一块,我弄了两天了,弄不出来,谁给看看
 
steam_sum这里面只是第一个流的内容
 
可能的原因:
RichEdit流由{}嵌套包裹着。不能由多个分立的{}来标识。
就是说:可以是{a{b}}, 但不能是{a}{b}.
两个流合到一起就成了后者,所以只认为第一段有效。
 
那怎么才能使他变成你说的前者
 
.......搜索以前的帖子你能找到答案的

richedit的内容是RTF格式,不过也是纯文本,由于RTF格式必须以{开头以}结尾,所以你合并流以后会是2个{}{}字符串,而RTF解释器只认第一个{}所以你看不到合并后的结果
下面的代码可以合并2个RTF文档,不过个人认为这样应该会留下很多重复的东西,比如第2个或者第N个RTF文件的文件头(包含颜色表、文件表、字体表之类的东西..)

function link2(s1,s2:string):string;
var
p:integer;
begin

p:=LastDelimiter('}',s1);
if p>0 then

s1:=copy(s1,1,p-1)
else

s1:='{'+s1;
p:=Pos('{',s2);
if p>0 then

Delete(s2,1,p)
else

s2:=s2+'}';
result:=s1+s2;
end;



还有个方法,是用剪切版的复制粘贴....不过如果是多个RTF文本合并的话速度太快似乎会有问题.....-_-


RichEdit3.Clear;


RichEdit1.SelectAll;

RichEdit1.CopyToClipboard;

RichEdit3.PasteFromClipboard;

RichEdit2.SelectAll;

RichEdit2.CopyToClipboard;

RichEdit3.PasteFromClipboard;
 
我用的是rxrichedit,那里面放的有图片,用流合并总是不成功,如果用memo标准控件(纯文本),合并就没有问题
 
memo当然没问题,富文本中有隐含的控制字符,直接合并不行的
你试我上面的方法了没?
 
我现在还没试,我已经换成别的方法了,谢谢你的回答
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
785
DelphiTeacher的专栏
D
后退
顶部