如何传送富文本格式的文字?(200分)

  • 主题发起人 主题发起人 Dorice
  • 开始时间 开始时间
D

Dorice

Unregistered / Unconfirmed
GUEST, unregistred user!
正在做聊天的软件,不知如何实现像qq群聊天那样,不同的人发过来的信息在同一个地方
(RichEdit控件?)显示时可以按不同的格式显示。顺便问一下,在同一个程序中使用了
IdUDPClient和IdUDPServer时,调用IdUDPClient的ReceiveString为什么会出错?
 
没有人会吗?有什么方便的控件也好啊
 
delphi安装目录下demos/internet/chart看看
 
没有找到chart,只有netchat,但它只是传文字,不能传文字的格式,我需要传RichEdit
里的文字和他的格式,像字体,颜色,字号等
 
算了,我自己有解决的方法了
 
rich数据也是二进制数据啊,用clientsocket/serversocket传,再用richedit显示
 
我在我的[网聊 - NetChat]( http://ph11.126.com )中的做法是当做文件(.rtf格式)来传,在局域网内如果文件不是很大的话基本上感觉不出来,很快的!
 
to fristrose
怎样读取richedit的二进制数据?他的lines不是字符串来的吗?又怎样显示二进制?
to wind2000
我也想过这种做法[:D]

现在我的做法是,传送文字时,自己加一些附加信息,接收时分开,用SelAttributes
设置
 
我的意思是说,在传输时,不要考虑rtf文本的格式,而要把它当作没有任何格式的二进制数据传输。在显示时才把它当成rtf!

procedure TForm1.Button1Click(Sender: TObject);
Var
buf:TStringStream;
len:integer;
Str:string;
begin
Buf:=TStringStream.Create('');
try
RichEdit1.PlainText:=False;
RichEdit1.Lines.SaveToStream(Buf);
Str:=Buf.DataString;
Memo1.Text:=Str;
finally
Buf.Free;
end;
end;
上面的是提取rtf string的代码。
至于传输,可以用indy,也可以直接用clientsocket/serversocket
 
怎么在Richedit中显示?
procedure TForm1.Button1Click(Sender: TObject);
Var
buf:TStringStream;
len:integer;
Str:string;
begin
Buf:=TStringStream.Create('');
try
RichEdit1.PlainText:=False;
RichEdit1.Lines.SaveToStream(Buf);
Str:=Buf.DataString;
Memo1.Text:=Str;
RichEdit2.Lines.LoadFromStream(Buf);
finally
Buf.Free;
end;
end;
为什么RichEdit2什么也不显示?Memo1倒是有显示。
还有怎么传送?我用IdUDPClient和IdUDPServer传送时,显示都是乱码。
 
这个,请注意TStringStream,问题在它上面。
用seek方法调整偏移就可以了。
 
能不能说清楚点?怎么偏移?我对TStringStream不了解
 
因为offset是会随read/write而变化的,所以要用seek把当前offset调整到stream的开头。
这个,你可以参考tstringstream的帮助。如果什么都要问,就无法学会自己解决问题。
 
procedure TForm1.Button1Click(Sender: TObject);
Var
buf:TStringStream;
len:integer;
Str:string;
begin
Buf:=TStringStream.Create('');
try
RichEdit1.PlainText:=False;
RichEdit1.Lines.SaveToStream(Buf);
Str:=Buf.DataString;
Memo1.Text:=Str;
buf.Position:=0;//加上这句;
RichEdit2.Lines.LoadFromStream(Buf);
finally
Buf.Free;
end;
end;
 
谢谢各位,现在已经成功通过IndyUDP发送了。
 
后退
顶部