PDA

Ver la Versión Completa : Imprimir RichEdit justificado en QReport


Inral
07-05-2003, 09:58:34
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
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
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
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:



//------------------------------------------------------
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

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
_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.

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;