Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.16;
Скачать: CL | DM;

Вниз

Мониторинг печати   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
2-1245537180
Нойвам
2009-06-21 02:33
2009.08.16
Обработка чекбоксов


15-1245067891
Пит
2009-06-15 16:11
2009.08.16
HTML, разворачивание элемента


15-1245181636
man from earth
2009-06-16 23:47
2009.08.16
а я например верю в лунатиков и в теории заговоров


2-1245389217
smolkown
2009-06-19 09:26
2009.08.16
Мониторинг печати


2-1245326405
Pavel
2009-06-18 16:00
2009.08.16
Изменение размеров изображения