Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Acomodar QRLabels en tiempo de ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=36120)

rex 02-10-2006 23:44:46

Acomodar QRLabels en tiempo de ejecucion
 
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:

Código Delphi [-]
  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

Cita:

Empezado por jachguate
Manipulá también el width, asi evitarás el problema:


Código Delphi [-]
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

Código Delphi [-]
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

conocer en pixeles el tamaño del campo ???
 
como lo consigo existe alguna funcion??
Cita:

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

Saludos

Ade 07-10-2006 22:58:04

Lepe a que te refieres con
Cita:

poner una fuente Courier New
a poner
Código Delphi [-]
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:
Código Delphi [-]
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 ;).


La franja horaria es GMT +2. Ahora son las 16:01:07.

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