| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 05 May, 2015 10:48 am Asunto: Usar TPrinter |
|
|
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 07 May, 2015 10:27 am Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 07 May, 2015 12:41 pm Asunto: |
|
|
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!
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Jue 07 May, 2015 1:02 pm Asunto: |
|
|
Estupendo Angel,
Lo importante es que ya ha quedado solucionado.
Un abrazo.
Carlos _________________ Carlos J. Fernandez |
|
| Volver arriba |
|
 |
|