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 

Clase imprime

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Clase imprime Responder citando

--- Clase Imprime.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "impre.h"
#include <Printers.hpp>
//---------------------------------------------------------------------------

#pragma package(smart_init)
//clase Timpre
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//constructor
__fastcall Timpre::Timpre()
{
AnsiString prop_z;
int ancho_z=0;
Prntr= new TPrinter;
Prntr=Printer();
Prntr->Title="Impresion";
prop_z="P.H:"+FormatFloat("0",Prntr->PageHeight);
prop_z=prop_z+" P.W:"+FormatFloat("0",Prntr->PageWidth);
prop_z=prop_z+" Impresora:"+Prntr->Printers->Strings[Prntr->PrinterIndex];
alto_z=Prntr->Canvas->TextHeight("W");
ancho_z=Prntr->Canvas->TextWidth(" ");
margensup_z=alto_z*2;
espacol_z=ancho_z;
margenizq_z=ancho_z*2;
prop_z=prop_z+"\nAncho Car:"+FormatFloat("0",ancho_z);
prop_z=prop_z+" Alto Car:"+FormatFloat("0",alto_z);
ShowMessage(prop_z);
lista_encol = new TList;
linenc_z = new TStringList;
linenc_z->Clear();
margeninf_z=Prntr->PageHeight - (alto_z*2);
Prntr->BeginDoc();
posy_z=margensup_z;
justenc_z=LINCEN;
}

//destructor
__fastcall Timpre::~Timpre()
{
// if ( Prntr ){ delete Prntr; Prntr = NULL; }
}
//---------------------------------------------------------------------------

void __fastcall Timpre::imprime_dato(const AnsiString texto_z, int columna_z, int justifica_z)
{
int ancho_z, ii_z, inix_z=margenizq_z;
if(posy_z > margeninf_z) saltapag();
// alto_z=Prntr->Canvas->TextHeight(texto_z);
ancho_z=Prntr->Canvas->TextWidth(texto_z);
for(ii_z=0; ii_z < columna_z; ii_z++) {
inix_z=inix_z+anchocol[ii_z]+espacol_z;
}
switch (justifica_z) {
case COLCEN: posx_z=inix_z+((anchocol[columna_z]-ancho_z)/2); break;
case COLIZQ: posx_z=inix_z; break;
case COLDER: posx_z=inix_z+anchocol[columna_z]-ancho_z; break;
case LINCEN: posx_z=margenizq_z+(Prntr->PageWidth-ancho_z)/2; break;
case LINIZQ: posx_z=margenizq_z; break;
case LINDER: posx_z=(margenizq_z+Prntr->PageWidth-ancho_z); break;
}
Prntr->Canvas->TextOut(posx_z,posy_z,texto_z);
}

void __fastcall Timpre::saltalin()
{
posy_z=posy_z+alto_z+2;
}

void __fastcall Timpre::saltapag()
{
posy_z=margensup_z; Prntr->NewPage(); Encabezado();
}

void __fastcall Timpre::impenposx(const AnsiString texto_z, int posx_z)
{
Prntr->Canvas->TextOut(posx_z,posy_z,texto_z);
}

void __fastcall Timpre::cierraimpre()
{
Prntr->EndDoc();
}

int __fastcall Timpre::ancho(const AnsiString texto_z)
{
return(Prntr->Canvas->TextWidth(texto_z));
}

void __fastcall Timpre::Encol_Add(const AnsiString texto_z, int numcol_z, int justifica_z)
{
mi_encol = new LstEncol;
mi_encol->encol=texto_z;
mi_encol->justcol=justifica_z;
mi_encol->numcol=numcol_z;
lista_encol->Add(mi_encol);
}

void __fastcall Timpre::Encabezado()
{
int ii_z=0;
// Prntr->Canvas->Font->Style = TFontStyles()<< fsBold << fsUnderline;
for(ii_z=0; ii_z < linenc_z->Count; ii_z++) {
imprime_dato(linenc_z->Strings[ii_z], 0, justenc_z); saltalin();
}
for(ii_z=0; ii_z < lista_encol->Count; ii_z++) {
mi_encol = (LstEncol*) lista_encol->Items[ii_z];
imprime_dato(mi_encol->encol, mi_encol->numcol,mi_encol->justcol);
}
saltalin();
// Prntr->Canvas->Font->Style = TFontStyles()<< fsBold << fsUnderline;
}

--- Clase Imprime.h

//---------------------------------------------------------------------------

