 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Miguel Angel Torres Master


Registrado: 23 Abr 2006Mensajes: 282Ubicación: Siegen, Alemania
|
Publicado: Mie 26 Abr, 2006 2:14 pm Asunto: Codigo mejorado para Impresión |
|
|
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 |
|
 |
pablo_emiliob Master


Registrado: 19 Sep 2005Mensajes: 211Ubicación: Barranquilla - Colombia
|
Publicado: Jue 07 Dic, 2006 11:05 pm Asunto: |
|
|
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 |
|
 |
pablo_emiliob Master


Registrado: 19 Sep 2005Mensajes: 211Ubicación: Barranquilla - Colombia
|
Publicado: Dom 24 Dic, 2006 2:54 am Asunto: |
|
|
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 |
|
 |
paz Ens

Registrado: 22 Feb 2007Mensajes: 28
|
Publicado: Vie 27 Abr, 2007 9:25 am Asunto: |
|
|
hola,
os ha funcionado este código con dbs2006? es que a mi no me funciona |
|
| 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.
|