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 

Usar TPrinter

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Usar TPrinter Responder citando

Estoy usando el código de vizca321 para sacar la lista de impresoras conectadas a un sistema. Me está ocurriendo una cosa muy curiosa.

Si pongo ese código en un formulario nuevo limpio se compila sin dar ningún error; si lo pongo en un formulario que tienbe otro código, por ejemplo:
Código:
Query->Close();
Query->SQL->Text = "INSERT INTO '" + AnsiString(cTablas) + "\\Instalacion.db' (Etiqueta, Valor, Literal) VALUES (:Etiqueta, :Valor, :Literal)";
Query->ParamByName("Etiqueta")->AsString = "Situacion";
Query->ParamByName("Valor")->AsInteger   = 99;
Query->ParamByName("Literal")->AsString  = "Baja";
try
{
     Query->ExecSQL();
}
catch(...)
{
     return false;
}
TPrinter *imp = Printer();

me da un error E2314 Call of nonfunction en la línea del TPrinter, y según la ayuda:
Cita:
El nombre que se llama no se declara como una función.
Esto es comúnmente causado porque se declara la función de forma incorrecta o una falta de ortografía del nombre de la función.

He probado poniendo el include <Printers.hpp>, pero da lo mismo.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

En vez de poner:

TPrinter *imp = Printer();

No deberías poner?

TPrinter *imp = new TPrinter();

Yo tengo una sentencia parecida y me funciona correctamente:

TPrinter *Printer = new TPrinter();

Un saludo.

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

No. Eso pensaba yo, pero no es así. Me lo han resuelto en otro foro; es tan tonto como usar DIRECTAMENTE la clase. Por ejemplo:
Código:
#include <printers.hpp>

void __fastcall TForm1::FormCreate(TObject *Sender)
{
     ComboBox1->Items->Assign(Printer()->Printers);
     ...
}

Aunque he comprobado que sin el include también funciona. ¡Misterios de la programación! Laughing

De paso también he resuelto el problema de asignar la impresora por la que que queremos que salga el informe, con ese mismo TComboBox del ejemplo:
Primero cargo el ComboBox (tiene que tener la propiedad Soted a false) y hago que muestre la impresora por defecto del equipo:
Código:
ComboBox1->Items->Clear();
ComboBox1->Items->Assign(Printer()->Printers);
ComboBox1->ItemIndex = Printer()->PrinterIndex;

Queda una cosa así:

Y luego hago así la asignación.
Código:
QuickRep1->PrinterSettings->PrinterIndex = ComboBox1->ItemIndex;
QuickRep1->Prepare();
QuickRep1->Print();
Printer()->PrinterIndex = PrinterDefault;

Cambio la impresora según la selección y restauro el valor por defecto. Lo que hago es declarar una variable al principio del programa (PrinterDefault) en la que guardo el valor de la impresora por defecto:
Código:
int PrinterDefault;

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
     try
     {
          Application->Initialize();
          Application->Title = cVersion;
          PrinterDefault = Printer()->PrinterIndex;
          Application->CreateForm(__classid(TForm1), &Form1);
          Application->Run();
     }
     catch (Exception &exception)
     {
          Application->ShowException(&exception);
     }
}

He estado probando y hasta donde he llegado me funciona bien en Builder 6.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Estupendo Angel,

Lo importante es que ya ha quedado solucionado.

Un abrazo.

Carlos
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
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.