 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Sab 22 Oct, 2005 8:24 pm Asunto: Impresion en Matriz de Puntos, para CESAR |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Lun 24 Oct, 2005 4:09 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 24 Oct, 2005 6:35 am Asunto: |
|
|
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 _________________
 |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Vie 28 Oct, 2005 2:35 am Asunto: Gracias |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|