PDA

Ver la Versión Completa : Supeposición de etiquetas cuando cambio la fuente en un QReport!


arieliten
24-04-2006, 03:50:05
Hola, estoy muy perdido :confused: y abatido de probar cosas pero no consigo dar en la tecla. El problema es que tengo un reporte donde el usuario imprime etiquetas de precio de un listado de productos.
El reporte es más bien sencilla ya que solo tengo imprime de una tabla Productos los campos de Nombre, adicional e importe!!
El usuario, antes de previsualizar o imprimir el reporte, puede elegir las fuentes con que saldrán sus etiquetas. Estos es: con un "FontDialog" le permito cambiar la propiedad "Font" de los 3 componentes "QRDBText" del QuickReport. Aquí es donde se despelota todo, ya que no encuentro la forma de hacer de que estos 3 componentes se sitúen correctamente, ya que si el usuario selecciona una letra muy grande, las etiquetas se sobreescriben una encima del otro y no se mueven acorde crece el tamaño de letra por ejemplo.
La verdad que ya he probado con las propiedades "AutoSize", "AutoStretch" y hasta colocando una "ChildBand" como leí por ahí pero NO HE LOGRADO HACERLO!! :(
Me podrían dar una ayuda u orientarme a una mejor manera de hacer esto que en un principio me parecía muy sencillo y que ya me ha quitado el sueño:(
El reporte debería ser algo similar a esto:

Producto 1
Mini descripcion Producto 1
$ Precio Producto 1
----------------------------
Producto 2
Mini descripcion Producto 2
$ Precio Producto 2
---------------------------
.....
.....
Y así sucesivamente por cada producto del dataset.

Parece muy sencillo, pero si al cambiar la propiedad "Font" de la etiqueta que muestra el Nombre del producto por ejemplo, elegimos una fuente grande, la descripcion y/o el precio no se verán :(

Bueno, espero haberme explicado bien y que me puedan ayudar en esta difícil tarea que estoy metido.
Desde ya muchas gracias y saludos.

Ariel

Lepe
24-04-2006, 11:22:42
¿Por qué no usas un qrDBMemo?

Usas la propiedad Dataset para indicar de donde vienen los datos.

En su interior pones:

Producto : {FieldProducto}
Descripción: {FieldDescripcion}
Precio: {FieldPrecio}


Lo que va entre llaves lo interpreta como nombres de campos del Dataset al que está asociado. El resto, es texto que se imprime tal y como aparece. Si un texto no cabe en una linea, automáticamente "empuja" el texto hacia abajo.

Creo que puedes ponerle Autosize y AutoStrech al Memo para que crezca/decrezca automáticamente.

Saludos

arieliten
24-04-2006, 17:39:55
¿Por qué no usas un qrDBMemo?

Usas la propiedad Dataset para indicar de donde vienen los datos.

En su interior pones:

Producto : {FieldProducto}
Descripción: {FieldDescripcion}
Precio: {FieldPrecio}

Lo que va entre llaves lo interpreta como nombres de campos del Dataset al que está asociado. El resto, es texto que se imprime tal y como aparece. Si un texto no cabe en una linea, automáticamente "empuja" el texto hacia abajo.

Creo que puedes ponerle Autosize y AutoStrech al Memo para que crezca/decrezca automáticamente.

Saludos

Hola, primero que nada, uso Delphi 7 y aunque instalé la paleta de QReport, no veo el componente QRDBMemo :confused:
Segundo, creo que el problema lo voy a seguir teniendo, ya que yo podría cambiar la propiedad "Font" pero de TODO el QRDBMemo y lo que yo necesito es asignar distintos "Fonts" a cada rengón! ¿Me explico?
Gracias de todas formas.

Lepe
25-04-2006, 11:11:51
unit LpFont;

interface

uses Graphics,sysutils, types,windows;


function FontHeight(const Fuente:TFont;const Texto:string):Integer;
function FontWidth(const Fuente:TFont;const Texto:string):Integer;

implementation

uses shellapi;


function FontWidth(const Fuente:TFont;const Texto:string):Integer;
var c:TCanvas;
begin
try
c:= TCanvas.Create;
c.Handle := GetDC(0);

c.Font.Assign(Fuente);
Result := c.TextWidth(Texto);
finally
FreeAndNil(c);
end;
end;

function FontHeight(const Fuente:TFont;const Texto:string):Integer;
var c:TCanvas;
begin
try
c:= TCanvas.Create;
c.Handle := GetDC(0);

c.Font.Assign(Fuente);
Result := c.TextHeight(Texto);
finally
FreeAndNil(c);
end;
end;

asignas el tamaño a los qrlabels y despues llamas a estas funciones para ver cuanto ocupan, así le das el tamaño.

QRLABEL4.Font.Size := 23;
QRLABEL4.Height := lpfont.FontHeight(QRLabel4.Font,qrlabel4.caption);

Puede que haya otra forma más fácil, pero no la he probado, esta forma la tenía más a mano ;).

Saludos

arieliten
26-04-2006, 01:08:50
Gracias por tu ayuda Lepe. Estoy intentando probarla y no sé ni siquiera dónde coloco el código que me pasastes y cómo lo aplico a mi ejemplo. Si puedieras darme una manito más te lo agradecería.
Primero que nada, la unit lpconstantes no la tengo y me da error. Cuando la saco, me compila bien pero no sé donde llamar o cómo usar las funciones que defines. ¿Qué es "lpfont" que usas en el ejemplo de uso de la función?
Muchas gracias por tu tiempo.
Ariel

Lepe
26-04-2006, 08:35:42
lpFont.pas es la unidad donde tengo esas rutinas, puedes borrarlo con tranquilidad.

lpconstantes, es una unidad donde tengo definidas mis constantes, tampoco hacen falta.

Ambos fueron errores de copiar y pegar ;).

Añade esas rutinas a una unidad nueva, y despues incluyela en el "uses" de tu ventana para poder usarla.

Acabo de editar el mensaje anterior para añadir las 2 primeras líneas.

Saludos

arieliten
26-04-2006, 14:40:38
Ok, muchas gracias Lepe. Estoy probando y al parecer me puede ser útil. Voy a seguir "jugando" un poco con estas rutinas a ver qué sale.
Gracias por tu tiempo nuevamente.

Ariel