JUSTIFICAR EL TEXTO DE UN MEMO, LISTBOX, ETC - .: .: Saiyine :. :.

Justificar el texto de un memo, listbox, etc

Por Saiyine Enviar correo el 2006-02-21 20:07:00 - Secciones:  DELPHI  - Enlace permanente: 481

procedure Justifica(cadenas : tstrings; fuente : TFont; ancho : integer);
var
i : integer;
aux : string;
begin
  for i:=0 to cadenas.count-1 do
  while Distancia(LargoTexto(cadenas[i],fuente),ancho)>10 do
  begin
    aux:=cadenas[i];
    Insert(' ',aux,MenorEspacioEntrePalabras(aux));
    cadenas[i]:=aux;
  end;
end;

Este procedimiento se podria usar asi:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Justifica(ListBox1.Items,ListBox1.font,ListBox1.width);
end;

Y llama a las siguientes funciones:

function MenorEspacioEntrePalabras(cad : string) : integer;
var
menor,actual,i : integer;
enespacio : boolean;
begin
  actual:=0;
  menor:=50;
  result:=0;
  enespacio:=false;
  for i:=1 to length(cad) do
  begin
    if cad[i]=' ' then
    begin
      if enespacio
      then actual:=actual+1
      else
      begin
        enespacio:=true;
        actual:=1;
      end;
    end
    else
    if enespacio then
    begin
      enespacio:=false;
      if actual<menor then
      begin
        menor:=actual;
        result:=i-actual;
        actual:=0;
      end;
    end;
  end;
end;

function LargoTexto(texto : string; f : TFont) : integer;
var
aux : TFont;
begin
  aux:=Screen.ActiveForm.Canvas.font;
  Screen.ActiveForm.Canvas.font:=f;
  result:=Screen.ActiveForm.Canvas.textwidth(texto);
  Screen.ActiveForm.Canvas.font:=aux;
end;

function Distancia(a,b : integer) : integer;
begin
  result:=abs(a-b);
end;

Otras entradas de la web que podrian interesarte:

Gravatar 200
Banderita Alfredo (2006-02-20 18:28:00)

En el truco de Justificar el texto de un memo, listbox, etc; la línea:

if actual<menor then

me da un error, como puedo subsanarlo.

Un saludo y gracias

Avatar 203
Banderita Saiyine (2006-02-21 20:07:00)

Asegurate de que es realmente un simbolo de menor que (<) y no una etiqueta de html como '&lt;'.

Gravatar 206
Banderita Alfredo (2006-02-22 08:25:00)

En el truco de Justificar el texto de un memo, listbox, etc; la línea:
for i:=0 to cadenas.count-1 do
prueba a poner:
for i:=0 to cadenas.count-2 do
ya que la última línea no tienes porque justificarla, se supone que ya está justificada a la izquierda.

Un saludo y de nuevo gracias


Avatar 208
Banderita Saiyine (2006-02-22 23:10:00)

Tienes toda la razón, aunque te ha faltado un detalle para la matricula de honor: ¿y si el texto solo tiene una linea?

Entonces tendriamos un bucle que va desde cero hasta menos uno, es decir, un programa colgado. Necesitamos una comprobación previa al for, o quizás un condicional dentro del mismo bucle...

Nada, lo es mejor es comprobar la "sanidad" de la entrada antes de tocar el texto, y nos evitamos historias extrañas.

Gravatar 1588
Banderita ABGAME (2007-11-22 06:18:54)

Te felicito amigo, la implemente con muy buenos resultados. Gracias

Gravatar 1806
Banderita 49ers (2008-02-07 06:48:30)

Felicidades Saiyine funciona perfecto men..buen aporte 8)

Gravatar 2481
Banderita arturkaiser (2008-07-07 10:37:15)

Llevo una semana la manera de justificar un texto en quick report y tu código hace lo más cercano a lo que quiero, pero no es exacto el jutificado, de todas formas gracias, voya a ver si puedo mejorarlo.

