NND没人会,高人请进来纠正错误啊!!300分跪求!!richedit1中的图片传到richedit2里为什么是二进制流啊咋不是图片呢?(300分)

  • 主题发起人 主题发起人 shm83
  • 开始时间 开始时间
S

shm83

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.BitBtn1Click(Sender: TObject);
var strm:TMemoryStream;
p:Array[0..254] of char;
Posi,Len:Integer;
begin
Posi:=0;
strm:=TMemoryStream.Create;
RichEdit1.Lines.SaveToStream(strm);
strm.Seek(0,0);
While Posi<strm.Size do
begin
Len:=255;
if strm.Size-Posi<255 then
Len:=strm.Size-Posi;
strm.ReadBuffer(p,Len);
IdUDPserver1.SendBuffer('127.0.0.1',8001,P,Len);
Inc(Posi,Len);
Application.ProcessMessages;
end;
end;

procedure TForm1.IdUDPServer2UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
strm2:TMemoryStream;
buf:array [0..254] of char;
Str:String;
begin
strm2:=TMemoryStream.Create;
strm2.Clear;
AData.Seek(0,0);
AData.ReadBuffer(buf[0],adata.size);
RichEdit2.Lines.Add(buf);
end;
end.
 
buf 是字符数组,图片当然是二进制形式的流字符了!
发送图片时应该标记标志信息,标明现在接受的是图片,然后接受方再按图片来处理。
 
[?]不是啊
这richedit1里既有图片也有文字,谁会啊??
帮我改一下代码???????
 
RichEdit1.Lines.SaveToStream(strm);
这句代码只是将文字存到流中。
 
能把代码改一下吗?
谁改对了我这300分就给它了!!
 
我觉得你这样使用可能不对。
你传输的是流,(RichEdit1.Lines.SaveToStream(strm);)但是到另外一段是使用这样的加入方式( RichEdit2.Lines.Add(buf);),这就是你得到二进制的原因。
 
zywcd:
你说的正确。就是读取这里有问题!你有正确的答案吗???
谁会啊
300分我不要了
 
TRichEdit的Lines是TStrings,也就是字符串列表而已,能不能存取二进制数据没试过,不过既然用Lines.SaveToStream,那相应地不能用RichEdit2.Lines.LoadFromStream(buf)吗?
 
哎!!有没有具体的改里啊!!!怎么改?????
 
你是怎么把图片放到 RichEdit 中的?
 
因为richedit可以放图片啊!!
谁会啊,就没人会吗??悲哀啊
 
普通 RichEdit 是不能放图片的,你用的是第三方的吧!
 
用 richviewedit 太容易解决超文本和图片混合流的传递了
www.richview.com 可以下该控件
 
我用的是第三方Rxrichedit
这个问提有人会啊?
悲哀!
 
建议采用“网中戏”的方法,用RxRichEdit估计要解决起来比较麻烦。
 
NND还是没人会!
高人啊指点一下啦
 
你测试这样代码试试,是在你的基础上修改的,可以传送image图像和richedit的流传送。
1、我使用记录是为了保证你的分块传输和传送结束标志。顺便传送长度。
2、使用了一个公共的内存量,等传输完成后再显示。


type tsend_record=record
p:array[0..254] of byte;
len:integer;
end;

var strm0:TMemoryStream;
send_record:tsend_record;

{$R *.dfm}

procedure TForm1.Button1Click(Sender:TObject);
var strm:TMemoryStream;
Posi,len:integer;
begin
Posi:=0;
strm:=TMemoryStream.Create;
strm0.Clear; //
// RichEdit2.Lines.Clear;
// RichEdit1.Lines.SaveToStream(strm);
Image1.Picture.Graphic.SaveToStream(strm);
strm.Seek(0,0);
while Posi<strm.Size do
begin
len:=255;
if strm.Size-Posi<255 then
len:=strm.Size-Posi;
strm.ReadBuffer(send_record.p,len);
send_record.len:=len;
IdUDPServer1.SendBuffer('127.0.0.1',8001,send_record,SizeOf(tsend_record));
Inc(Posi,len);
Application.ProcessMessages;
end;
Application.ProcessMessages;
send_record.len:=0;
IdUDPServer1.SendBuffer('127.0.0.1',8001,send_record,SizeOf(tsend_record)); //发送结束
Application.ProcessMessages;

end;

procedure TForm1.IdUDPServer2UDPRead(Sender:TObject; AData:TStream;
ABinding:TIdSocketHandle);
var
Rec_record:tsend_record;
begin
AData.ReadBuffer(Rec_record,SizeOf(tsend_record));
if Rec_record.len=0 then
begin//接收完成
Application.ProcessMessages;
strm0.Seek(0,0);
Image2.Picture.Graphic.loadfromStream(strm0);
// RichEdit2.Lines.LoadFromStream(strm0);
exit;
end;
strm0.Position:=strm0.Size;
strm0.WriteBuffer(Rec_record.p,Rec_record.len);
end;

procedure TForm1.FormCreate(Sender:TObject);
begin
strm0:=TMemoryStream.Create;

end;
 
zywcd
你的QQ多少啊
我的是:24169146加我啊zywcd
 
代码你测试了?是什么结果?
 
不行啊大哥

把richedit中的图片和文字用流发送过去没有啊还出错
 
后退
顶部