PDA

Ver la Versión Completa : Problema al imprimir (se queda en la cola)


aguml
15-12-2014, 18:57:57
Ahora estoy liado con otra cosa, Hago esto para imprimir los trozos de imagen y funciona a medias. Si Elijo la impresora de NitroPDF sale la ventanita chica que dice Printing y que trae el ProgressBar y se rellena rapidamente y aparece el icono de impresora en la barra de tareas pero no veo que pase nada. Si lo hago con la impresora fisica si funciona.
Este es el codigo:

void __fastcall TForm1::ButtonPrintImagesClick(TObject *Sender)
{
TInfoPapel info;

if(PrintDialog1->Execute())
{
info = ObtenerTamPapel();
if(info.orientacion == 1) //Si la orientacion es vertical seguimos adelante
{
switch (info.tamPapel)
{
case DMPAPER_A5:
Form2->VividReport1->PaperSize = A5;
Form2->ShowModal();
break;

case DMPAPER_A4:
Form2->VividReport1->PaperSize = A4;
Form2->ShowModal();
break;

case DMPAPER_A3:
Form2->VividReport1->PaperSize = A3;
Form2->ShowModal();
break;

default:
MessageBox(Application->Handle, "El tamaño del papel seleccionado no es válido. Usa A5, A4, o A3", "Error", MB_OK |MB_ICONERROR | MB_APPLMODAL);
}
}else
{ //Si la orientacion del papel no es vertical no seguimos y avisamos de que no se puede usar otra
MessageBox(Handle, "No se puede elegir la orientación de papel horizontal.\nEsta aplicación solo funciona con orientación vertical." , "Error", MB_OK |MB_ICONERROR | MB_APPLMODAL);
}
}
}
//---------------------------------------------------------------------------

TInfoPapel ObtenerTamPapel(void)
{
char MyPrinter[100];
char MyDriver[100];
char MyPort[100];
THandle hDevMode;
PDEVMODE pDevMode;
TInfoPapel infoPapel;

Printer()->GetPrinter(MyPrinter, MyDriver, MyPort, hDevMode);

if(hDevMode){
pDevMode = (PDEVMODE)GlobalLock((void*)hDevMode);
if(pDevMode){
//El tamaño del papel debe ser para A4 DMPAPER_A4 o para A3 DMPAPER_A3
//La orientacion vertical es 1 y la horizontal 2
infoPapel.tamPapel = pDevMode->dmPaperSize;
infoPapel.orientacion = pDevMode->dmOrientation;
GlobalUnlock((void*)hDevMode);
}
//GlobalFree((void*)hDevMode);
}
return infoPapel;
}
//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtnImprimirClick(TObject *Sender)
{
VividReport1->Print();
}

¿alguna idea de que puede estar pasando?

aguml
15-12-2014, 22:00:11
perdon, no sabia que existia un apartado para impresion. Gracias por moverlo.

aguml
19-12-2014, 14:08:17
Al final lo he podido solucionar.
Despues de mucho buscar he podido dar con el problema y es que VividReport tiene su propio dialogo de configuracion de impresora y no usa el que trae Builder, o sea, hay que hacer VividReport1->PrinterSetup() y así nos muestra su propio PrintDialog que es identico en aspecto.