Ir para conteúdo
  • Cadastre-se

dev botao

Mover string contendo html para um RichEdit e exibir formatado


Ver Solução Respondido por leandroaoa,
  • Este tópico foi criado há 667 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Bom dia pessoal,

   Vocês tem alguma function ou se existe alguma outra forma, eu monto uma string contendo formatação html, exemplo: <b>Erro:</b>Forma de pagamento inválida.

  Ai pego essa string e atribuo para um RichEdit. Tem como exibir esse texto formatado? Erro: Forma de pagamento inválida

Postado
1 hora atrás, douglas_k disse:

Bom dia pessoal,

   Vocês tem alguma function ou se existe alguma outra forma, eu monto uma string contendo formatação html, exemplo: <b>Erro:</b>Forma de pagamento inválida.

  Ai pego essa string e atribuo para um RichEdit. Tem como exibir esse texto formatado? Erro: Forma de pagamento inválida

Pelo que entendi, você está querendo pegar algo dentro de um html ou xml por exemplo, você poderia usar o seguinte:

 

function TfrmExemplo.obterNroResultado(const aXML: XMLString; aTag,
  aEndTag: string): string;
var
  _Posini, _Posfim  : integer;
Begin
  Result := '';
  _Posini:= Pos(aTag,aXML);
  _Posfim:= Pos(aEndTag,aXML);
  if  ( _Posini > 0 ) then
    begin
      inc(_PosIni, Length(aTag));
      Result:=Copy(aXML,_Posini+1,(_PosFim-_PosIni)-1);
    end;
end;
 

E no botão seria esse comando pra chamar o campo desejado, seria isso ?

  EditResultado.Text := obterNroResultado(mmXML.Text, '<nRec','</nRec');
 

Postado
42 minutos atrás, Élviro Cavalcanti disse:

Pelo que entendi, você está querendo pegar algo dentro de um html ou xml por exemplo, você poderia usar o seguinte:

 

function TfrmExemplo.obterNroResultado(const aXML: XMLString; aTag,
  aEndTag: string): string;
var
  _Posini, _Posfim  : integer;
Begin
  Result := '';
  _Posini:= Pos(aTag,aXML);
  _Posfim:= Pos(aEndTag,aXML);
  if  ( _Posini > 0 ) then
    begin
      inc(_PosIni, Length(aTag));
      Result:=Copy(aXML,_Posini+1,(_PosFim-_PosIni)-1);
    end;
end;
 

E no botão seria esse comando pra chamar o campo desejado, seria isso ?

  EditResultado.Text := obterNroResultado(mmXML.Text, '<nRec','</nRec');
 

na verdade eu quero que no RichEdit eu mostre o texto conforme uma string com html que vou passar, que tipo o texto seja exibido com a formação

Eu to montando umas mensagens para usuário e to ja montando essa msg usando html, ai abro uma tela pra mostrar pro usuário e nessa tela quero mostrar essa mensagem formatada conforme a string que montei.

Postado
2 horas atrás, douglas_k disse:

na verdade eu quero que no RichEdit eu mostre o texto conforme uma string com html que vou passar, que tipo o texto seja exibido com a formação

Eu to montando umas mensagens para usuário e to ja montando essa msg usando html, ai abro uma tela pra mostrar pro usuário e nessa tela quero mostrar essa mensagem formatada conforme a string que montei.

Beleza, você poderia postar aqui o html ?

Postado

bom dia

porque voce não usa WebBrowser no lugar do RichEdit exemplo:

var
  Doc: Variant;
begin
  if not Assigned(WebBrowser1.Document) then
    WebBrowser1.Navigate('about:blank');

  Doc := WebBrowser1.Document;
  Doc.Clear;
  Doc.Write('<b>Erro:</b>Forma de pagamento inválida.');
  Doc.Close;
 

Postado
Em 21/01/2023 at 10:45, leandroaoa disse:

bom dia

porque voce não usa WebBrowser no lugar do RichEdit exemplo:

var
  Doc: Variant;
begin
  if not Assigned(WebBrowser1.Document) then
    WebBrowser1.Navigate('about:blank');

  Doc := WebBrowser1.Document;
  Doc.Clear;
  Doc.Write('<b>Erro:</b>Forma de pagamento inválida.');
  Doc.Close;
 

Bom dia @leandroaoa

Na verdade quero usar para fazer uma tela padrão de mensagens, poderia ser também um webbrowser pois ai já interpreta html, só teria que fazer ele ficar da mesma cor do form. Peguei uma procedure e adaptei aqui, consegui assim formatar o richedit interpretando o html, agora só vou fazer pra tratar as tags que passo, fiz com o negrito um exemplo. Abaixo tem uma tela como ficaria com o richedit e com o webbroser

procedure TForm1.ApplyStyleWhenMatchPattern(Edit: TRichEdit; const TokenStart,
  TokenEnd: string);
var
  StartPos, EndPos, OffSet, Len: Integer;
