Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Impresion en Matriz de Puntos, para CESAR

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Impresion en Matriz de Puntos, para CESAR Responder citando

Cesar si no te supone mucho trabajo podrías poner en le foro un ejemplo de impresión, pero sacando los datos de un consulta. Es para imprimir los datos provenientes de una consulta de TIQUETS en una miniprinter. Seguro que tu ejemplo será bien recibido en el foro. Con ello sacarias de dudas a muchos usuarios del foro, ten en cuenta que no todos los que melodeamos por aqúi somos tan brillantes como otros. MUCHAS GRACIAS DE ANTEMANO.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Llamada
Código:

ImprimeDirecto("tickets","hola mundo");


FUNCION
Código:

void ImprimeDirecto(AnsiString PrinterName,AnsiString sRenglon)
{
LPVOID Data;
DWORD Count;
DWORD Bytes;

try
{

HANDLE hPrinter;
LPVOID Data;
DWORD Count;
DWORD Bytes;
HANDLE printerHandle = 0;
PRINTER_DEFAULTS printerOptions;
printerOptions.pDatatype = "RAW";
printerOptions.pDevMode = NULL;
printerOptions.DesiredAccess = PRINTER_ACCESS_USE;



struct {
char *DocName, *OutputFile, *DataType;
} DocInfo = {"Document", 0, "RAW"};

Data=LPVOID(sRenglon.c_str());
Count=sRenglon.Length();
PrinterName=PrinterName.Trim();
OpenPrinter(PrinterName.c_str(), &hPrinter, 0);
StartDocPrinter(hPrinter, 1, LPBYTE(&DocInfo));
StartPagePrinter(hPrinter);
WritePrinter(hPrinter, Data, Count, &Bytes);
EndPagePrinter(hPrinter);
EndDocPrinter(hPrinter) ;
ClosePrinter(hPrinter);

}
catch(...)
{

}
}
//--------------------------------------------------


y ahora con una pequeña modificacion , imprime el contenido de un LListBox, donde guardas y visualizas (si quieres) el documento a imprimir
Ten en cuenta que cuando imprimes en una impresora de tickets no usas mas de 50 lineas (por lo general)

Ejemplo de llamada
Código:

 ImprimeDirecto("tickets",lstReporte);

Código:


//----------------------------------------------------------------------------
void ImprimeDirecto(AnsiString PrinterName,TListBox *pLista)
{
AnsiString sRenglon;
sRenglon="";
int j=0;
for(int i=0;i<pLista->Items->Count;i++)
  {
    sRenglon=sRenglon+pLista->Items->Strings[i]+"\n";
    j++;
    if(j>100)
      {
      j=0;
      ImprimeDirecto(PrinterName,sRenglon);
      sRenglon="";
      }
/*  sRenglon=pLista->Items->Strings[i];
  sRenglon=sRenglon+"\n";
  ImprimeDirecto(PrinterName,sRenglon);
  */

    // Aqui Falta Implementamos
  // la lectura de secuencias de escape
  // para impresion con formateo

  }
if(sRenglon!="") // Elultimo chix
 ImprimeDirecto(PrinterName,sRenglon);
/*}
catch(...)
{

}*/
}


ahora la solucion al problema de las secuencias de escape, es decir:

decirle a la impresora, caracter pequeño,, expandido, corta el papel, abre el cajon etc etc, todo en el modo de secuencias de escape

ejemplo de llamada

Código:
       
// expando y comprimi la letra

lstReporte->Items->Add(StrCentra("USD"+FloatToStrF(fConsumo/fTipo_Cambio,ffCurrency,8,1)+"/PESOS"+SecuenciaEscape("027014")+FloatToStrF(fConsumo,ffCurrency,8,1),30)+SecuenciaEscape("027015"));


Código:

AnsiString SecuenciaEscape(AnsiString sCadena)
{
// Autor: Ing Gabriel Gongora Navarrete
// Es posible modificar y/o mejorar esta funcion
// siempre y cuando se comparta el codigo con la
// comunidad


  char *cadena=new char[sCadena.Length()+1];

 // StrCopy(szBuffer, Label1->Caption.c_str());

  StrCopy(cadena,sCadena.c_str());
  int iLong=sCadena.Length();
  int indice=1;
  int i=0;
  for(i=0;i<(iLong/3);i++)
   {
    AnsiString x=sCadena.SubString(indice,3);
    int ix=x.ToInt();
    cadena[i]=ix;
    indice=indice+3;
   }
   cadena[i+1]=' ';
   cadena[i]='\0';

//   ShowMessage((AnsiString)cadena);
return (AnsiString)cadena;
}
//----------------------------------------

_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Bien la Opcion que me pides, esta en el siguiente enlace, si ya lo has visto.

indicame que es lo que realmente deseas..
saludos..

enlace
https://cppbuilder.es/viewtopic.php?t=7940

similar a la de touch en un prinicipio sacandome del apuro, el chiste es enviar lo que imprimes a un TStringList sea un Memo o Richedit, o TList
el chiste es que imprime las lineas en formato texto, al antiguo Clipper
todo esto para evitar el Spooiler de windows y dejar libre la impresora
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Gracias Responder citando

Gracias a los dos por vuestras respuestas, la verdad es que despues de probar vuestro codigo y hacer pruebas de rapidez comparado con el QReport no he encontrado diferencias ha tener en cuenta, por tanto creo que me inclinaré por este ultimo, ya que me permite mayor comodidad a la hora de configurar los informes o facturas. GRACIAS.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.