问题是这样的我用GetTextMetrics(Printer.Canvas.Handle, Metrics)
得到Result := Metrics.tmAveCharWidth;
然后在传给我的打印代码 Xmm := Xmm + FiOffSetX/10;
Ymm := Ymm + FiOffSetY/10;
Px := Round(Round(Xmm * HPointsPerInch * 10000/25.4) / 10000);
Py := Round(Round(Ymm * VPointsPerInch * 10000/25.4) / 10000);
Py := Py - GetOffSetY; //因为是绝对坐标, 因此, 不用换算成相对于Y轴坐标
Px := Px + 2 * AvgCharWidth;
//ShowMessage(IntToStr(AvgCharWidth));
Printer.Canvas.Font.Name :=FontName;
Printer.Canvas.Font.Style:=Fontstyle;
Printer.Canvas.Font.Size := FontSize;
//Printer.Canvas.Font.Color := clGreen;
if not Printer.Aborted then
Printer.Canvas.TextOut(Px, Py, Txt);然后奇怪的事情就出现了,
我showmessage(IntToStr(AvgCharWidth)),程序初次运行的时候,第一个AvgCharWidth:=9
第二个AvgCharWidth:=27
当我在发出打印指令,程序再次开始的时候
第一个变成AvgCharWidth:=13
第二个还是AvgCharWidth:=27
这样的话,程序初次运行所打印的第一个字符的位置,就和以后程序运行所打印的第一个字符位置不一样了
(我打印的是邮编,一个数字一个坐标)
现在打出来的效果就是这样的6 10000,中间始终空着
那位高手指点一下江山啊,在线等,谢谢!
得到Result := Metrics.tmAveCharWidth;
然后在传给我的打印代码 Xmm := Xmm + FiOffSetX/10;
Ymm := Ymm + FiOffSetY/10;
Px := Round(Round(Xmm * HPointsPerInch * 10000/25.4) / 10000);
Py := Round(Round(Ymm * VPointsPerInch * 10000/25.4) / 10000);
Py := Py - GetOffSetY; //因为是绝对坐标, 因此, 不用换算成相对于Y轴坐标
Px := Px + 2 * AvgCharWidth;
//ShowMessage(IntToStr(AvgCharWidth));
Printer.Canvas.Font.Name :=FontName;
Printer.Canvas.Font.Style:=Fontstyle;
Printer.Canvas.Font.Size := FontSize;
//Printer.Canvas.Font.Color := clGreen;
if not Printer.Aborted then
Printer.Canvas.TextOut(Px, Py, Txt);然后奇怪的事情就出现了,
我showmessage(IntToStr(AvgCharWidth)),程序初次运行的时候,第一个AvgCharWidth:=9
第二个AvgCharWidth:=27
当我在发出打印指令,程序再次开始的时候
第一个变成AvgCharWidth:=13
第二个还是AvgCharWidth:=27
这样的话,程序初次运行所打印的第一个字符的位置,就和以后程序运行所打印的第一个字符位置不一样了
(我打印的是邮编,一个数字一个坐标)
现在打出来的效果就是这样的6 10000,中间始终空着
那位高手指点一下江山啊,在线等,谢谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货