我要做一个打印机管理程序,来记录打印人、打印的份数等情况。
我使用了以下一个消息处理程序来监视打印机的状态,但是在有
打印任务来的时候,它更本没有反应啊,那位高手能解决?
..........
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
procedure WMSpollerStatus(var Msg:TWMSpoolerStatus); message WM_SPOOLERSTATUS;
{ Private declarations }
public
{ Public declarations }
end;.............procedure TForm1.WMSpollerStatus(var Msg: TWMSpoolerStatus);
var
tbt:Byte;
Needed,Returned:DWORD;
ResultBuffer:Pointer;
i,x,Count:Integer;
Pi:PJobInfo1;
List:TListBox;
Lbl:TLabel;
begin
Inherited;
MessageBeep(0);
EnumJobs(hPrinter,0,Msg.JobsLeft,1,@tbt,0,Needed,Returned);
Count := Needed;
GetMem(ResultBuffer,Count);
try
EnumJobs(hPrinter,0,Msg.JobsLeft,1,ResultBuffer,Needed,Needed,Returned);
if Returned < Msg.JobsLeft then
begin
//Lbl.Caption:='0 个作业';
Memo1.Lines.Add('0 个作业');
// Continue;
end;
//Lbl.Caption:=IntToStr(Returned)+' 个作业';
Memo1.Lines.Add(IntToStr(Returned)+' 个作业');
Pi:=ResultBuffer;
for x:=0 to Returned-1 do begin
//List.Items.Add(Pi^.pDocument);
Memo1.Lines.Add(Pi^.pDocument);
Pi:=PJobInfo1(LongInt(Pi)+Sizeof(Pi^));
end;
finally
FreeMem(ResultBuffer,Count);
end; Msg.Result:=0;
end;.............
我使用了以下一个消息处理程序来监视打印机的状态,但是在有
打印任务来的时候,它更本没有反应啊,那位高手能解决?
..........
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
procedure WMSpollerStatus(var Msg:TWMSpoolerStatus); message WM_SPOOLERSTATUS;
{ Private declarations }
public
{ Public declarations }
end;.............procedure TForm1.WMSpollerStatus(var Msg: TWMSpoolerStatus);
var
tbt:Byte;
Needed,Returned:DWORD;
ResultBuffer:Pointer;
i,x,Count:Integer;
Pi:PJobInfo1;
List:TListBox;
Lbl:TLabel;
begin
Inherited;
MessageBeep(0);
EnumJobs(hPrinter,0,Msg.JobsLeft,1,@tbt,0,Needed,Returned);
Count := Needed;
GetMem(ResultBuffer,Count);
try
EnumJobs(hPrinter,0,Msg.JobsLeft,1,ResultBuffer,Needed,Needed,Returned);
if Returned < Msg.JobsLeft then
begin
//Lbl.Caption:='0 个作业';
Memo1.Lines.Add('0 个作业');
// Continue;
end;
//Lbl.Caption:=IntToStr(Returned)+' 个作业';
Memo1.Lines.Add(IntToStr(Returned)+' 个作业');
Pi:=ResultBuffer;
for x:=0 to Returned-1 do begin
//List.Items.Add(Pi^.pDocument);
Memo1.Lines.Add(Pi^.pDocument);
Pi:=PJobInfo1(LongInt(Pi)+Sizeof(Pi^));
end;
finally
FreeMem(ResultBuffer,Count);
end; Msg.Result:=0;
end;.............
解决方案 »
- 高分请教文件拖放问题:象WINARA一样,将程序窗体中的文件拖到资源管理器中.
- 音频的点播、广播系统?
- 关于计算字段的错误,请大家帮我看看
- 请教高手 在tfastreport空件中,设计从表如何连接数据源?
- 100分求教一个关于listbox的问题!
- delphi7.0关于Base64算法的问题?急救中.........
- delphi怎么没有自动格式化功能??
- ^_^ 100分 请教各位大虾数据库BCD字段类型转换
- 想帮一个控制面版的组件(CPL文件),参考了DELPHI自带的DEMO程序,但有些东西看懂,哪位高手知道能否提供一份详细的资料?
- 怎样让Label 始终显示在Form的正中呢?(不管有多长的字?)
- 如何定义一个函数的参数类型为数组,急
- 这个方法怎么用:CreateOleObject()
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls,WinSpool,ExtCtrls;type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
procedure WMSpollerStatus(var Msg:TWMSpoolerStatus); message WM_SPOOLERSTATUS;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
hPrinter:THandle;implementation{$R *.dfm}{ TForm1 }procedure TForm1.WMSpollerStatus(var Msg: TWMSpoolerStatus);
var
tbt:Byte;
Needed,Returned:DWORD;
ResultBuffer:Pointer;
i,x,Count:Integer;
Pi:PJobInfo1;
List:TListBox;
Lbl:TLabel;
begin
MessageBeep();
EnumJobs(hPrinter,0,Msg.JobsLeft,1,@tbt,0,Needed,Returned);
Count := Needed;
GetMem(ResultBuffer,Count);
try
EnumJobs(hPrinter,0,Msg.JobsLeft,1,ResultBuffer,Needed,Needed,Returned);
if Returned < Msg.JobsLeft then
begin
//Lbl.Caption:='0 个作业';
Memo1.Lines.Add('0 个作业');
// Continue;
end;
//Lbl.Caption:=IntToStr(Returned)+' 个作业';
Memo1.Lines.Add(IntToStr(Returned)+' 个作业');
Pi:=ResultBuffer;
for x:=0 to Returned-1 do begin
//List.Items.Add(Pi^.pDocument);
Memo1.Lines.Add(Pi^.pDocument);
Pi:=PJobInfo1(LongInt(Pi)+Sizeof(Pi^));
end;
finally
FreeMem(ResultBuffer,Count);
end; Msg.Result:=0;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
tbt:Byte;
Needed,Returned:DWORD;
ResultBuffer:Pointer;
x,Count:Integer;
Pi:PPrinterInfo1;
Sheet:TTabSheet;
// hPrinter:THandle;
Panel:TPanel;
PrinterName : string;
begin
// PrinterLst.Clear;
EnumPrinters(PRINTER_ENUM_LOCAL,'',1,@tbt,0,Needed,Returned);
if Needed=0 then Exit;
Count:=Needed;
GetMem(ResultBuffer,Count);
EnumPrinters(PRINTER_ENUM_LOCAL,'',1,ResultBuffer,Needed,Needed,Returned);
Pi:=ResultBuffer;
for x:=0 to Returned-1 do begin
// PrinterLst.Items.Add(Pi^.pName);
memo1.Lines.Add(Pi^.pName);
PrinterName:=Pi^.pName;
OpenPrinter(PChar(PrinterName),hPrinter,nil); Pi:=PPrinterInfo1(LongInt(Pi)+Sizeof(Pi^));
{
Sheet:=TTabSheet.Create(Self);
with Sheet do begin
PageControl:=Pages;
Caption:=PrinterLst.Items[PrinterLst.Items.Count-1];
OpenPrinter(PChar(Caption),hPrinter,nil);
Tag:=hPrinter;
ClosePrinter(hPrinter);
with TListBox.Create(Self) do begin
Parent:=Sheet;
Align:=alClient;
end;
Panel:=TPanel.Create(Self);
with Panel do begin
Parent:=Sheet;
Align:=alTop;
Height:=20;
BevelOuter:=bvNone;
end;
with TLabel.Create(Self) do begin
Parent:=Panel;
Left:=10;
Top:=3;
Caption:='0 个作业';
end;
end;
}
end;
FreeMem(ResultBuffer,Count);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Print();
end;end.