怎样在95/NT下实现如dos下的'copy ok.prn lpt1'的功能(200分)

  • 主题发起人 主题发起人 zl_angels
  • 开始时间 开始时间
Z

zl_angels

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位大虾,我想实现在95/NT下把已打印到文件的文件打印出来,如dos下的
'copy ok.plt lpt1',以下是我在uddf中找到的,但是只是打印了'a test string',我用了文件流和Tmemorystream的方式,但打出来的是乱码,哪位大虾
知道,我要原程序!
请给我发E-mail,zhoulin@990.net.
Thanks!
unit Esc1;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{ add the printers unit }
uses
Printers;
{$R *.DFM}
{ declare the "PASSTHROUGH" structure }
type TPrnBuffRec = record
BuffLength : word;
Buffer : array [0..255] of char;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Buff : TPrnBuffRec;
TestInt : integer;
s : string;
begin

{ Test to see if the "PASSTHROUGH" escape is supported }
TestInt := PASSTHROUGH;
if Escape(Printer.Handle,
QUERYESCSUPPORT,
sizeof(TestInt),
@TestInt,
nil) > 0 then
begin

{ Start the printout }
Printer.begin
Doc;
{ Make a string to passthrough }
s := ' A Test String ';
{ Copy the string to the buffer }
StrPCopy(Buff.Buffer, s);
{ Set the buffer length }
Buff.BuffLength := StrLen(Buff.Buffer);
{ Make the escape}
Escape(Printer.Canvas.Handle,
PASSTHROUGH,
0,
@Buff,
nil);
{ End the printout }
Printer.EndDoc;
end;
end;

end.
 
你那个Buffer中只加入了S字符串变量, 自然只能打印s里面的东西了.
要想将ok.prn通过你这个程序传送给lpt1, 应该先打开那个ok.prn放到Buffur中去
才行
 
我也是这么想的,所以我把缓冲区的buffer设为了Tmemorystream,再用其copyfrom
文件流,但是打出来的都是乱码,huizhang大虾,用什么方法打开ok.prn放到buffer
中去了,请给原代码.
 
建一个批处理
利用批处理参数传入文件名
在DELPHI 调用批处理,简单又实用
 
哪那么麻烦,直接根据需要配个字符串,WINPROC了不就得了
 
是否该结束此问题了?
 
呵呵,原来是这么回事。
>>我想实现在95/NT下把已打印到文件的文件打印出来。
~~~~~~~~~~~~~~~~~
直接端口输出, 不能用windows打印机。
 
多人接受答案了。
 
后退
顶部