--- 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