首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎样在Memo或RichEdit中对齐不等长字符窜?解决思路

2012-02-08 
怎样在Memo或RichEdit中对齐不等长字符窜?用Memo- Lines- add(str)添加不等长字符串,怎样可以做到如下效

怎样在Memo或RichEdit中对齐不等长字符窜?
用Memo-> Lines-> add(str)添加不等长字符串,怎样可以做到如下效果,每行对应的列都左对齐或右对齐。
Proto     Local   Address                     Foreign   Address                 State              
TCP         0.0.0.0:135                         0.0.0.0:0                             LISTENING                 TCP         0.0.0.0:445                         0.0.0.0:0                             LISTENING               TCP         0.0.0.0:6059                       0.0.0.0:0                             LISTENING                   TCP         192.168.1.22:139               0.0.0.0:0                             LISTENING                   TCP         192.168.1.22:1056             211.100.21.179:80             ESTABLISHED               TCP         192.168.1.22:1086             211.100.23.248:80             CLOSE_WAIT

[解决办法]
用AnsiString::sprintf格式化,比如:

String b;
b.sprintf( "%10s ", "Proto ");
[解决办法]
char str[] = "%-8s%-22s%-22s%-12s ";

Memo1-> Lines-> Add(String().sprintf(str,
"Proto ", "Local Address ", "Foreign Address ", "State "));
Memo1-> Lines-> Add(String().sprintf(str,
"TCP ", "0.0.0.0:135 ", "0.0.0.0:0 ", "LISTENING "));
Memo1-> Lines-> Add(String().sprintf(str,
"TCP ", "0.0.0.0:445 ", "0.0.0.0:0 ", "ESTABLISHED "));
Memo1-> Lines-> Add(String().sprintf(str,
"TCP ", "0.0.0.0:6059 ", "0.0.0.0:0 ", "CLOSE_WAIT "));

[解决办法]
AnsiString::sprintf 是个很巧的方法.
[解决办法]
TStringList *strlstDbg=new TStringList();
AnsiString asTemp= " ";
for(i = 0;i < 256;i++)
{
AnsiString str;
asTemp+=str.sprintf( "%5d ",f_GwRecvData.ENDATA[i]) ;
//asTemp+= " ";
if((i+1)%8==0 && i )
{
strlstDbg-> Add(asTemp);
asTemp= " ";
}
}
strlstDbg-> Free();

//Memo 的字体最好调整一下,用FIXEDSYS,COURIED.
[解决办法]
直接偷了上面答案来改改^_^
用AnsiString::sprintf格式化:


AnsiString str;
str.sprintf( "%-m.ns ", "Proto ");
其中-表示左对齐,不加-则表示右对齐
m表示域宽,就是Proto这个字符串总共占多大宽度,如果实际宽度> m则按实际宽度,如果 <m则按指定宽度
.分隔域宽和精度,小数点前可以没有域宽说明
n表示数据精度,对于e,E,f格式为小数部分位数,对于g格式为有效数字位数,对于d格式为至少要输出的数字个数(添加前导0满足需要),对于例子中s格式无效

将一行字符串按照指定格式sprintf到AnsiString str中,再用memo-> line-> add(str);就可以了

热点排行