打印对齐 (5分)

  • 主题发起人 主题发起人 gdljc
  • 开始时间 开始时间
G

gdljc

Unregistered / Unconfirmed
GUEST, unregistred user!
POS58直接向并口打印,如何对齐位置,下面是齐的,如果名称长度不一样,格式就不齐了。
用的是:
Assignfile()
......
writeln()
.....
closefile()

销售单
日期:2002-12-20 时间:08:15 操作员:001
-------------------------------------------------
名称 单价 数量 金额
1 3 2 6
2 1 10 10
--------------------------------------------------
合计:16
 
不齐的样子:

销售单
日期:2002-12-20 时间:08:15 操作员:001
-------------------------------------------------
名称 单价 数量 金额
1111111 3 2 6
2 11.5 10 10
--------------------------------------------------
合计:16

用什么方法做好呢?采用字符打印方式。
 
我也做这个,我的做法是定义每个字段的的长度(这个值最好是能容下最大长度的值),
例如:名称的长度定位20,那么不够的补空格
公式:
如果左对齐:字段值 + (长度-length(字段值))个空格
如果右对齐:(长度-length(字段值))个空格 + 字段值
 
(长度-length(字段值))个空格
怎么动态实现呢,用数组吗?
 
生成空格字符函数
function NullStr(n:Integer):String;
var i:integer;
begin
result:='';
if n>0 for i:=1 to n do
result:=result+' '
end;

const
fldLen:Array [1..4] of integer=[15,8,8,12];
fldNam:Array [1..4] of String=['名称','单价','数量','金额'];//字段名
var i:integer;
s1,s2:String;
begin
...
写头信息
with Detail do
while not eof do begin
for i:=1 to 4 do begin
s1:=fieldByName(fldNam).DisplayText;
s2:=NullStr(fldLen-length(s1));
write(file,s1,s2);
end;
Writeln(file,'')
next;
end;
写尾信息
...
end;
 
接受答案了.
 
后退
顶部