高分!用PRINTER.CANVAS.TEXTOUT(X,Y,STRING)进行打印为什么不能换行?(200分)

  • 主题发起人 主题发起人 billru
  • 开始时间 开始时间
B

billru

Unregistered / Unconfirmed
GUEST, unregistred user!
比如用PRINTER.CANVAS.TEXTOUT(X,Y,memo1.text)进行打印,
打出来的文字都在一行上,不会自动换行,不知怎样解决?
注意只能用这种方法,不能用其他控件.
 
伙计,你是在画布上画图,不存在换行的概念,要指定X,Y坐标!
 
谢谢,我现在改用下面方法,但如果打印机未联机或缺纸等其他问题时,
程序就会停止响应。请问如何解决?
var
prn: TextFile;
str: String;
begin

Assignfile(prn,'lpt1');

Rewrite(prn);
// 准备写文件
str := memo1.text;
// 控制码 如:chr(27)+'a' 或打印文本(直接赋值给str)
Write(prn, str);
// 打印输出
CloseFile(prn);
// 关闭打印机,结束打印

end;
 
是啊, canvas是画布。 如果硬要用,就计算宽度,字数,把文本拆成多个
部分, 一行一行的textout
 
我写一个L,把CANVAS改成PRINTER。CANVAS就行,wth是指打印的宽度!我这个是指换行而言
procedure tform1.printtext (str:string;wth:integer);
var row:integer;
TEXTWTH:REAL;
TEXTHGH:INTEGER;
GSHU:INTEGER;
I,J:INTEGER;
begin

TEXTWTH:=CANVAS.TextWidth(STR) /LENGTH(STR);
IF CANVAS.TEXTWIDTH(STR)<WTH then

begin

CANVAS.TextOut(100,100,STR);
EXIT;
end;

TEXTHGH:=CANVAS.TextHeight (STR)+2;
ROW:=ROUND(CANVAS.TextWidth(STR)/WTH+0.5);
GSHU:= ROUND(WTH / TEXTWTH-0.5);
FOR J:=1 TO ROWdo

begin

FOR I:=1 TO GSHUdo

begin

IF I+(J-1)*GSHU>LENGTH(STR) then

EXIT;
CANVAS.TEXTOUT(ROUND(I*TEXTHGH),100+(J-1)*TEXTHGH,STR[I+(J-1)*GSHU]);

end;

end;

end;


procedure TForm1.Button1Click(Sender: TObject);
begin

printtext('FASDFFASDFASDFASDFADSFDSAFASDFD',100);
end;
 
后退
顶部