Ver Mensaje Individual
  #2  
Antiguo 04-04-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.475
Reputación: 21
newtron Va camino a la fama
Hola.

Yo mando la cadena a la impresora por su nombre en vez de abrir directamente el puerto y uso este código que te sirve tanto para impresoras locales como para impresoras en red:

Código Delphi [-]
// ****************************************************************************
// Rutina      : AbreElCajon
// Descripcion :
// ****************************************************************************
procedure AbreElCajon(var Impreso: TImpreso);

  function CreaLinea: String;
  var
    sAux: String;
  begin

    Result := '';

    sAux := Trim(DlgPropiedades.ComandoAperturaCajon);
    while Pos(' ', sAux) > 0 do begin

      try
        Result := Result + Chr(StrToInt(Copy(sAux, 1, Pos(' ', sAux)-1)));
      except

      end;

      sAux := TrimLeft(Copy(sAux, Pos(' ', sAux)+1, Length(sAux)));

    end;

    try
      Result := Result + Chr(StrToInt(sAux));
    except

    end;

  end;


  procedure AbreCajonSerie(sPuerto: String);
  var
    Puerto: THandle;
    Cadena: String;
    BytesEscritos: DWord;
  begin

    Cadena := #27 + #8;

    Puerto := CreateFile(PChar(sPuerto),
                         GENERIC_WRITE,
                         0,
                         nil,
                         OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL,
                         0);
                         
    WriteFile(Puerto,
              PChar(Cadena)^,
              Length(Cadena),
              BytesEscritos,
              nil);

    CloseHandle(Puerto);
  end;

var
  DocInfo1: TDocInfo1;
  Handle:   THandle;
  Linea:    String;
  N:        DWORD;
begin

  if DlgPropiedades.ImpresoraCajon < 0 then begin
    if DlgPropiedades.ImpresoraCajon = -1 then
      AbreCajonSerie('COM1')
    else if DlgPropiedades.ImpresoraCajon = -2 then
      AbreCajonSerie('COM2');
    Exit;
  end;

  if Printer.Printers.Count = 0 then Exit;


  if Pos(' on', Printer.Printers[Impreso.Impresora]) > 0 then begin
    if not OpenPrinter(PChar(Copy(Printer.Printers[Impreso.Impresora], 1, Pos(' on', Printer.Printers[Impreso.Impresora])-1)), Handle, nil) then begin
      ShowMessage('Error en OpenPrinter : ' + Printer.Printers[Impreso.Impresora]);
      Exit;
    end;

  end else begin
    if not OpenPrinter(PChar(Printer.Printers[Impreso.Impresora]), Handle, nil) then begin
      ShowMessage('Error en OpenPrinter : ' + Printer.Printers[Impreso.Impresora]);
      Exit;
    end;

  end;

  with DocInfo1 do begin
    pDocName    := PChar(Impreso.Nombre);
    pOutputFile := nil;
    pDataType   := 'RAW';
  end;

  StartDocPrinter(Handle, 1, @DocInfo1);

  StartPagePrinter(Handle);

//  Linea := #27 + #112 + #0 + #127 + #127;
  Linea := CreaLinea;
  WritePrinter(Handle, PChar(Linea), Length(Linea), N);

  EndPagePrinter(Handle);

  EndDocPrinter(Handle);

  ClosePrinter(Handle);

end;
Responder Con Cita