Impressao - usando o objeto TStream

Top  Previous  Next

{ Rotinas do objeto TDirectPrinterStream , para impressão diretamente na

impressora, usando o Windows }

 

Constructor TDirectPrinterStream.Create(aPrinter: TPrinter; aTitle: String);

Begin

  Inherited Create;

  fPrinter := aPrinter;

  fTitle := aTitle;

  CreateHandle;

End;

 

Procedure TDirectPrinterStream.CreateHandle;

Type

  DOC_INFO_1 = Packed Record

    pDocName: PChar;

    pOutputFile: PChar;

    pDataType: PChar;

  End;

Const

  DocInfo: DOC_INFO_1 = (

    pDocName: Nil;

    pOutputFile: Nil;

    pDataType: 'RAW');

Var

  aDevice,

    aDriver,

    aPort: Array[0..255Of Char;

    aMode: Integer;

Begin

  FreeHandle;

  If fHandle = 0 Then Begin

    fPrinter.GetPrinter(aDevice, aDriver, aPort, aMode);

    If OpenPrinter(aDevice, fHandle, Nil) Then Begin

      DocInfo.pDocName := PChar(fTitle);

      If StartDocPrinter(fHandle, 1, @DocInfo) = 0 Then Begin

        ClosePrinter(fHandle);

        fHandle := 0;

      End

      Else

        If Not StartPagePrinter(fHandle) Then Begin

        EndDocPrinter(fHandle);

        ClosePrinter(fHandle);

        fHandle := 0;

      End;

    End;

  End;

End;

 

Destructor TDirectPrinterStream.Destroy;

Begin

  FreeHandle;

  Inherited;

End;

 

Procedure TDirectPrinterStream.FreeHandle;

Begin

  If fHandle <> 0 Then Begin

    EndPagePrinter(fHandle);

    EndDocPrinter(fHandle);

    ClosePrinter(Handle);

    fHandle := 0;

  End;

End;

 

Function TDirectPrinterStream.Write(Const Buffer; Count: LongInt): Longint;

Var

  Bytes: LongInt;

Begin

  WritePrinter(Handle, @Buffer, Count, Bytes);

  Result := Bytes;

End;

{ Final das rotinas do objeto TDirectPrinterStream , para impressão

diretamente na impressora, usando o Windows }

 

 

//exemplo

 

 

x :  Array[0..255of Char;

 

   x := 'ABCD';

   Impressora.Write(x,Length(x));