打印精确定位(100分)

  • 主题发起人 主题发起人 coao
  • 开始时间 开始时间
C

coao

Unregistered / Unconfirmed
GUEST, unregistred user!
对字符、数字等精确定位打印。

要求:
在以下所画矩形范围内输出字符,字体为宋体9号,
字符为StringList,所画矩形框x、y值为变量(已知)。

如: 字符:='大富翁'

use printers;
with Printer do
begin
Canvas.MoveTo(0,20);
Canvas.LineTo(150,20);
Canvas.MoveTo(150,20);
Canvas.Lineto(150,70);
Canvas.MoveTo(0,20);
Canvas.LineTo(0,70);
Canvas.MoveTo(0,70);
Canvas.Lineto(150,70);
// Canvas.TextOut(40,30,'大富翁');
Canvas.TextOut(x,y,'大富翁'); ?????
end;
 
大哥,你咋不考虑打印机的分辨率呢?
用分辨率为1200dpi的打印机你会打一个好小的框哦:)
 
to Reboot:
不考虑打印机的分辩率。
因为行业使用的打印机都是一样,且专用。

如果要考虑外设的话,程序将大改。
 
专用打印机都有很好的说明书,很好的售后服务,为什么不用这些东西呢?
 
to weicong:
你误会了,专门使用的打印机(不作他用),不是专用打印机(宽行或票打之类的)。

你说不错,系统中有使用专用打印机,是使用了他们的相关资料。
 
怎么要救命?
你知道打印机的水平和垂直分辨率后,不就可以准确定位了吗?
我给台湾光阳摩托做的一个系统中用个合格证的打印程序,
定位很准,一直在用哦:)
 
to reboot:
对于打印机的分辨率是已知,但是就是无法进行精确定位,最近智弱。:-(

但请指教。



 
coao: 不知你要达到什么功能,按你上面的要求写了段代码。
use printers;
procedure TForm1.Button1Click(Sender: TObject);
var
tw, th: Integer;
OutStr: String;
begin
OutStr := '大富翁';
with Printer, Printer.Canvas do
begin
BeginDoc;
Rectangle(0,20,150,70);
Font.Name := '宋体';
Font.Size := 9;
tw := TextWidth(OutStr);
th := TextHeight(OutStr);
Canvas.TextOut(0+(0150-tw)div 2,20+(50-th)div 2,OutStr);
EndDoc;
end;
end;
没达到你想要的功能和我联系(zhanglizhuo@263.net :)
 
thank Reboot.
有空的话,可以oicq联系。

me:6082316

 
接受答案了.
 
后退
顶部