请大家帮忙!如何自己实现打印时文字居中等功能呀?(100分)

  • 主题发起人 主题发起人 lylydark
  • 开始时间 开始时间
L

lylydark

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要用delphi做一个activex控件,实现打印的功能。要求是在一个矩形区域内打印文字,可以设置文字的大小字体等属性,可以设置文字的显示方式(居左,居中,居右),我有疑惑的地方就是如何实现文字按照显示方式的设置来显示?是不是要通过矩形的宽度和字体的大小来计算呀?能否给我讲解一下思路,最好有个实例供我参考一下呀?
我现在是定义类MyRect,通过里面的方法实现一些设置
TMyRect=class
private
px0,py0,px1,py1,px,py:Integer;
ps:String;
public
procedure setRect(x0,y0,x1,y1:Integer);//设置矩形区域
procedure setString(myString:String);//设置打印文字内容
procedure setAlign(?????);//设置文字显示方式????????
... ...
end;

就是setAlign不知道如何去做呢?希望大家给点意见,谢谢
 
自己计算的话,用canvas.textwidth取得字符串的宽度
 
哦,是不是一定要用printer.canvas.textwidth吧?否则会报"canvas 未定义"的?
还有一个问题,就是我可否先定义好一个矩形和里面要填的文字,然后再用一个自定义的打印函数将它们一起打印出来呀?而不是先画矩形,然后设置文字,再打印文字。
 
直接用api中的drawtext函数功能比canvas的textout强
最后一个参数可以设置文本位置,居中,居左,居右等等。
只要给定一个矩形,文本,文本长度,他会帮你计算位置
 
to realLearning:
那个函数这么好呀?有没有例子给我看看呀?我不知道参数如何写,:<
 
还有drawtext可否打印出来东西呀?我要打印到纸质上面的
 
我画到屏幕上了,你直接画到打印机上就行
var r:trect;
begin

r.Left:=ClientRect.Left;
r.Top:=ClientRect.Top;
r.Right:=ClientRect.Right;
r.Bottom:=ClientRect.Bottom;
DrawText(canvas.Handle,'sdfsdfsdf',9,r,DT_NOCLIP or DT_SINGLELINE or DT_CENTER or DT_VCENTER );
end;
 
to wfzha:
我试过了,可以按照要求打印出文本(sdfsdfsdf)了,但是我怎么把矩形和文字一起打出来呀,我现在只能有文本,那个矩形框没有的嘛?不要笑我哦,呜呜,我真的是很糊涂的人,请再给我一些指点哦,谢谢
 
自己画,先画矩形,再写文本
 
我晓得了,先用printer.canvas.Rectangle(x0,y0,x1,y1)画个矩形,然后再画文字对吧?
那DrawText(canvas.Handle,'sdfsdfsdf',9,r,DT_NOCLIP or DT_SINGLELINE or DT_CENTER or DT_VCENTER )如何画到打印机上啊?是canvas.Handle这个参数要变吗?怎么变呀?
 
知道了,是用printer.canvas.Handle吧,此题就此结分了
 
后退
顶部