var
ts:Tprinter;
s:string;
begin
try
s:=inputbox('提示','hi','');
if s='' then exit;
ts:=Tprinter.Create;
ts.BeginDoc;
//textout(p.Handle,50,69,pchar('sdfsdf'),6);
ts.Canvas.TextOut(0,0,'s');
ts.EndDoc;
ts.Free;
except
showmessage(inttostr(getlasterror));
end;
//===========
程序如上,在2003上表现正常,在2000中单独编写为程序时正常,这段代码放入另外一个程序时报错,经检测是ts.beginDoc 这行代码,getlasterror=6 无效句柄.用api textout 同样如此,到底那里错了啊?
ts:Tprinter;
s:string;
begin
try
s:=inputbox('提示','hi','');
if s='' then exit;
ts:=Tprinter.Create;
ts.BeginDoc;
//textout(p.Handle,50,69,pchar('sdfsdf'),6);
ts.Canvas.TextOut(0,0,'s');
ts.EndDoc;
ts.Free;
except
showmessage(inttostr(getlasterror));
end;
//===========
程序如上,在2003上表现正常,在2000中单独编写为程序时正常,这段代码放入另外一个程序时报错,经检测是ts.beginDoc 这行代码,getlasterror=6 无效句柄.用api textout 同样如此,到底那里错了啊?
解决方案 »
- 有那位高手有使用WinHttp.WinHttpRequest.5.1 post数据的delphi例子,高分重酬
- 谁碰见过这个问题没
- 请教一个DBGRID的行的高度怎么改变??在线等待。。。
- PrintDBGridEh 打印加分
- 急急急!!关于SQL SERVER里的IMAGE类型和ORCALE里的BLOBl类型!!!!
- 哪里有edit右边有一个小按钮的控件
- 用word文档显示数据库中所需字段的内容,高手请进!!
- 请问如何实现象画图程序一样从面板上拖出控件放在指定的位置!(在线等待)
- 如何在TXT文本中的某一行追加数据,请详解
- 查找相同的名称
- 问一个很菜的关于串口的问题!
- 对DBGRID进行查找
把端口看成文件
直接用Printer就行了,不用再手工去创建;
他的定义是:
function Printer: TPrinter;
begin
if FPrinter = nil then FPrinter := TPrinter.Create;
Result := FPrinter;
end;
如果是vb倒可以,可是delphi中这个函数返回Tprinter
类,效果和ts:=Tprinter.create是一样的.正确用法如下:
var
i:integer;
begin
printer.BeginDoc; //依然要调用beginDoc
for i:=0 to 10 do
begin
//textout(p.Handle,50,69,pchar('sdfsdf'),6);
printer.Canvas.TextOut(50,69*(i+1),'haha,I finally it');
end;
printer.EndDoc;
end;
这样用才可以,否则报错.我的错误关键在于:
------
在2003上表现正常,在2000中单独编写为程序时正常,这段代码放入另外一个程序时报错,
------
那段代码独立出来是正常的执行的!!!放入另外程序中就错了,那个程序调用了WH_JOURNALRECORD钩子,
但是调试的时候我关闭了这个钩子,错误一样存在.
function Printer: TPrinter;
begin
if FPrinter = nil then FPrinter := TPrinter.Create;
Result := FPrinter;
end;看代码function printer和ts:=Tprinter.create效果一样,但是用ts报错,
用printer不报错.
用ts:=Tprinter.create不行,而且不安装钩子,那个程序打印依然失败,在从代码看,也看不出来什么,真是奇怪了....