Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Utilizar una variable para acceder a diferentes controles (https://www.clubdelphi.com/foros/showthread.php?t=73805)

darkerbyte 17-05-2011 23:14:28

Utilizar una variable para acceder a diferentes controles
 
Hola Amigos:

Una vez mas tengo una duda inquientante que merma mi existencia. Tengo 4 Forms, cada una tiene un reporte QuickReport. Los reportes son exactamente iguales en contenido, incluso los controles y bandas tienen el mismo nombre, solo que el diseño es diferente. Lo no quisiera es hacer un proceso para llenar cada Reporte segun el usuario decide que plantilla usar.

Lo que quiero saber es si hay algun modo de crear un procedimiento al que le indique con cual de los 4 reportes ( Form1.QR, Form2.Qr...) deseo trabajar y sobre ese que valla rellenando los datos.

Una vez mas, Gracias por su valiosa ayuda, que Embarcadero los bendiga con algunas licencias gratuitas XD

Pedro-Juan 18-05-2011 00:27:29

No te sería más fácil poner los 4 QuickReport en un sólo form aunque tengas que cambiarle el nombre a las bandas y demás?

Luego hacer algo así:

Código Delphi [-]
//...
if (variable = 1) then QuickReport1.Print;
if (variable = 2) then QuickReport2.Print;
//...

Espero haberte dado una idea.

Un saludo.

Neftali [Germán.Estévez] 18-05-2011 09:58:21

Cita:

Empezado por darkerbyte (Mensaje 400359)
Lo que quiero saber es si hay algun modo de crear un procedimiento al que le indique con cual de los 4 reportes ( Form1.QR, Form2.Qr...) deseo trabajar y sobre ese que valla rellenando los datos.

No se tal vez no entiendo la pregunta, pero qué problema hay en hacer...

Código Delphi [-]
procedure RellenarRep(AQR:TQuickRept);
begin
  ....

  AQR.Print;
end;

// llamadas...

RellenarRep(QuickReport1);
RellenarRep(QuickReport2);
...

darkerbyte 18-05-2011 17:07:01

Viejo truco me sorprendió
 
Cita:

Empezado por Neftali (Mensaje 400415)
No se tal vez no entiendo la pregunta, pero qué problema hay en hacer...

Código Delphi [-]
procedure RellenarRep(AQR:TQuickRept);
begin
  ....

  AQR.Print;
end;

// llamadas...

RellenarRep(QuickReport1);
RellenarRep(QuickReport2);
...

Bueno, los tutoriales que lei sobre QR decía expresamente que se debe colocar cada QR en un Form separado. Mmm.... creo que debo atreverme a romper algunas reglas.

Y bueno, Nuevamente me soprendiste Neftali. Esto es lo que deseo, ahora voy a poner los 4 Reportes en el mismo Form e intentaré implementar el procedimiento como muestras aqui.

Y perdón si no me expliqué correctamente. El punto es este, Tengo 4 reportes que me imprimen una nota de venta, los datos son los mismos, inclusive los campos, labels, memos, etc. son los mismos, lo que varía es el diseño (por ejemplo uno es para impresoras laser y de inyección, el otro es para impresoras de matriz como la vieja Epson LX-300). El usuario podrá elegir cual diseño utilizar. Lo que no quiero es hacer 4 procedimientos iguales para rellenar cada reporte. Sino con un solo procedimiento rellenar cualquiera de los 4 ya que son lo mismo

Caro 18-05-2011 19:58:18

Cita:

Empezado por darkerbyte (Mensaje 400478)
...............los datos son los mismos, inclusive los campos, labels, memos, etc. son los mismos, ................Lo que no quiero es hacer 4 procedimientos iguales para rellenar cada reporte. Sino con un solo procedimiento rellenar cualquiera de los 4 ya que son lo mismo

Hola darkerbyte, puedes utilizar la función FindComponent del formulario donde esta tu reporte, por lo que explicas y haciendolo con FindComponent ya no te conviene que esten todos tus reportes juntos, ya que cada Label,...., tendría un nombre diferente. Te pongo un ejemplo:

Código Delphi [-]
procedure RellenarRep(formulario:TForm;Reporte:String);
var
 QrLabel1 : TQRLabel;
 AQR : TQuickRep;
begin
 AQR := TQuickRep(formulario.FindComponent(Reporte));
 if Assigned(AQR) then
  begin
   QrLabel1 := TQRLabel(formulario.FindComponent('QRLabel1'));
    ........................................   
   if Assigned(QrLabel1) then
    QrLabel1.Caption := 'algo';
   .........................................
   .........................................
   AQR.Preview;
  end;
end;

//lamada
RellenarRep(FormReporte1, 'QuickRep1');

Saluditos

darkerbyte 23-05-2011 18:36:29

Bingo!
 
Hola Caro.

Muchas gracias por tu respuesta, definitivamente a eso queria llegar :) le diste al clavo :D


La franja horaria es GMT +2. Ahora son las 11:28:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi