高手请进:50分求解!

ymxxm 2000-08-10 11:50:00
如何用Delphi侦察特定打印机是否就绪
...全文
106 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ymxxm 2000-08-11
  • 打赏
  • 举报
回复
Michaelyfj :
我可能没有把问题讲清楚;
我利用Tstreeamfile直接写到打印机端口(LPT1)(票据打印机,没有驱动程序)
代码如下:
....
fs1:=TFileStream.Create('LPT1',fmOpenWrite);
//try
//初始化打印机
text1:=chr(27)+'@';
fs1.Write(text1,Length(text1));
在执行最后一句时程序停止(死机)且无法通过Try Except On Estream do 或
try Except On Eswrite do捕获错误。你的代码我试过,会在同样的问题
Michaelyfj 2000-08-10
  • 打赏
  • 举报
回复
你试打开指定的打印机,如果可以打开,说明已经就绪。
以下程序你可以参考参考
var
FDevice:array [0..255] of char;
FDriver:array [0..255] of char;
FPort:array [0..255] of char;
FDeviceMode:THandle;
PaperSize:Word;

procedure TForm1.SetPaperSize;
var
Dev:PDevMode;
Hand:THandle;
begin
Printer.GetPrinter(FDevice,FDriver,FPort,FDeviceMode);
if FDeviceMode<>0 then
begin
Dev:=PDEVMODE(Ptr(FDeviceMode)^);
if Dev <>nil then
begin
OpenPrinter(FDevice,Hand,nil);
dev^.dmFields:=dm_PaperSize or dm_Orientation or dm_PaperLength or dm_PaperWidth;
dev^.dmPaperSize:=PaperSize;
dev^.dmOrientation:=1;
if PaperSize=DMPAPER_USER then
begin
Dev^.dmPaperwidth:=(原来的宽度);
Dev^.dmPaperLength:=(你所要打印报表的高度,你可以通过QuickReport报表所占用的行数r*行高h,作为Dev^.dmPaperLength的参数。打印时,当纸张的高度到达你所设置的参数时,即停止打印);
end;
DocumentProperties(0,Hand,FDevice,Dev^,Dev^,DM_Modify or Dm_COPY or DM_UPDATE);
ClosePrinter(hand);
end;
end;
end;

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