Delphi中record结构体定义发送接收传递使用

定义消息结构体TMsg:

type
  PMsg = ^TMsg;
  TMsg = record
      FontName      :string[20];
      FontColor     :Integer;
      FontSize      :Integer;
      FontStyle     :string[4];
      Content       :array[0..4096] of Char;   //不能超过UDP包长
  end;

通过UDP协议发送结构体及将结构体成员赋值给RichEdit控件属性:

procedure TForm1.btnSendClick(Sender: TObject);
var
  Smsg:TMsg;  //发送消息结构
  OldCount:integer;
begin
  //发送
  Smsg.FontName:=RichEdit2.Font.Name;
  Smsg.FontColor:=RichEdit2.Font.Color;
  Smsg.FontSize:=RichEdit2.Font.Size;
  Smsg.FontStyle:=DeStyle(RichEdit2.Font.Style);
  StrPCopy(Smsg.Content,ConvertMsgToCmd(RichEdit2));
  IdUDPServer1.SendBuffer(edtRemoteIP.Text,4001,Smsg,SizeOf(Smsg));
  //本机显示
  RichEdit1.SelStart:=MaxInt;
  RichEdit1.Paragraph.FirstIndent:=0;
  RichEdit1.SelAttributes.Color := clGreen;
  RichEdit1.Lines.Add(DateTimeToStr(Now)+' : 你对 xxx 说 :');
  RichEdit1.Paragraph.FirstIndent:=18;
  OldCount:=Length(RichEdit1.Text);
  RichEdit1.SelStart:=MaxInt;
  RichEdit1.SelAttributes.Color :=Smsg.FontColor;
  RichEdit1.SelAttributes.Name:=Smsg.FontName;
  RichEdit1.SelAttributes.Size:=Smsg.FontSize;
  RichEdit1.SelAttributes.Style:=EnStyle(Smsg.FontStyle);
  ConvertMsgToFace(RichEdit1,Smsg.Content,OldCount);
end;

通过UDP协议接收结构体及将结构体成员赋值给RichEdit控件属性

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  Rmsg:TMsg;  //接收消息结构
  OldCount:integer;
begin
  //接收到的数据流直接可以传递给TMsg结构体,然后可以直接获取成员值
  AData.ReadBuffer(Rmsg,AData.Size);
  RichEdit1.SelStart:=MaxInt;
  RichEdit1.Paragraph.FirstIndent:=0;
  RichEdit1.SelAttributes.Color := clBlue;
  RichEdit1.Lines.Add(DateTimeToStr(Now)+' : 来自 '+ABinding.PeerIP+' 的消息 :');
  RichEdit1.Paragraph.FirstIndent:=18;
  OldCount:=Length(RichEdit1.Text);
  //showmessage(rmsg.FontName);
  //showmessage(rmsg.FontStyle);
  //showmessage(rmsg.Content);
  RichEdit1.SelStart:=MaxInt;
  RichEdit1.SelAttributes.Color :=Rmsg.FontColor;
  RichEdit1.SelAttributes.Name:=Rmsg.FontName;
  RichEdit1.SelAttributes.Size:=Rmsg.FontSize;
  RichEdit1.SelAttributes.Style:=EnStyle(Rmsg.FontStyle);
  ConvertMsgToFace(RichEdit1,Rmsg.Content,OldCount);
end;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值