#ifndef impreH
#define impreH
//---------------------------------------------------------------------------
#include <Printers.hpp>
#define COLCEN 0
#define COLIZQ 1
#define COLDER 2
#define LINCEN 3
#define LINIZQ 4
#define LINDER 5

//---------------------------------------------------------------------------
class Timpre {
public:
//dec's de constructor/destructor
__fastcall Timpre();
__fastcall ~Timpre();

//dec's de campos
TPrinter *Prntr;
int posx_z, posy_z, margenizq_z, margender_z, margensup_z,
margeninf_z, espacol_z, alto_z, justenc_z;
int anchocol[20];
TStringList *linenc_z;
typedef struct {
AnsiString encol;
int numcol;
int justcol;
} LstEncol;
TList *lista_encol;
LstEncol *mi_encol;
TCanvas *PrnCanvas;
void __fastcall imprime_dato(const AnsiString texto_z, int columna_z, int justifica_z);
void __fastcall saltalin();
void __fastcall saltapag();
void __fastcall impenposx(const AnsiString texto_z, int posx_z);
void __fastcall cierraimpre();
int __fastcall ancho(const AnsiString texto_z);
void __fastcall Encol_Add(const AnsiString texto_z, int numcol_z, int justifica_z);
void __fastcall Encabezado();
};
extern Timpre Impre;
#endif

Volver arriba
Mensaje    Asunto: Responder citando

Hola, bueno hay muchos detalles que no entiendo aun del builder, he usado tu codigo, y me da varios errores, no voy a discutir lo errores porque me doy cuenta que surgen de la forma en que enlazo tu codigo con un proyecto ya existente, te agradeciria enormente si puedes colocar un ejemplo mas concreto, puede ser una aplicacion pequeña, que solo imprima una frase, creo que eso seria suficiente ilustracion. muchas gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Impresion de Archivos Responder citando

Ah, lo que sucede es que yo desde siempre he usado impresoras de matriz de puntos con codigo Esc P/2 por que las puedo controlar bastante, además, como mayormente uso programas de cobranza y esas cosas pues hay muchos reportes de 20 paginas o más que la misma cajera imprime, y por tanto usa una impresora de matriz, el punto es que necesitaba imprimir el mismo reporte en una impresora Laser o de Inyeccion o lo que tenga instalado en Windows, por tanto cree esta clase y ahora simplemente lo imprimo como siempre y llamo a la funcion imprime para que se mande a cualquier impresora, estes es una función que hace eso:

--- imprigra.cpp ---
Código:

// Utilería que sirve para Imprimir un archivo de Modo Texto en Grafico
//   DRBR 26 de Agosto de 2002


//---------------------------------------------------------------------------
#include <stdio.h>
#include "imprigra.h"
#include "impre.h"
int manda_imp (String nomarch_z, String rutaimp_z, int tipoimp, int ff)
{
  const int IMPRESORA_GRAFICA     = 1;
  const int IMPRESORA_MATRIZ      = 2;
  switch (tipoimp) {
     case IMPRESORA_GRAFICA: imprime_gra(nomarch_z); break;
     case IMPRESORA_MATRIZ : imprime_txt(nomarch_z, rutaimp_z, ff); break;
  }
  return 0;
}

int imprime_txt (String nomarch_z, String rutaimp_z, int ff)
{
  String cmd_z;
  cmd_z = "copy \"" + nomarch_z + "\" " + rutaimp_z + " /b";
  system(cmd_z.c_str());
  if(ff) {
    cmd_z = "copy \\windows\\ff.txt " + rutaimp_z + " /b";
    system(cmd_z.c_str());
  }
  return (mrOk);
}

