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 20-01-2004
fabian_hr fabian_hr is offline
Registrado
 
Registrado: dic 2003
Ubicación: Toluca, Mexico
Posts: 5
Poder: 0
fabian_hr Va por buen camino
Question Justificar Texto

Alguien sabe como justuficar texto en QReport? (me refiero a justificar a ambos lados), o algun metodo para justificar texto para impreciones no necesariamente con QReport

Muchas gracias de antemano
Responder Con Cita
  #2  
Antiguo 20-01-2004
Avatar de SnaKe
SnaKe SnaKe is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid (España)
Posts: 227
Poder: 22
SnaKe Va por buen camino
Pues me temo informarte que con QuickReport no tienes tal posibilidad, únicamente puedes justificar por la izquierda, por la derecha o centrado... tampoco se de ningún componente que lo haga así que mucho me temo que lo vas a tener dificil.

Como alternativa tienes FastReport o ReportBuilder que si que lo hacen (pero estos productos no son gratuitos). La versión Free de FastReport (FreeReport) creo recordar que tampoco lo hacía. Tampoco conozco Rave y por tanto no se decirte si tienes tal posibilidad.

Un saludo.
__________________
Todos somos aficionados. La vida es tan corta que no da para más.
Guia de Estilos
Responder Con Cita
  #3  
Antiguo 20-01-2004
fabian_hr fabian_hr is offline
Registrado
 
Registrado: dic 2003
Ubicación: Toluca, Mexico
Posts: 5
Poder: 0
fabian_hr Va por buen camino
Gracias

Gracias de todas maneras

Voy a intentar mandar el texto por impresion mediante el SERVER de Word, espero se pueda, ya mande la impresion y el texto, falta solamente la parte de justificar. En cuanto termine, lo publicare aqui por si a alguien le intereza. No es muy elegante la solucion, ya que necesito de word, pero casi todas las maquinas ya lo tienen instalado, pero funciona, de todas maneras si alguien conoce una forma ya sea con APIs o algo parecido, sera bien aceptada.
Responder Con Cita
  #4  
Antiguo 30-01-2004
fabian_hr fabian_hr is offline
Registrado
 
Registrado: dic 2003
Ubicación: Toluca, Mexico
Posts: 5
Poder: 0
fabian_hr Va por buen camino
Justificar texto en Printer

Esta un poco largo el codigo, pero funciona correctamente para mandar a imprimir parrafos.
La funcion regresa el lugar donde se quedo la impresión anterio (altura) para poder mandar el siguiente parrafo a imprimir y corrige el problema de el redondeo a Integer.

Saludos a todos, espero les sirva este codigo, q la verdad da mucha flojera pensar en hacerlo y validarlo y despues de unas 30 pruebas queda.

Si alguien tiene un mejor método, por supuesto q lo acepto

Function TFrmImp.Justifica(Const x0, xf, y0: Integer; Const Txt: String): Integer;
// x0, xf = posicion de los margenes izquierdo y derecho
// y0 = posicion vertical donde se desea empezar a escribir
// txt = texto a escribir
// y regresa la ultima posición yf para mandar el siguiente parrafo
Var
i, x, y, K, Ancho, Letra, Remanente: Integer;
s, ss: String;
x_spc: Double;
Begin
s:= Txt; y:= y0; Ancho:= (xf - x0);

while s <> '' do begin
// Obtener el renglon, de acuerdo al ancho y quitarlo de la cadena original
ss:= ''; i:=0;

While (Printer.Canvas.TextWidth(Copy(s,1,i))<=Ancho) AND (i<=Length(s)) do
i:=i+1;
ss:=Copy(s,1,i);

// Retroceder hasta el primer espacio del hacia la izquierda de
// la ss, para separar por palabra en caso de ser existir mas renglones
if ss<>s then begin
i:=Length(ss);
While (Copy(ss,i,1)<>' ') AND (i>=1) do
i:=i-1;
// Eliminar espacio sobrantes
if i=0 then i:=Length(ss);
end;
ss:=TrimRight(Copy(s,1,i));
s:=TrimLeft(Copy(s,i+1,Length(s)-i));

x_spc:= 0;
x:= x0;
If (Length(ss) > 1) And (s <> '') Then
x_spc:=Printer.Canvas.TextWidth(ss);

if (x_spc=Ancho) OR (x_spc=0) OR (s='') Then
Printer.Canvas.TextOut(x,y,ss)
else begin
// Primer for para obtener el remanente por redondeo
for k:=1 to Length(ss) do begin
Letra:=Printer.Canvas.TextWidth('*' + ss[k] + '*') - Printer.Canvas.TextWidth('**');
if k<>Length(ss) then
x:=x + Trunc(Letra*Ancho/x_spc)
else
x:=x + Letra;
end;
Remanente:=xf-x;

x:= x0;
// Segundo for imprime con el remanente aplicado a las primeras letras
for k:=1 to Length(ss) do begin
Printer.Canvas.TextOut(x,y, ss[k]);
Letra:=Printer.Canvas.TextWidth('*' + ss[k] + '*') - Printer.Canvas.TextWidth('**');
if Remanente>0 then begin
x:=x + Trunc(Letra*Ancho/x_spc)+1;
Remanente:=Remanente-1;
end else
x:=x + Trunc(Letra*Ancho/x_spc);
end;
End;

y:= y + Printer.Canvas.TextHeight(ss);

End;
Justifica:=y;
End;
Responder Con Cita
  #5  
Antiguo 22-06-2004
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 318
Poder: 21
fredo Va por buen camino
Asi si se puede

Usa Rave report, los componentes tienen la propiedad Block que justifica como quieres.

Saludos.
__________________
^_^

http://stna.cl
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


La franja horaria es GMT +2. Ahora son las 01:27:50.


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