Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
ВнизМониторинг печати Найти похожие ветки
← →
smolkown (2009-06-19 09:26) [0]Буду откровенен в ДЕЛФИ ни чего не понимаю. Только приступил к изучению. Могу создать только калькулятор и пару кнопок сделать. Пере до мной поставило руководство написать программу для мониторинга, контроля принтера. То есть отслеживать количество распечатанных листов за день. В нети нашел информацию она прилагается, но ни чего с этой инфой не могу сделать, так как не хватает знаний по Делфи. самостоятельно попробовал написать программку (есть в приложении). Но ничего не получается в таблицу не вносятся данные. Что делать?
unit print;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,WinSpool, StdCtrls, ExtCtrls, Grids;
type JOB_INFO_1_ARRAY = Array of JOB_INFO_1; {Обьявление типа}
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Timer1: TTimer;
Function GetSpoolerJobs(sPrinterName : String) : JOB_INFO_1_ARRAY;
procedure Timer1Timer(Sender: TObject); {}
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Function TForm1.GetSpoolerJobs(sPrinterName : String) : JOB_INFO_1_ARRAY;
var
i : Integer;
hPrinter : THandle;
bResult : Boolean;
cbBuf : DWORD;
pcbNeeded : DWORD;
pcReturned : DWORD;
aJobs : Array[0..99] of JOB_INFO_1;
begin
cbBuf := 1000;
bResult := OpenPrinter(PChar(sPrinterName), hPrinter, Nil);
if NOT bResult then begin
ShowMessage("Error opening the printer");
exit;
end;
bResult := EnumJobs(hPrinter,0,Length(aJobs),1,@aJobs,cbBuf,pcbNeeded,pcReturned);
if NOT bResult then begin
ShowMessage("Error Getting Jobs information");
exit;
end;
ClosePrinter(hPrinter);
for i:=0 to pcReturned-1 do begin
if aJobs[i].pDocument <> Nil then begin
SetLength(Result, Length(Result)+1);
Result[Length(Result)-1] := aJobs[i];
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i, ii : Integer;
aJobs : JOB_INFO_1_ARRAY;
begin
for i:=0 to StringGrid1.ColCount-1 do
for ii:=0 to StringGrid1.RowCount-1 do StringGrid1.Cells[i,ii] := "";
aJobs := GetSpoolerJobs("Xerox Phaser 3310 PCL 6");
for i:=0 to Length(aJobs)-1 do begin
StringGrid1.Cells[i,0] := aJobs[i].pPrinterName;
StringGrid1.Cells[i,1] := aJobs[i].pMachineName;
StringGrid1.Cells[i,2] := aJobs[i].pUserName;
StringGrid1.Cells[i,3] := aJobs[i].pDocument;
StringGrid1.Cells[i,4] := aJobs[i].pDatatype;
StringGrid1.Cells[i,5] := aJobs[i].pStatus;
StringGrid1.Cells[i,6] := IntToStr(aJobs[i].Status);
case aJobs[i].Status of
JOB_STATUS_PAUSED: StringGrid1.Cells[i,6] := "JOB_STATUS_PAUSED";
JOB_STATUS_ERROR: StringGrid1.Cells[i,6] := "JOB_STATUS_ERROR";
JOB_STATUS_DELETING: StringGrid1.Cells[i,6] := "JOB_STATUS_DELETING";
JOB_STATUS_SPOOLING: StringGrid1.Cells[i,6] := "JOB_STATUS_SPOOLING";
JOB_STATUS_PRINTING: StringGrid1.Cells[i,6] := "JOB_STATUS_PRINTING";
JOB_STATUS_OFFLINE: StringGrid1.Cells[i,6] := "JOB_STATUS_OFFLINE";
JOB_STATUS_PAPEROUT: StringGrid1.Cells[i,6] := "JOB_STATUS_PAPEROUT";
JOB_STATUS_PRINTED: StringGrid1.Cells[i,6] := "JOB_STATUS_PRINTED";
JOB_STATUS_DELETED: StringGrid1.Cells[i,6] := "JOB_STATUS_DELETED";
JOB_STATUS_BLOCKED_DEVQ: StringGrid1.Cells[i,6] := "JOB_STATUS_BLOCKED_DEVQ";
JOB_STATUS_USER_INTERVENTION: StringGrid1.Cells[i,6] := "JOB_STATUS_USER_INTERVENTION";
JOB_STATUS_RESTART: StringGrid1.Cells[i,6] := "JOB_STATUS_RESTART";
JOB_POSITION_UNSPECIFIED: StringGrid1.Cells[i,6] := "JOB_POSITION_UNSPECIFIED";
else StringGrid1.Cells[i,6] := "Unknown status...";
end;
end;
StringGrid1.Refresh;
end;
en
← →
Virgo_Style © (2009-06-19 11:07) [1]Хм. Проверил - вроде все замечательно вносится и выносится.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c