listbox显示query的内容,但字段不能对齐,怎么办(100)

  • 主题发起人 主题发起人 调皮儿
  • 开始时间 开始时间

调皮儿

Unregistered / Unconfirmed
GUEST, unregistred user!
显示的内容有字母,有汉字,有数字,我用form6.listbox1.Items.Add(id+' '+stringofchar(' ',10-length(trim(id)))+chezhong+' '+stringofchar(' ',10-length(trim(chezhong)))+chehao+stringofchar(' ',15-length(trim(chehao)))这样显示,本以为会对齐,可由于stringofchar只计算出长度差然后用空格补齐,前面的字段有的是2个汉字,有的是3个汉字,就占不同的位置啊,还有字母与数字混合的字段。怎么办啊,现在listbox显示的太混乱了。显示时间的字段也是这样,主要是2010-4-14和2010-4-2这种区别,差一个数字,用空格补齐,也无法对齐。
 
这个比较难,除非你用等宽字体,不然不同的字母的宽度是有区别的。不知你stringofchar是怎么计算的,建议用Canvas.TextWidth来计算整个字符串的长度,这样计算结果差别不会太大,不够长就加空格再计算~
 
1、listbox 你要自己写函数,不要用 stringofchar例如:function FormatToLen(s: string; i: integer): string;const CutStr = #127#127#127#127#127#127#127#127#127#127#127#127#127#127#127#127#127#127#127#127;begin Result := s; //字符创长度增加到i,文字居中两端补全#127 if Length(s) < i then begin Result := Copy(CutStr, 1, (i - Length(s)) div 2) + s + Copy(CutStr, 1, (i - Length(s)) div 2); if Length(Result) < i then begin Result := Result + copy(CutStr, 1, i - length(Result)); end; end else begin Result := s; end;end;2、日期时间的字段用 formatdatetime完全能解决你的问题
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
830
SUNSTONE的Delphi笔记
S
I
回复
0
查看
625
import
I
后退
顶部