Gravatar 3724
Banderita Lino (2009-09-10 05:03:10)

Hola que tal, prove tu rutina para justificar y esta muy bien
pero tengo un problema cuando la ejecuto y veo un preview me lo hace muy bien
pero al mandar a imprimir
me imprimne varias hojas y sin justificar
me podrias ayudar a resolver este problema
Gracias de antemano

Gravatar 5311
Banderita SUSY (2011-06-02 00:45:35)

Holaaa¡¡¡
Me sirvio mucho tu rutina, pero.. sabes, yo tengo que justificar el texto en el Power PDF, un objeto PRText, y no tiene la propiedad del Font, como tal.

Sabes como la puedo obtener...

Momentaneamente lo estoy haciendo pasando todo a un memo y que me regrese el texto con los espacios del justificado, y trato que la letra del memo y tel objeto que te menciono sean iguales, sabes como le puedo hacer??

Mil gracias

¡¡¡¡

Gravatar 5312
Banderita Saiyine (2011-06-02 01:11:56)

Prueba con la propiedad Align, con la que quizás puedas justificar el texto:

TPRText properties
property Align: TAlign;

Gravatar 5339
Banderita SUSY (2011-06-24 19:28:40)

Hola¡¡

Que cres ya lo cheque pero nada :( solo viene la propiedad AlignJustified, para PRLabel...

Sin gravatar 5706
Banderita Alvareto (2012-05-18 00:35:36)

Buenas,
Lino... el procedimiento:
Justifica(ListBox1.Items,ListBox1.font,ListBox1.width);

lo ubicas también en el BeforePrint o AfterPrint del QuickRep, para que mejore al momento de Imprimir.

espero q t funcione

o o o o 


Tu nombre (Nick):

Tu correo (Email):
  Necesario para tu gravatar!

Tu página (URL):

Escribe aqui tu comentario:

       :noworry: :roll: :huh: :push: :OO 8) 8O :( :) :? :D :P :o :x :| ;) ^^ xD



Vista previa activada.

Vista previa (6/6/6, 6:66)


Fondos de pantalla

. . .

dreamhost

Descargas

  • ApagaPC
    apagapc241.exe  (4488)
  • LimpiaDocus
    LimpiaDocus001.exe  (3792)
  • RCM
    rcm001.zip  (3200)
  • Popmail
    popmail-0.4-psmn.tar.gz  (3272)
  • Manual de Delphi en PDF
    delphi_pdf.zip  (3904)
  • Evangelio del Perl
    Evangelio_del_perl.pdf  (3983)
  • Excel Simpsons
    Excel Simpsons  (3914)
  • . . .

    Proyectos Online

  • Saiyine Store
  • Kunowalls!!!
  • Fondos de pantalla
  • Picaday: imagenes sexys o chocantes.
  • Scarlett: fotos de Scarlett Johansson
  • WhatsmyIP: obtener tu IP pública
  • Uma Thurman: galeria de Uma Thurman
  • FunPics: imagenes graciosas
  • . . .

    Blogs

  • Por lo que más querais, no entreis a estos: Tapanez, Yhandros, Onez.

  • Otros en español: El Mundo Today, La libreta de Van Gaal, Chavalina, Kirai, Mundo Geek, Microsiervos.

  • Mis lecturas en guiri: Michael Yon, Coding Horror, YCombinator news, MySQL Performance, Slashdot.

    . . .
  • Utilidades

  •  Coral  (1645), cacheando webs
  •  Spam.la  (1983), correo de usar y tirar
  •  Mailinator  (1887), correo de usar y tirar
  •  Bug me not  (1635), absurdos registros di NO
  •  Trashmail  (1692), correo de usar y tirar

    . . .

  • Página web ©2001-2011 Saiyine descargada en s, con 6094861 visitas en total, hoy (de un total de 0 previstas).

    . . .