int imprime_gra (String nomarch_z)
{
  const int OK                  = 1;
  const int MI_ERROR            = -1;
  const int PLANO               = 0;
  const int ESCAPE              = 1;
  const int SUBRAYADO           = 2;
  const int TAM_PICA            = 12;
  const int TAM_ELITE           = 10;
  const int TAM_PICA_COND       = 6;
  const int TAM_ELITE_COND      = 4;
  const int TAM_DOBLE           = 16;
  const int SCAPE               = 27;
  const int CONDENSED_ON        = 15;
  const int CONDENSED_OFF       = 18;
  const int EXPANDED_ON         = 14;
  const int EXPANDED_OFF        = 20;
  const int FORM_FEED           = 12;
  int MAX_LIN_X_PAG             = 66;

  int lineas_z=0, modo_z=0, tamfont_z, anttmfont_z, doble_z=0;
  String result_z = "";
  char car_z;
  FILE *archin;
  Timpre *graimpre;

  if ((archin = fopen((nomarch_z).c_str(), "rt")) == NULL) {
      Application->MessageBox(("No puedo abrir el archivo de Lectura\n"+nomarch_z).c_str(), "Archivo Invalido", MB_ICONEXCLAMATION);
      return (MI_ERROR);
  }

  graimpre = new Timpre();
  graimpre->cambia_nombrefont("Lucida Console");
  graimpre->cambia_tamfont(TAM_PICA);
  tamfont_z = TAM_PICA; anttmfont_z = tamfont_z; doble_z =0;
  while ( (car_z = fgetc(archin)) != EOF) {
    switch (modo_z) {
      case PLANO:
        switch(car_z) {
          case SCAPE: modo_z = ESCAPE; break;
          case '\n'  :
            if(doble_z) {
              graimpre->cambia_tamfont(doble_z); tamfont_z = doble_z;
              doble_z = 0;
            }
            lineas_z++; graimpre->saltalin();
            if(lineas_z > MAX_LIN_X_PAG) { graimpre->saltapag(); lineas_z = 0; }
            break;
          case FORM_FEED: graimpre->saltapag(); lineas_z = 0; break;
          case CONDENSED_ON:
            switch (tamfont_z) {
              case TAM_PICA: tamfont_z =TAM_PICA_COND; break;
              case TAM_ELITE: tamfont_z =TAM_ELITE_COND; break;
            }
            graimpre->cambia_tamfont(tamfont_z);
            break;
          case CONDENSED_OFF:
            switch (tamfont_z) {
              case TAM_PICA_COND: tamfont_z =TAM_PICA; break;
              case TAM_ELITE_COND: tamfont_z =TAM_ELITE; break;
            }
            graimpre->cambia_tamfont(tamfont_z);
            break;
          case EXPANDED_OFF:
            if(doble_z) {
              graimpre->cambia_tamfont(doble_z); tamfont_z = doble_z;
              doble_z = 0;
            }
            break;
          case EXPANDED_ON:
            anttmfont_z = tamfont_z; doble_z = anttmfont_z;
            switch (tamfont_z) {
              case TAM_PICA_COND: tamfont_z =TAM_PICA; break;
              case TAM_ELITE_COND: tamfont_z =TAM_ELITE; break;
              case TAM_PICA:
              case TAM_ELITE: tamfont_z =TAM_DOBLE; break;
            }
            graimpre->cambia_tamfont(tamfont_z);
            break;
          default    : graimpre->imprime_car(car_z); break;
        }
        break;
      case ESCAPE:
        switch(car_z) {
          case '-': modo_z = SUBRAYADO; break;
          case 'M':
          switch (tamfont_z) {
              case TAM_PICA_COND: tamfont_z =TAM_ELITE_COND; break;
              case TAM_PICA: tamfont_z =TAM_ELITE; break;
            }
            graimpre->cambia_tamfont(tamfont_z); modo_z = PLANO; break;
          case 'P':
            switch (tamfont_z) {
              case TAM_ELITE_COND: tamfont_z =TAM_PICA_COND; break;
              case TAM_ELITE: tamfont_z =TAM_PICA; break;
            }
            graimpre->cambia_tamfont(tamfont_z); modo_z = PLANO; break;
          case 'E': graimpre->font_bold_on(); modo_z = PLANO; break;
          case 'F': graimpre->font_bold_off(); modo_z = PLANO; break;
          case '0': graimpre->alto_z -= 2; MAX_LIN_X_PAG = 88; modo_z = PLANO; break;
          case '1': graimpre->alto_z += 2; MAX_LIN_X_PAG = 66; modo_z = PLANO; break;
          default : modo_z = PLANO; break;
        }
        break;
      case SUBRAYADO:
        switch(car_z) {
            case '0': graimpre->font_underline_off(); modo_z = PLANO; break;
            case '1': graimpre->font_underline_on(); modo_z = PLANO; break;
          }
          break;
    }
  }
  graimpre->cierraimpre();
  delete graimpre;
  fclose(archin);
// -> Fin del Archivo
  return (OK);
}
// ------------------------------------------


---- y este es el .h ---


Código:

#ifndef IMPRI_GRAPH
#define IMPRI_GRAPH

#include <vcl.h>
#pragma hdrstop

int imprime_gra (String nomarch_z);
int manda_imp (String nomarch_z, String rutaimp_z, int tipoimp, int ff);
int imprime_txt (String nomarch_z, String rutaimp_z, int ff);


//---------------------------------------------------------------------------

#pragma package(smart_init)
#endif

_________________
La caja decía, requiere Win95 o superior así que instalé Linux.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
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.