begin
  Len:= Length(Edit.Text);
  StartPos:= Edit.FindText(TokenStart, 0, Len, []);
  EndPos:= Edit.FindText(TokenEnd, Succ(StartPos), Len, []);
  while EndPos <> -1 do
  begin
    {Tirando a tag inicial}
    Edit.SelStart:= StartPos;
    Edit.SelLength:= Length(TokenStart);
    Edit.SelText :='';

    EndPos := EndPos - Length(TokenStart);

    {Atribuindo estilo}
    Edit.SelStart:= StartPos;
    Edit.SelLength:= EndPos - StartPos;
    if TokenStart = '<b>' then
      Edit.SelAttributes.Style:= [fsBold];

    {Tirando a tag final}
    Edit.SelStart:= EndPos;
    Edit.SelLength:= Length(TokenEnd);
    Edit.SelText :='';

    OffSet:= Succ(EndPos);
    StartPos:= Edit.FindText(TokenStart, OffSet, Len, []);
    EndPos:=   Edit.FindText(TokenEnd,   Succ(OffSet), Len, []);
  end;
end;
 

  RichEdit1.Lines.Text :=  '<b>Erro:</b> Forma pagamento invalida '+ #10 +'<b>Erro:</b> Forma pagamento invalida' + #10 + '<b>Erro:</b> Forma pagamento invalida';
  ApplyStyleWhenMatchPattern(RichEdit1, '<b>','</b>');

image.png.07d5f856a9b6d7a0a1c0df18cc7dd279.png

  • Solution
Postado
Em 23/01/2023 at 13:36, douglas_k disse:

Bom dia @leandroaoa

Na verdade quero usar para fazer uma tela padrão de mensagens, poderia ser também um webbrowser pois ai já interpreta html, só teria que fazer ele ficar da mesma cor do form. Peguei uma procedure e adaptei aqui, consegui assim formatar o richedit interpretando o html, agora só vou fazer pra tratar as tags que passo, fiz com o negrito um exemplo. Abaixo tem uma tela como ficaria com o richedit e com o webbroser

procedure TForm1.ApplyStyleWhenMatchPattern(Edit: TRichEdit; const TokenStart,
  TokenEnd: string);
var
  StartPos, EndPos, OffSet, Len: Integer;
begin
  Len:= Length(Edit.Text);
  StartPos:= Edit.FindText(TokenStart, 0, Len, []);
  EndPos:= Edit.FindText(TokenEnd, Succ(StartPos), Len, []);
  while EndPos <> -1 do
  begin
    {Tirando a tag inicial}
    Edit.SelStart:= StartPos;
    Edit.SelLength:= Length(TokenStart);
    Edit.SelText :='';

    EndPos := EndPos - Length(TokenStart);

    {Atribuindo estilo}
    Edit.SelStart:= StartPos;
    Edit.SelLength:= EndPos - StartPos;
    if TokenStart = '<b>' then
      Edit.SelAttributes.Style:= [fsBold];

    {Tirando a tag final}
    Edit.SelStart:= EndPos;
    Edit.SelLength:= Length(TokenEnd);
    Edit.SelText :='';

    OffSet:= Succ(EndPos);
    StartPos:= Edit.FindText(TokenStart, OffSet, Len, []);
    EndPos:=   Edit.FindText(TokenEnd,   Succ(OffSet), Len, []);
  end;
end;
 

  RichEdit1.Lines.Text :=  '<b>Erro:</b> Forma pagamento invalida '+ #10 +'<b>Erro:</b> Forma pagamento invalida' + #10 + '<b>Erro:</b> Forma pagamento invalida';
  ApplyStyleWhenMatchPattern(RichEdit1, '<b>','</b>');

image.png.07d5f856a9b6d7a0a1c0df18cc7dd279.png

Mas é so voce criar os style estou deduzindo que voce saiba trabalhar com htm

var
  Doc: Variant;
begin
  if not Assigned(WebBrowser1.Document) then
    WebBrowser1.Navigate('about:blank');

  Doc := WebBrowser1.Document;
  Doc.Clear;
  Doc.Write('<html>');
  Doc.Write('<head>');
  Doc.Write('<style>');
  Doc.Write('.important {background-color: blue; color: white; border: 2px solid black; margin: 2px; padding: 2px;}');
  Doc.Write('</style>');
  Doc.Write('</head>');
  Doc.Write('<body>');
  Doc.Write('<h1 class="important">Isto é um cabeçalho</h1>');
  Doc.Write('<p class="important">Isto é um parágrafo.</p>');
  Doc.Write('</body>');
  Doc.Write('</html>

Postado
20 horas atrás, leandroaoa disse:

Mas é so voce criar os style estou deduzindo que voce saiba trabalhar com htm

var
  Doc: Variant;
begin
  if not Assigned(WebBrowser1.Document) then
    WebBrowser1.Navigate('about:blank');

  Doc := WebBrowser1.Document;
  Doc.Clear;
  Doc.Write('<html>');
  Doc.Write('<head>');
  Doc.Write('<style>');
  Doc.Write('.important {background-color: blue; color: white; border: 2px solid black; margin: 2px; padding: 2px;}');
  Doc.Write('</style>');
  Doc.Write('</head>');
  Doc.Write('<body>');
  Doc.Write('<h1 class="important">Isto é um cabeçalho</h1>');
  Doc.Write('<p class="important">Isto é um parágrafo.</p>');
  Doc.Write('</body>');
  Doc.Write('</html>

Boa tarde, obrigado pelas dicas

  • Este tópico foi criado há 667 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.