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 

Codigo mejorado para Impresión

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Codigo mejorado para Impresión Responder citando

El siguiente código lo implementé basado en uno encontrado aquí, pero encontré unos breves errores aquel , le hice la modificación respectiva y lo probe, dandome cuenta que funciona correctamente.

El siguiente programa lee un archivo con extensión .txt, lo pone en un memo y cuando doy click en un boton de la forma, imprime el texto.


Recordar añadir 2 TButton, un TMemo , un TPrintDialog y un TFontDialog.

//---------------------------------------------------------------------------
//--Por Miguel Angel Torres Arredondo
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <Printers.hpp>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
FILE *HiScores;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
HiScores = fopen("Hi.doc", "r");
Memo1->Lines->LoadFromFile("C:\\Hi.txt");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (PrintDialog1->Execute()) {

Printer()->Canvas->Font = Memo1->Font; //Asignamos la fuente de impresion
int lineHeight = abs(MulDiv(Printer()->Canvas->Font->Size,
GetDeviceCaps(Printer()->Handle, LOGPIXELSY), 72)); // determinamos altura de la linea
//lineHeight *= 3;
lineHeight *= 1.4;

int linesPerPage = (Printer()->PageHeight/lineHeight) - 2;
int lineCount = 2; // iniciamos la impresion en la linea 2 para dejar margen (en vez de la 0)


//Printer()->Orientation=poLandscape; //Imprimir Horizontalmente
//Printer()->Orientation=poPortrait;//Imprimir Verticalmente
Printer()->BeginDoc();
for (int i=0;i< Memo1->Lines->Count;i++) { //Barremos todas las lineas del memo
if (lineCount++ == linesPerPage) { //Si sobre paso el número de líneas por hoja, creo otra hoja
lineCount = 2;
Printer()->NewPage();
}
String s = Memo1->Lines->Strings[i];

Printer()->Canvas->TextOut(0, lineCount * lineHeight, s); //Imprimo cada Linea barrida
}
Printer()->EndDoc();
}

}

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


void __fastcall TForm1::Button2Click(TObject *Sender)
{
FontDialog1->Execute();
Memo1->Font=FontDialog1->Font;
}
//---------------------------------------------------------------------------
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

HOLA!!!

La pregunta mia es, como hace en el codigo para especificarle el tipo de pagina, es decir, si es letter o legal (CARTA u OFICIO), porque yo lo estaba haciendo manual e decir manejando pixeles pero es muy dificil.

Hay alguna forma de especificarle cual es el tipo de hoja??

GRACIAS!!!
_________________
__________________________
C++ RULZ FO' EVA'
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Pues yo preguntaba eso simplemente porque, siempre que voy a imprimir una hoja grande, siempre hay que ponerle en propiedades y ponerla horizontal...

Disculpen si soy un poquito novato en esto...

GRACIAS!!!
_________________
__________________________
C++ RULZ FO' EVA'
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola,
os ha funcionado este código con dbs2006? es que a mi no me funciona
Volver arriba
Ver perfil de usuario Enviar mensaje privado
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.