delphi串口接受数据在Memo如何实现每行显示字符个数自定义?
delphi串口接受数据在Memo如何实现每行显示字符个数自定义?最近在学习delphi
写个串口接受小软件,想实现接受数据自定义显示格式
例如下位机发数据没有做格式处理,(这里的格式处理指的是每N个数据加一个换行符之类的)
在串口接受到下位机发出的一大串数据后,每行只显示自定义个Hex数据;
用的是CportLib控件,接受用的ComPort1.ReadStr(Str, Count);
但是有个问题假如串口一次发送5000个数据,并不是一次就是把5000个数据送到Str中,
而是随机分成N次,好像没有规律。。
用Lines.Add(Str);会发现5000个数据会被随机分成参差不齐的N行;
用Memo.Text + Str会是一整段。
想问各位,如何自定义行显示个数换行? 自己判断当前行的字符数, 到达需要换行时尾部+#13 ysoni 发表于 2014-2-17 11:00
自己判断当前行的字符数, 到达需要换行时尾部+#13
可以给个例子么?
总感觉不好弄。。
比如5000个字符
被分成了10次
第1次str得到103个字符
第2次str得到354个字符
第3次str得到1235个字符
第4次str得到88个字符
第5次str得到631个字符
第6次str得到555个字符
第7次str得到238个字符
第8次str得到1039个字符
第9次str得到257个字符
第10次str得到976个字符
在不用全局变量的情况下,
让这5000个字符按每行5个字符分成1000行? 没人指导么?呼叫村长,大波妹{:lol:} 你可以用一个数组存储接收到的数据,这样你输出了多少字符就可以计算的。
使用一个全局变量更简便, 至少比再开发一个VCL省时多了。
Length(mmo1.Lines.Strings)最后一行文本的字符长度。 ysoni 发表于 2014-2-17 14:51
你可以用一个数组存储接收到的数据,这样你输出了多少字符就可以计算的。
使用一个全局变量更简便, 至少 ...
能给个完整的例子么?
你的是只读不可编辑的数据吧,你可以用VCL里面的ListBox来显示这些数据,人工填充ListBox locky_z 发表于 2014-2-17 20:42
你的是只读不可编辑的数据吧,你可以用VCL里面的ListBox来显示这些数据,人工填充ListBox ...
能给个例子? 本帖最后由 smset 于 2014-2-18 08:20 编辑
设定一个全局字符串变量,比如G_Buf; 串口数据事件里面把收到的数据累加到G_Buf: G_Buf:=G_Buf+RecvStr;
随即,进行G_Buf的处理:
var G_Buf:string;
ifform1.Memo1.Lines.Count>0 then
begin
if length(form1.Memo1.Lines)<>LINELEN thenform1.Memo1.Lines.Delete(form1.Memo1.Lines.Count-1);//清除最后的非整行。
end;
whilelength(G_Buf)>=LINELEN do
begin
form1.Memo1.Lines.Add(copy(G_Buf,1,LINELEN));//将一个整行长度的字符加入Memo1
G_Buf:=copy(G_Buf,LINELEN+1,length(G_BUF)-LINELEN);//截取后面的内容,保存到G_Buf中,继续处理。
end;
if G_Buf<>'' thenform1.Memo1.Lines.Add(G_Buf);//将最后剩余的不够整行的数据加入到最后。 还有一个最简单的办法,就是你把memo1的font字体设置为等宽字体,比如宋体,这种字体下,任何字符的宽度都是相同的。
你通过控制memo1本身的宽度,就可以间接控制每行显示的字符个数了,而且每行的字符个数肯定是相同的。 smset 发表于 2014-2-18 08:11
设定一个全局字符串变量,比如G_Buf; 串口数据事件里面把收到的数据累加到G_Buf: G_Buf:=G_Buf+RecvStr ...
谢谢,确实可选,但是遇到了个问题
用Cportlib控件,如果在接收个数未知的情况下,如何判断接收已经完成?
页:
[1]