Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Informe de QuickReport en Ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=38941)

rosodo1 05-01-2007 02:49:27

Informe de QuickReport en Ejecucion
 
Estoy creando un informe de QuickReport 3.0.9 en Ejecucion en el cual voy introduciendo los campos que me convienen en cada momento con TQRDBText en un TQRBand-Detail y el titulo del campo con un TQRLabel en un TQRBand-Column Header . El problema es que solo veo el titulo del informe pero no aparecen ni los titulos de los campos ni el contenido.

El codigo seria algo asi:
begin
columnas := Grid.Columns.Count;
SetLength(Etiquetas, columnas);
SetLength(Campos, columnas);
For ite := 0 to columnas - 1 do
begin
Etiquetas[ite] := TQRLabel.Create(Q2Cap);
Campos[ite] := TQRDBText.Create(Q2Detalle);
//Etiquetas
Etiquetas[ite] := QRLabel1;
Etiquetas[ite].Caption := Grid.Columns[ite].Title.Caption;
Etiquetas[ite].Width := Grid.Columns[ite].Field.DataSize;
//Etiquetas[ite].Top := QRLabel1.Top;
Etiquetas[ite].Transparent := false;
//Etiquetas[ite].Enabled := True;
//Etiquetas[ite].Frame := QRLabel1.Frame;
//Etiquetas[ite].Height := QRLabel1.Height;
//Etiquetas[ite].Font := QRLabel1.Font;
//Etiquetas[ite].Size := QRLabel1.Size;
If ite > 0 then
Etiquetas[ite].Left := Etiquetas[ite-1].Left + Etiquetas[ite-1].Width + 20
else
Etiquetas[ite].Left := 0;
//Campos
Campos[ite] := QRDBText1;
Campos[ite].DataSet := DM.QInforme;
Campos[ite].DataField := DM.QInforme.FieldList.Fields[ite].FieldName;
Campos[ite].Width := Etiquetas[ite].Width;
//Campos[ite].Top := 0;
Campos[ite].Left := Etiquetas[ite].Left;
Campos[ite].Visible := true;
Campos[ite].Transparent := False;
end;
DM.QInforme.Active:=True;
end;


¿Sabeis que falta o donde esta el error?

Gracias

AzidRain 05-01-2007 03:41:57

¿Esta Abierto el dataset?? Si es un query, ¿Devuelve algo? Lo que te sale es debido a que el dataset no contiene nada..

Lepe 05-01-2007 09:28:39

Veo 2 errores:
Código Delphi [-]
Etiquetas[ite] := TQRLabel.Create(Q2Cap);
Campos[ite] := TQRDBText.Create(Q2Detalle);
//Etiquetas
Etiquetas[ite] := QRLabel1;

O sea, primero en etiquetas[ite] creas un qrlabel, y después dices etiquetas[ite]:= qrlabel1... pues te acabas de cargar la etiqueta que creaste antes. Bueno en realidad no, la etiqueta que creaste al principio, se quedará en memoria, pero no podrás acceder a ella para asignarle las propiedades.

cuando a continuación haces:
Código Delphi [-]
Etiquetas[ite].Caption := Grid.Columns[ite].Title.Caption;
Etiquetas[ite].Width := Grid.Columns[ite].Field.DataSize;
realmente estas cambiando las propiedades al QRLabel1 no al que creaste anteriormente!!!.

Por otra parte no veo que asignes el Parent de los controles que creas en ejecución, así que no aparecen jamás en la banda detalle.

Busca por el foro, hay mucho código sobre eso.

Saludos

rosodo1 05-01-2007 13:54:37

Gracias por las rapidas respuestas. Aunque os comento:

El dataset esta abierto y contiene varios registros. Lo visualizo antes en un DBGrid.

Código Delphi [-]
Etiquetas[ite] := TQRLabel.Create(Q2Cap);
Campos[ite] := TQRDBText.Create(Q2Detalle);
//Etiquetas
Etiquetas[ite] := QRLabel1;

Tienes razon, pero fue la ultima prueba que hice, realmente el codigo era sin la ultima linea, pero probe eso simplemente para comprobar que al menos visualizaba algo en ese QRLabel ya creado en vista diseño.
En cuanto al parent, ¿No se lo estoy asignando en el create?
TQRLabel.Create(Q2Cap)Mirare en los foros aunque la verdad es que no encontre nada que me ayudara.

Gracias de nuevo.

Lepe 05-01-2007 20:32:37

No. Lo que asignas es el AOwner (quien destruirá el componente), pero no dices donde se ha de situar ese qrLabel (sobre el Quickreport, sobre la banda cabecera, sobre la banda detalle....).

Código Delphi [-]
Etiquetas[ite] := TQRLabel.Create(Q2Cap);
Etiquetas[ite].Parent := banda detalle

Saludos

rosodo1 05-01-2007 22:01:45

:o Jojo, ahora si. Que burro. Convencido que era el parent lo que le asignaba en el creador. Perfecto, millones de gracias a todos.

Seguimos por aqui.

fjcg02 08-01-2007 23:33:21

1 Archivos Adjunto(s)
Te paso un código que escribí con inestimable colaboración del foro.

Genera cualquier reporte con la llamada a la función generarlistado. El origen de los datos es una query , cualquiera.
Para utilizarlo, descomprime los archivos y añadelos a tu proyecto. Desde donde quieras imprimir llama a la función con los parametros requeridos.

Espero que te sea de ayuda.

Un saludo

rosodo1 09-01-2007 02:03:50

Ok, probare tu solucion aunque ya me funciona. Gracias.


La franja horaria es GMT +2. Ahora son las 13:54:11.

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