奇怪!DELPHI和HP驱动程序不兼容?(50分)

  • 主题发起人 主题发起人 acer77g
  • 开始时间 开始时间
A

acer77g

Unregistered / Unconfirmed
GUEST, unregistred user!
惠普DESK JET 1125C无法正常打印!一执行printer.begin
doc;就错。
而打印测试页就无问题?WHY?
怀疑是程序问题,但换其它的打印机如:EPSON LQ1600K没事,一切OK!
DELPHI和HP驱动程序不兼容?
跟踪到priners.pas源码,发现:
DC := CreateHandleFunc(PChar(Driver), PChar(Device), PChar(Port), DevMode);
if DC = 0 then
RaiseError(SInvalidPrinter);
正常是打印机DC不为0,而HP的就是0!不解!?
 
惠普DESK JET 1125C这一款我没用过。
以前,我用HP 6L时,碰到一个问题,在程序中打印时死机,退出用WORD这些就不会。后来,
把HP 6L自带的驱动程序删了,改用微软的安装后,就不了。
不知你的这个问题和我的是否相似?
 
我又经过深入的研究,又有一翻心得,愿与众大虾共享:
1、我发觉是程序前面有一句影响,我想让用户自定义纸张尺寸,
于是:
Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then
begin
try
pDMode := GlobalLock(hDMode);
if pDMode <> nil
then
begin
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERWIDTH or DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;//!!!!!!!!!!!!!!!!
pDMode^.dmPaperWidth := 3800 ;
pDMode^.dmPaperLength:= 2800;
end;
finally
GlobalUnlock(hDMode);
end;

注意有!的那句,按照WINAPI的手册,pDMode^.dmPaperSize=0为用户自定义纸张,
但DMPAPER_USER为DELPHI定义的常量,值为$100,与WINAPI不符,
可奇怪的是其它打印机,为1600K,佳能都没事,纸张都设置对了,
搞不懂pDMode^.dmPaperSize到底应设什么值???????
2、
回到本问题上来,pDMode^.dmPaperSize=0后,当程序运行到:
DC := CreateHandleFunc(PChar(Driver), PChar(Device), PChar(Port), DevMode);
if DC = 0 then
RaiseError(SInvalidPrinter);
DC为0了,自然就产生异常,可别的打印机就正常。
3、
但是,当我强行将pDMode^.dmPaperSize=DMPAPER_A4后,纸张又设置正确了,可我总不能
要求用户都用A4纸吧。
4、总是怀疑HP 1125C FOR WIN9X的驱动有BUG,于是用WIN2K测试,异常消失了,但打印结果
没有条件测试,应该没有问题。
5、用WINDOW自己的控制面板—打印机进行设置纸张,没有问题,但让用户这么设置不像一个
优秀的程序员编的程序。
6、总的推断,DELPHI对WINAPI进行封装后与HP FOR WIN9X的驱动发生冲突。
 
后退
顶部