Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Imprimir RichEdit justificado en QReport (https://www.clubdelphi.com/foros/showthread.php?t=162)

Inral 07-05-2003 09:58:34

Imprimir RichEdit justificado en QReport
 
Hola,

Necesito insertar un RichEdit en un informe de QuickReport pero que el contenido se imprima justificado a derecha e izquierda.

Si fuese necesario usar algun componente u otro motor de reportes no me importaría.

Gracias de antemano

SnaKe 07-05-2003 10:03:05

Hola,

Eso es imposible y no conozco ningún componente que lo haga, el formato RTF no admite la justificación completa (izquierda y derecha). Una posible solución sería que utilizases un tipo de letra en el RichEdit no proporcional (Tipo Courier), esto es, que todas las letras tienen el mismo ancho en pixeles y mediante programación añadir espacios en blanco entre las palabras para que todas las lineas tengan el mismo número de caracteres.

Otra opción sería utilizar FastReport que si que admite la justificación completa (no recuerdo si en controles RichText pero si en texto normal).

Un saludo.

José Luis Garcí 07-05-2003 11:31:00

Lo que yo he llegado a usar es una función que justifica el texto

Prueba en esta misma Web


http://www.Clubdelphi.com/saiyine/BCDelphi/bctodo.html

Si no funciona mandame un email y te la mandare.


Un saludo desde Canarias

CarlosHernandez 18-09-2007 18:08:48

hola, lei este post, y de verdad me interesa como justificar en quick report, y la pagina que colocaste no funciona, podrias volver a poner un link donde si se vea o me puedes explicar por favor, gracias........

ingel 09-11-2009 17:32:12

Hola... alguien a encontrado alguna solucion a este problema ?
 
Necesitaria jutificar el TQRMemo o el de Richedit que tambien podria usar ..
o algun otro componente que Justifique el texto ...
sds
GRACIAS

rgstuamigo 13-11-2009 16:16:28

Cita:

Empezado por ingel (Mensaje 345994)
Necesitaria jutificar el TQRMemo o el de Richedit que tambien podria usar ..
o algun otro componente que Justifique el texto ...
sds
GRACIAS

Pues aunque el hilo es muy viejo; creo que puedes usar un QRRichText y modificar a tu antojo la propiedad Alignment (alinear ala izquierda, derecha o centro);).
Saludos...;)

ingel 13-11-2009 16:23:59

gracias ... peeero
 
esta propiedad que mencionas no JUSTIFICA el texto .. solo lo centra en el mejor de los casos .. pero los 'bordes' o margenes quedan desparejos....
Estoy desarrollando una funcion que parece que funciona bastante bien ..
cuando la finalice la subire con gusto ...
SDs

José Luis Garcí 13-11-2009 16:48:54

_Hola Compañeros aqui os dejo unos procedure que justifican en un Richedit, espero que te valga, lo baje de la red de donde ??:confused:


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

// AllText : True=todo o texto; False=parágrafo atual
procedure JustifyRichEdit(RichEdit :TRichEdit; AllText :Boolean);
const
  TO_ADVANCEDTYPOGRAPHY   = $1;
  EM_SETTYPOGRAPHYOPTIONS = (WM_USER + 202);
  EM_GETTYPOGRAPHYOPTIONS = (WM_USER + 203);
var
  ParaFormat :TParaFormat;
  SelStart,
  SelLength :Integer;
begin
  ParaFormat.cbSize := SizeOf(ParaFormat);
  if SendMessage(RichEdit.handle,
              EM_SETTYPOGRAPHYOPTIONS,
              TO_ADVANCEDTYPOGRAPHY,
              TO_ADVANCEDTYPOGRAPHY) = 1 then
  begin
    SelStart := RichEdit.SelStart;
    SelLength := RichEdit.SelLength;
    if AllText then
      RichEdit.SelectAll;
    ParaFormat.dwMask := PFM_ALIGNMENT;
    ParaFormat.wAlignment := PFA_JUSTIFY;
    SendMessage(RichEdit.handle, EM_SETPARAFORMAT, 0, LongInt(@ParaFormat));
// Restaura seleção caso tenhamos mudado para All
    RichEdit.SelStart := SelStart;
    RichEdit.SelLength := SelLength;
  end;
end;


Modo de uso

Código Delphi [-]
Justifica(redtrededitcion.Lines,redtrededitcion.Font,redtrededitcion.Width);




 if Length(redtrededitcion.selText)>0 then JustifyRichEdit(redtrededitcion,FAlse)
                                        else JustifyRichEdit(redtrededitcion,True);

rgstuamigo 13-11-2009 16:55:31

Cita:

Empezado por José Luis Garcí (Mensaje 346544)
_Hola Compañeros aqui os dejo unos procedure que justifican en un Richedit, espero que te valga, lo baje de la red de donde ??:confused:

...

Buen aporte Jose Luis.:eek:;)
Saludos...:)

ingabraham 09-12-2015 16:18:38

pense que era complicado. pero es tan fácil como esto.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin

with RichEdit1 do
begin
//SelectAll;
   Paragraph.Alignment:=taLeftJustify;
   SelStart:=0;
   SelLength:=0;
end;
 RichEdit1.Lines.Add('mensaje izq');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

with RichEdit1 do
begin
//SelectAll;
   Paragraph.Alignment:=taRightJustify;
   SelStart:=0;
   SelLength:=0;
end;
 RichEdit1.Lines.Add('mensaje der');
end;


La franja horaria es GMT +2. Ahora son las 11:50:47.

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