Essa é uma versão simplificada para justificar texto em tela ou em impressão no Quick  Use essa função abaixo passando True para o windows entender que voce quer justificar texto, e false para justificar os paragrafos envolvidos no texto selecionado ou o parágrafo em que se encontra o cursor.  procedure JustificaRichEdit(RichEdit: TRichEdit; Aplicar: Boolean = False); const   TO_ADVANCEDTYPOGRAPHY   = $1;   EM_SETTYPOGRAPHYOPTIONS = (WM_USER + 202);   // EM_GETTYPOGRAPHYOPTIONS = (WM_USER + 203); var   ParaFormat: TParaFormat; begin // Danilo, 10/2010   SendMessage(RichEdit.handle, EM_SETTYPOGRAPHYOPTIONS,               TO_ADVANCEDTYPOGRAPHY, TO_ADVANCEDTYPOGRAPHY);    if Aplicar then   begin     ParaFormat.cbSize := SizeOf(ParaFormat);     ParaFormat.dwMask := PFM_ALIGNMENT;     ParaFormat.wAlignment := PFA_JUSTIFY;     SendMessage(RichEdit.handle, EM_SETPARAFORMAT, 0, LongInt(@ParaFormat));   end; end;   Para justificar a impressão, crie o relatório num form comum, adicione TRichText e em seguida seu QReport.  No FormCreate adicione o código   JustificaRichEdit(TRichText1); No seu TQRRichText preencha a propriedade ParentRichEdit com o seu TRichText1. No beforePrint da banda que está o seu TQRRichText adicione, adaptando para sua necessidade, o código abaixo:  procedure TfRLSpa0011.bDadosBeforePrint(Sender: TQRCustomBand;   var PrintBand: Boolean); var   ssTemp: TStringStream;   x: Integer;   Tag, Corpo: String; begin   Corpo := dmCMP.qry.FieldByName('texto').AsString;    for x := 0 to dmCMP.qry.FieldCount - 1 do   begin     Tag := '[*' + dmCMP.qry.Fields[x].FieldName + '*]';      if Pos(Tag, Corpo) > 0 then         Corpo := StringReplace(Corpo, Tag, Trim(dmCMP.qry.Fields[x].AsString), [rfIgnoreCase,rfReplaceAll]);   end;    ssTemp := TStringStream.Create(Corpo);   TRichText1.Lines.LoadFromStream(ssTemp); // Isso mesmo, você vai atribuir o texto na TRichText1. O seu TQRRichText se encarrega de buscar o texto no TRichText1 conforme o que você preencheu na propriedade ParentRichEdit.   FreeAndNil(ssTemp); end;