关于打印,我的代码好象没错吧,是不是少了点什么啊;(50分)

  • 主题发起人 主题发起人 whitecandy
  • 开始时间 开始时间
W

whitecandy

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
begin

if Printer.Printers.count > 0 then

begin

Printer.begin
Doc;
Printer.canvas.Font.Size:=10;
Printer.canvas.font.Color :=clred;
Printer.Canvas.font.Style :=[fsBold];
Printer.canvas.font.Name :='宋体';
Printer.Orientation := poPortrait;
Printer.canvas.TextOut (10,10,'hello');
printer.EndDoc;
end;

end;

是不是还要设置纸张来源??
另外写预览代码时如何实现在image.canvas上垂直显示一字符串,请指教
 
with Printerdo

begin

begin
doc;
ExportTo(Canvas);
enddoc;
end;
 
有什么出错信息?[:)]
 
是啊,有什么出错信息?
Printer.canvas.TextOut (10,10,'h'#13'e'#13'l'#13'l'#13'o');//打印竖起的文字
 
以下是我打印的代码:
已加了一些注解,麻烦把我看看是哪里的问题,多谢了:)
procedure TForm1.Button4Click(Sender: TObject);
var Mylist:TStringList;
strLine:string;
LineList:TStrings;
x,y,Line,i:integer;
begin

try
if Printer.Printers.count > 0 then

begin

Mylist:=Tstringlist.Create ;
LineList:=TStringList.Create ;
Mylist.LoadFromFile (cFileName);
//文件中分隔行,此行以下才是要用的
line:=splitline(cFileName,cSplitLine);
For i:=line to Mylist.count-1do

begin

//getlinefromfile为我编的从指定文件中读取某行的函数
strLine:=GetLineFromFile(cFileName,i+1) ;
//strsplit为将一有分隔符的字符串分离的函数,我这里是用‘,’分隔的
LineList:=strsplit(strLine,',');
//错误 x,y去整后为0 linelist.strings[1]为左边距,单位毫米 换算可能错了
x:=trunc(strtoint(LineList.strings[1])/25.4);

y:=trunc(strtoint(LineList.strings[2])/25.4) ;

// 以下是对画布的设置,应该没问题的
Printer.canvas.Font.Size:=strtoint(LineList.strings[8]);
Printer.canvas.font.Color :=clred;
if linelist.strings[9]='0' then

Printer.Canvas.font.Style :=[];
if linelist.strings[9]='1' then

Printer.Canvas.font.Style :=[fsBold];
if linelist.strings[9]='2' then

Printer.Canvas.font.Style :=[fsItalic];
Printer.canvas.font.Name :=linelist.strings[7];
//在这里设置打印方向是否可行?
if LineList.strings[5]='2' then

Printer.Orientation := poPortrait;
if linelist.strings[5]='1' then

Printer.Orientation := poLandscape;
//这一句是不是应该放在for循环以前,我试过了,还是有问题
Printer.begin
Doc;
// 以下这句有可能错吗?
Printer.canvas.TextOut (x,y,LineList.strings[10]);
end;

end;

finally
Printer.EndDoc;
mylist.Free ;
linelist.free;
end;

end;
 
问题我已经找出来了,是打印方向设置上的问题,要在printer.begin
doc之前
不过这样又产生了新的问题,就是printer.begin
doc应该写在循环语句的外面还是里面?
如果是外面,则我办法在语句中控制要打印字符串的方向
而如果在printer.canvas.textout()前后写printer.begin
doc,printer.enddoc,那么就有
很多个打印任务了,这总不太好
现在我的想法是找一种能把多个打印任务打到同一张纸上,不知道可不可行,请指教
 
垂直打印字符串的方法我已经解决,如下(不过未打印过,预览是可以的)
预览代码如下:
var S:WideString;
strPrint:String;
i:integer;
begin

strPrint :='大富翁论坛’;
s:=strPrint;
for i:=1 to length(s)do

canvas.textout(1,i*canvas.textheight('|'),s);
end;

 
恭喜你,解决了问题。
 
多人接受答案了。
 
后退
顶部