Problema com componente RichEdit no delphi 2010

Delphi

18/10/2010

Olá, migrei um projeto do delphi 7 para o delphi 2010 e agora tenho problema com componentes do tipo RichEdit, pois eles não mostram os textos formatados corretamente. Por exemplo, o texto  CONFIRMACAO DE ERRO...           após salvar aparece assim: {\RTF1\ANSI\ANSICPG1252\DEFF0\DEFLANG1046{\FONTTBL{\F0\FNIL\FCHARSET0 ARIAL;}}{\COLORTBL ;\RED0\GREEN0\BLUE0;}\VIEWKIND4\UC1\PARD\CF1\B\FS20 CONFIRMACAO DE ERRO...\PAR\PAR} Alguém possui alguma solução para este problema? Ressalto que o mesmo projeto compilado no delphi 2007 não apresenta esse erro.   Desde já agradeço.   Alex Maia      
Alex Maia

Alex Maia

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

18/10/2010

Verifique se a propriedade PlainText do RichEdit está como False.

Espero ter colaborado.
GOSTEI 0
Alex Maia

Alex Maia

18/10/2010

Está. Neste RichEdit também tenho que mostrar formações de textos, como: cores, fontes... Mas não funciona no delphi 2010
GOSTEI 0
Fábio Cruz

Fábio Cruz

18/10/2010

Experimentou apagar o componente e colocar o do Delphi2010?
GOSTEI 0
Alex Maia

Alex Maia

18/10/2010

Também tentei apagando os ateriores e colocando novos, mas não funcionou.
GOSTEI 0
Wilson Junior

Wilson Junior

18/10/2010

Teste isto:
procedure Carregar_TextoFormatado(reRichEdit: TRichEdit; TextoFormatado: string);
var
  streTexto: TStringStream;
begin
  streTexto := TStringStream.Create( TextoFormatado );
  try
    reRichEdit.Lines.LoadFromStream( streTexto );
  finally
    FreeAndNil( streTexto );
  end;
end;

{ Chamada do processo }
TextoFormatado := '{\RTF1\ANSI\ANSICPG1252\DEFF0\DEFLANG1046{\FONTTBL{\F0\FNIL\FCHARSET0 ARIAL;}}{\COLORTBL ;\RED0\GREEN0\BLUE0;}\VIEWKIND4\UC1\PARD\CF1\B\FS20 CONFIRMACAO DE ERRO...\PAR\PAR}';
Carregar_TextoFormatado( MeuRichEdit, TextoFormatado );


Espero ter colaborado.
GOSTEI 0
Alex Maia

Alex Maia

18/10/2010

Wilson, ainda não testei, mas desde já lhe agradeço pela resposta. Estou usando o DBRichEdit pra mostrar o texto salvo no banco. O ruim será ter que fazer isso em todas as partes do sistema que usam o DBRichEdit.   Vlw.
GOSTEI 0
Wilson Junior

Wilson Junior

18/10/2010

Olha, utilizo o Delphi 2010 e tenho vários campos no banco definidos como "BLOB SUB_TYPE TEXT SEGMENT SIZE 100" e os utilizo também com o DBRichEdit, e não preciso fazer nada para os mesmos funcionarem (Exceto vincular o DataSet e o Field no DBRichEdit).

Espero ter colaborado.
GOSTEI 0
Wilson Junior

Wilson Junior

18/10/2010

Ah, verifique qual o tipo do seu campo no banco de dados.
PS: só para constar, os dados que lhe passei são do Firebird 2.
GOSTEI 0
Alex Maia

Alex Maia

18/10/2010

O meu é campo tipo text no mysql
GOSTEI 0
Wilson Junior

Wilson Junior

18/10/2010

Olhe o código da unit DBCtrls, do componente TDBRichEdit
procedure TDBRichEdit.UpdateData(Sender: TObject);
var
  Stream: TStringStream;
begin
  if FDataLink.Field.IsBlob then
  begin
    Stream := TStringStream.Create('');
    try
      Lines.SaveToStream(Stream);
      FDataLink.Field.AsString := Stream.DataString;
    finally
      Stream.Free;
    end;
  end else
    FDataLink.Field.AsString := Text;
end;


O seu campo Field deve ser do tipo BLOB.

Espero ter colaborado.
GOSTEI 0
Wilson Junior

Wilson Junior

18/10/2010

e na mesma unit veja
procedure TDBRichEdit.LoadMemo;
var
  Stream: TStringStream;
begin
  if not FMemoLoaded and Assigned(FDataLink.Field) and FDataLink.Field.IsBlob then
  begin
    try
      Stream := TStringStream.create(FDataLink.Field.AsString);
      try
        Lines.LoadFromStream(Stream);
      finally
        Stream.Free;
      end;
      FMemoLoaded := True;
    except
      { Rich Edit Load failure }
      on E:EOutOfResources do
        Lines.Text := Format('(%s)', [E.Message]);
    end;
    EditingChange(Self);
  end;
end;


Espero ter colaborado.
GOSTEI 0
Thiago

Thiago

18/10/2010

procedure Carregar_TextoFormatado(reRichEdit: TRichEdit; TextoFormatado: string);
var
  streTexto: TStringStream;
begin
  streTexto := TStringStream.Create( TextoFormatado );
  try
    reRichEdit.Lines.LoadFromStream( streTexto );
  finally
    FreeAndNil( streTexto );
  end;
end;

{ Chamada do processo }
TextoFormatado := '{\RTF1\ANSI\ANSICPG1252\DEFF0\DEFLANG1046{\FONTTBL{\F0\FNIL\FCHARSET0 ARIAL;}}{\COLORTBL ;\RED0\GREEN0\BLUE0;}\VIEWKIND4\UC1\PARD\CF1\B\FS20 CONFIRMACAO DE ERRO...\PAR\PAR}';
Carregar_TextoFormatado( MeuRichEdit, TextoFormatado );
 

Troque para AnsiString que vai dar certim eu tive esse mesmo problema
procedure Carregar_TextoFormatado(reRichEdit: TRichEdit; TextoFormatado: AnsiString);var
  streTexto: TStringStream;
begin
  streTexto := TStringStream.Create( TextoFormatado );
  try
    reRichEdit.Lines.LoadFromStream( streTexto );
  finally
    FreeAndNil( streTexto );
  end;

Espero que tenha ajudado. açb
GOSTEI 0
POSTAR