PDA

Ver la Versión Completa : Acomodar QRLabels en tiempo de ejecucion


rex
02-10-2006, 23:44:46
Que tal, quiero imprimir las etiquetas de encabezado en tiempo de ejeción pero se me ha complicado. Tengo una tabla con los nombres de los campos y una longitud:

Etiqueta, Longitud
-------------------
Nombre , 10
Domicilio, 30
Telefono, 12

Entonces en mi reporte necesito que el encabezado sea:

Nombre Domicilio Telefono
---------------------------------------------------------
Ramon Conocido 111111111

Estoy tratando de manipular la posicion de las etiquetas con la propiedad Left, pero la siguiente etiqueta se encima.
O si hay alguna forma de saber el coordenada, o algo asi como el valor de rigth de donde termina la etiqueta para a partir de ahi comenzar la otra etiqueta.

jachguate
03-10-2006, 00:08:48
Manipulá también el width, asi evitarás el problema:


qrlNombre.Left := 10;
qrlNombre.Width := 50;
qrlDomicilio.Left := 70;
qrlDomicilio.Width := 50;
qrlTelefono.Left := 130;
qrlTelefono.Width := 30;


Por cierto... ¿es válido decir "se encima"?

Hasta luego.

;)

egostar
03-10-2006, 00:21:02
Manipulá también el width, asi evitarás el problema:


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
qrlNombre.Left := 10;
qrlNombre.Width := 50;
qrlDomicilio.Left := 70;
qrlDomicilio.Width := 50;
qrlTelefono.Left := 130;
qrlTelefono.Width := 30;





Por cierto... ¿es válido decir "se encima"?

Hasta luego.

;)


Pero también necesitas asignar False a la propiedad Autosize del QRLabel y el código que te mostró jachguate colócalo el evento OnPreview del QReport.

Saludos

rex
03-10-2006, 00:32:14
Ok gracias pero creo que no es la solucion. YO hago esto


espacio:0;
Tama:=0;
query:=Select NombreCampo, longitud from campos
open;
while not query.Eof do
begin
tama := query.fieldbyname('longitud').asinteger;
espacio:= espacio + tama;
with TQRlaBel.create(self) do
begin
name:= 'L' + query.fieldbyname('nombrecampo').asstring;
width:= query.fieldbyname('longitud').asinteger;
Left:= espacio;
....
....
query.next;
end;
end;


pero no me sirve cuando la longitud que me indica el campo no es muy adecuada, ademas la separacion de las etiquetas no me checa el width con el left. Lo que me ayudaria es saber en que posicion o coordenada quedo el lado derecho o la terminacion de la etiqueta (Qrlabel), para a partir de ese valor poner el left de la siguiente Qrlabel

egostar
03-10-2006, 00:37:59
No, lo que estas haciendo es incremetar por numero de caracteres, pero no es así, debes de conocer en pixeles el tamaño del campo que vas a mostrar y no el numero de caracteres.

Saludos

rex
03-10-2006, 01:03:13
Excato egostar, la estaba regando ya quedo solucionado Muchas gracias

Ade
07-10-2006, 20:12:15
como lo consigo existe alguna funcion??

Originalmente Escrito por egostar

No, lo que estas haciendo es incremetar por numero de caracteres, pero no es así, debes de conocer en pixeles el tamaño del campo que vas a mostrar y no el numero de caracteres.



Saludos y gracias

Lepe
07-10-2006, 21:38:09
Lo más simple es poner una fuente Courier New ya que el ancho de cada letra es el mismo.

Si se necesita más complejo, revisa la funcion FontWidth (http://www.clubdelphi.com/foros/showthread.php?t=21708&highlight=fontwidth)

Saludos

Ade
07-10-2006, 22:58:04
Lepe a que te refieres con

poner una fuente Courier New


a poner

Font.Name := 'Courier New';

al crear el qrlabel??
yo solo trato de crear QRDbtext y QRLabel en tiempo de ejecucion lo que pasa es que se solapan , solo se ve completo el ultimo qrlabel creado con
AutoSize := True;
mientras que si pongo AutoSize := False; ni el ultimo se ve entero

Lepe
08-10-2006, 00:02:22
Al poner la fuente como Courier New, todos los caracteres son igual de anchos, así que podemos usar algo como:

MaxLeft:0;
Tama:=0;
query:=Select NombreCampo, longitud from campos
open;
while not query.Eof do
begin
tama := query.fieldbyname('longitud').asinteger *10; // 10 pixels que tiene de ancho una letra
with TQRlaBel.create(self) do
begin
name:= 'L' + query.fieldbyname('nombrecampo').FieldName;//nombre del campo, tú tenías el valor del registro.
Font.Name := 'Courier New';
AutoSize:= False;
Left:= MaxLeft;
width:= tama;
....
....
MaxLeft:= MaxLeft + tama + 5; // 5 pixels de separacion entre 2 labels
query.next;
end;
end;


Suponiendo que un caracter son 10 pixeles de ancho, (es cuestion de hacer un par de pruebas para saber el ancho real).

Sabiendo lo anterior, ya podemos asignar los qrLabel.Left para que no se solapen unos con otros.

Saludos y suerte, que QuickReports es muy suyo ;).