Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-10-2006
rex rex is offline
Miembro
 
Registrado: dic 2003
Posts: 81
Poder: 21
rex Va por buen camino
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.

Última edición por rex fecha: 03-10-2006 a las 00:21:57.
Responder Con Cita
  #2  
Antiguo 03-10-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 03-10-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
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
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #4  
Antiguo 03-10-2006
rex rex is offline
Miembro
 
Registrado: dic 2003
Posts: 81
Poder: 21
rex Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 03-10-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
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
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 03-10-2006
rex rex is offline
Miembro
 
Registrado: dic 2003
Posts: 81
Poder: 21
rex Va por buen camino
Excato egostar, la estaba regando ya quedo solucionado Muchas gracias
Responder Con Cita
  #7  
Antiguo 07-10-2006
Ade Ade is offline
Miembro
 
Registrado: jul 2006
Ubicación: Murcia
Posts: 70
Poder: 18
Ade Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 07-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 07-10-2006 a las 21:40:43.
Responder Con Cita
  #9  
Antiguo 07-10-2006
Ade Ade is offline
Miembro
 
Registrado: jul 2006
Ubicación: Murcia
Posts: 70
Poder: 18
Ade Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 08-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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 .
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Tabla en tiempo de ejecucion noshy SQL 1 24-07-2006 00:39:31
Combo box en tiempo de ejecucion rocio84 OOP 1 08-07-2006 18:27:09
Diseño en tiempo de ejecucion Nelson Alberto Impresión 2 26-01-2006 09:34:12
Como Ocultar Qrlabels hebert ordonez Impresión 3 11-09-2004 06:17:58
Tiempo de ejecucion? st7 Varios 3 11-05-2004 22:03:28


La franja horaria es GMT +2. Ahora son las 21:05:20.


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
Copyright 1996-2007 Club Delphi