mizzard
01-02-2011, 20:42:59
Hola a todos, me gustaria plantearos una duda.
Resulta que yo trabajo con C++ Builder 2010 y se me plantea una duda.
Quiero realizar un programa que maneje los datos de una BD de access (hasta ahi, de momento todo bien), lo que pasa es que me gustaria generar una especie de "informe" e imprimirlo.
Habia pensado en usar un RichEdit e ir insertando los campos para generar una especie de tiquet de compra indicando fecha, producto, cantidad, total...
Pues tras mucho toquetear he conseguido mostrarlo como me gustaria en el RichEdit, y con el comando RichEdit->Print("Nombre_q_qiera"), consigo que me lo imprima pero no puedo configurar la página ni las copias.
Se que existen tanto el PrintDialog, como el PrinterSetupDialog, pero por mas que intento que me imprima mi RichEdit, solo consigo que me saque sin formato el texto que yo ya habia puesto con formato.
Os pongo el código de ejemplo sencillo para que veais lo q hago:
Codigo para poner texto en el Rich edit
AnsiString Factnum= "123";
RichEdit1->SelStart =0;
RichEdit1->SelAttributes->Size = 10;
RichEdit1->SelAttributes->Color = clRed;
RichEdit1->SelText = "Factura nº ";
RichEdit1->SelText = Factnum;
RichEdit1->SelText = "\n";
RichEdit1->SelText = "\n";
RichEdit1->SelAttributes->Size = 8;
RichEdit1->SelAttributes->Color = clBlack;
RichEdit1->SelText = "Patatas con pollo";
Código con el que intento imprimir las letras con ese formato:
void __fastcall TForm2::Button4Click(TObject *Sender)
{
int Y=25;
if(PrintDialog1->Execute()){
Printer()->Canvas->Font = RichEdit1->Font;
Printer()->Title = Caption;
Printer()->BeginDoc();
for(int Copias=0; Copias< PrintDialog1->Copies;Copias++){
if(PrintDialog1->PrintRange == prSelection)
Printer()->Canvas->TextOutA(Printer()->Canvas->PenPos.x,
Printer()->Canvas->PenPos.y, RichEdit1->SelText);
else
for(int N=0; N< RichEdit1->Lines->Count; N++){
Printer()->Canvas->TextOutA(25,Y,RichEdit1->Lines->Strings[N]);
Y += Printer()->Canvas->TextHeight("XXX");
if(Y + Printer()->Canvas->TextHeight("XXX")> Printer()->PageHeight){
Printer()->NewPage();
Y = 25;
}
}
//Printer()->NewPage();
}
Printer()->EndDoc();
}
}
Se podria hacer lo que quiero de alguna otra forma o de la forma que intento estaría bien encaminado??
Cualquier ayuda la agradeceré enormemente!
Un saludo!
Resulta que yo trabajo con C++ Builder 2010 y se me plantea una duda.
Quiero realizar un programa que maneje los datos de una BD de access (hasta ahi, de momento todo bien), lo que pasa es que me gustaria generar una especie de "informe" e imprimirlo.
Habia pensado en usar un RichEdit e ir insertando los campos para generar una especie de tiquet de compra indicando fecha, producto, cantidad, total...
Pues tras mucho toquetear he conseguido mostrarlo como me gustaria en el RichEdit, y con el comando RichEdit->Print("Nombre_q_qiera"), consigo que me lo imprima pero no puedo configurar la página ni las copias.
Se que existen tanto el PrintDialog, como el PrinterSetupDialog, pero por mas que intento que me imprima mi RichEdit, solo consigo que me saque sin formato el texto que yo ya habia puesto con formato.
Os pongo el código de ejemplo sencillo para que veais lo q hago:
Codigo para poner texto en el Rich edit
AnsiString Factnum= "123";
RichEdit1->SelStart =0;
RichEdit1->SelAttributes->Size = 10;
RichEdit1->SelAttributes->Color = clRed;
RichEdit1->SelText = "Factura nº ";
RichEdit1->SelText = Factnum;
RichEdit1->SelText = "\n";
RichEdit1->SelText = "\n";
RichEdit1->SelAttributes->Size = 8;
RichEdit1->SelAttributes->Color = clBlack;
RichEdit1->SelText = "Patatas con pollo";
Código con el que intento imprimir las letras con ese formato:
void __fastcall TForm2::Button4Click(TObject *Sender)
{
int Y=25;
if(PrintDialog1->Execute()){
Printer()->Canvas->Font = RichEdit1->Font;
Printer()->Title = Caption;
Printer()->BeginDoc();
for(int Copias=0; Copias< PrintDialog1->Copies;Copias++){
if(PrintDialog1->PrintRange == prSelection)
Printer()->Canvas->TextOutA(Printer()->Canvas->PenPos.x,
Printer()->Canvas->PenPos.y, RichEdit1->SelText);
else
for(int N=0; N< RichEdit1->Lines->Count; N++){
Printer()->Canvas->TextOutA(25,Y,RichEdit1->Lines->Strings[N]);
Y += Printer()->Canvas->TextHeight("XXX");
if(Y + Printer()->Canvas->TextHeight("XXX")> Printer()->PageHeight){
Printer()->NewPage();
Y = 25;
}
}
//Printer()->NewPage();
}
Printer()->EndDoc();
}
}
Se podria hacer lo que quiero de alguna otra forma o de la forma que intento estaría bien encaminado??
Cualquier ayuda la agradeceré enormemente!
Un saludo!