一个局域网上发送字体的问题?(39分)

  • 主题发起人 主题发起人 yuzhizhi
  • 开始时间 开始时间
Y

yuzhizhi

Unregistered / Unconfirmed
GUEST, unregistred user!
我编写了一个局域网上发送字的程序!(用SeverSocket,ClientSocket两个控件!是无
阻塞方式!)
我在RichEdit中打入文字(文字中包括字体大小,颜色等)后用ClientSocket发送到!
但接收时为什么不是发送时文字样式了?
(这个问题怎么解决?)
 
先要把它保存到文件或“流”中然后再发送,否则你发送过去的只是文本。
 
用文件流吧--> TFileStream
小人物是个大好人
 
我怕这样子的话!速度会变慢得!因为很多人聊起来时!
 
用内存流应该不慢吧,
 
你可以把FONT.STYLE也发过去呀..
 
<<小人物>> 你能介绍一个联系方式好吗?如:OICQ!
 
解决方法: 用 MemoryStream
先把字体的颜色大小等资料保存到 内存流中,,然后再把文字保存到内存流中;最后发送出去

发送端
var
Ms :MemoryStream;
textbuff :pchar;
begin
Ms :=MemoryStream.create;
Ms.write(Richedit1.font,sizeof(Tfont)); //写入字体资料
textbuff:=pchar(Richedit1.text);
ms.write(texbuff,length(Richedit1.text));//写如文字
ms.position:=0;
servercoket1.socket.sendstream(ms);//发送流
ms.free;
end;

接收端先把字体内容度出来; 我这里为了简单直接一点,也用了内存流,不知道会不会影响速度
procedure CLIENTSOCKET1.READ(。。。。);
var
buf :pchar;
recms :TmemoryStream;
RECfont:Tfont; //接收到的字体变量
BEGIN
getmem(buf,soket.recievLength);
recms :=TmemoryStream.create;
socket.recievebuffer(buf^,socket.recievLength);
recms.write(buf^,soket.recievLength);//把BUF转换成流方式 ,可能笨了点,但很方便,呵呵
recms.position:=0; //这句不能少
recms.read(RECfont,sizeof(Tfont)); //读出字体

然后再读出文字数据
recms.read(buf^,socket.recievLength-sizeof(Tfont));
 
:活着VIVA
你的方法不对!
不好意思我的机子上没有装网卡!所以每次做完程序后,把EXE文件COPY到磁盘上!
然后我到有网卡的机子上进行调试!
所以这个程序有一点问题!就是什么Write的时候错误!
这怎么办呢?
 
在数据里加入字体信息
 
怎么在数据里加入字体信息?
能详细点吗?
 
最好的方式还是用流啊。
把本机的RichEdit的内容savetostream,
然后,发,用那边的RichEdit做loadfromstream。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
926
DelphiTeacher的专栏
D
D
回复
0
查看
718
DelphiTeacher的专栏
D
D
回复
0
查看
679
DelphiTeacher的专栏
D
后退
顶部