ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

RTF/RichEdit para HTML

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
paulinho_coelho
Novato
Novato


Registrado: Quinta-Feira, 27 de Março de 2008
Mensagens: 78

MensagemEnviada: Qua Out 29, 2014 5:31 pm    Assunto: RTF/RichEdit para HTML Responder com Citação

Pessoal, Boa Noite.

Estou tendo problemas numas funções que estou utilizando pra transformar um texto em HTML.
Quando começo a usar formatações do tipo sublinhado e negrito, o texto fica com seu formato todo errado quando transformado.
Alguém possui, e pode disponibilizar, uma rotina ou alguma forma de fazer essa transformação de Texto para HTML?

Grato.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qui Out 30, 2014 7:09 am    Assunto: Responder com Citação

posta as suas funcoes pro pessoal analisar
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
paulinho_coelho
Novato
Novato


Registrado: Quinta-Feira, 27 de Março de 2008
Mensagens: 78

MensagemEnviada: Qui Out 30, 2014 8:44 am    Assunto: Responder com Citação

Código:

function RtfToHtml(Rich: TRichEdit):string;
var
  I,J,MAX_ARRAY: integer;
  HTML: string;
  F,FO: array [0..5] of string;
  STR,LGT: integer;
  SIZE: integer;
  COR : string;
begin
  HTML := '';
  STR := RICH.SelStart;
  LGT := RICH.SelLength;
  MAX_ARRAY := 5;

  for J := 0 to MAX_ARRAY do
  begin
    F[J] := '';
    FO[J] := '';
  end;

  for I := 0 to length(RICH.text) do
  begin
    RICH.SelStart := I;
    RICH.SelLength := 1;

    for J := 0 to MAX_ARRAY do
      FO[J] := F[J];

    if (RICH.SelAttributes.Style - [fsItalic] - [fsUnderline] - [fsStrikeOut] = [fsBold]) then
      F[0] := '<b>'
    else
      F[0] := '</b>';

    if (RICH.SelAttributes.Style - [fsItalic] - [fsBold] - [fsStrikeOut] = [fsUnderline]) then
      F[1] := '<u>'
    else
      F[1] := '</u>';

    if (RICH.SelAttributes.Style - [fsUnderline] - [fsBold] - [fsStrikeOut] = [fsItalic]) then
      F[2] := '<i>'
    else
      F[2] := '</i>';

    if RICH.SelAttributes.size < 10 then
      SIZE := 1
    else if RICH.SelAttributes.size < 12 then
      SIZE := 2
    else if RICH.SelAttributes.size < 14 then
      SIZE := 3
    else if RICH.SelAttributes.size < 18 then
      SIZE := 4
    else if RICH.SelAttributes.size < 22 then
      SIZE := 5
    else if RICH.SelAttributes.size < 32 then
      SIZE := 6
    else
      SIZE := 7;
    COR := ColorToString(RICH.SelAttributes.Color);
    if (COR = 'clWindowText') or (COR = 'clBlack') then
      COR := '#000000'
    else if COR = 'clWite' then
      COR := '#FFFFFF'
    else if COR = 'clAqua' then
      COR := '#00FFFF'
    else if COR = 'clFuchsia' then
      COR := '#FF00FF'
    else if COR = 'clBlue' then
      COR := '#0000FF'
    else if COR = 'clYellow' then
      COR := '#FFFF00'
    else if COR = 'clLime' then
      COR := '#00FF00'
    else if COR = 'clRed' then
      COR := '#FF0000'
    else if COR = 'clSilver' then
      COR := '#C0C0C0'
    else if COR = 'clGray' then
      COR := '#808080'
    else if COR = 'clTeal' then
      COR := '#008080'
    else if COR = 'clPurple' then
      COR := '#800080'
    else if COR = 'clNavy' then
      COR := '#000080'
    else if COR = 'clOlive' then
      COR := '#808000'
    else if COR = 'clGreen' then
      COR := '#008000'
    else if COR = 'clMaroon' then
      COR := '#800000'
    else if copy(COR,1,1) = '$' then
      COR := '#'+copy(COR,length(COR)-1,2)
                +copy(COR,length(COR)-3,2)
                +copy(COR,length(COR)-5,2)
    else
      COR := '#000000';
    F[3] := '</font><font>';

    if RICH.Paragraph.Alignment = taCenter then
      F[4] := '<center>'
    else
      F[4] := '</center>';

    if RICH.Paragraph.Alignment = taRightJustify then
      F[5] := '<div>'
    else
      F[5] := '</div>';

    for J := 0 to MAX_ARRAY do
      if FO[J] <> F[J] then
        HTML := HTML + F[J];

    if copy(RICH.text,I+1,1) = #13 then
      HTML := HTML + '<br>';

    HTML := HTML + copy(RICH.text,I+1,1);
  end;
  RICH.SelStart := STR;
  RICH.SelLength := LGT;

  result := HTML;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
paulinho_coelho
Novato
Novato


Registrado: Quinta-Feira, 27 de Março de 2008
Mensagens: 78

MensagemEnviada: Qui Out 30, 2014 11:20 am    Assunto: Responder com Citação

Dei uma ajustada na função e agora está funcionando da forma que queria.

Segue :

Código:

function RtfToHtml(Rich: TRichEdit):string;
var
  I,J,MAX_ARRAY: integer;
  HTML: string;
  F,FO: array [0..5] of string;
  STR,LGT: integer;
  SIZE: integer;
  COR : string;
begin
  HTML := '';
  STR := RICH.SelStart;
  LGT := RICH.SelLength;
  MAX_ARRAY := 5;

  for J := 0 to MAX_ARRAY do
  begin
    F[J] := '';
    FO[J] := '';
  end;

  for I := 0 to length(RICH.text) do
  begin
    RICH.SelStart := I;
    RICH.SelLength := 1;

    for J := 0 to MAX_ARRAY do
      FO[J] := F[J];

    if (RICH.SelAttributes.Style - [fsItalic] - [fsUnderline] - [fsStrikeOut] = [fsBold]) then
      F[0] := '<b>'
    else
      F[0] := '</b>';

    if (RICH.SelAttributes.Style - [fsItalic] - [fsBold] - [fsStrikeOut] = [fsUnderline]) then
      F[1] := '<u>'
    else
      F[1] := '</u>';

    if (RICH.SelAttributes.Style - [fsUnderline] - [fsBold] - [fsStrikeOut] = [fsItalic]) then
      F[2] := '<i>'
    else
      F[2] := '</i>';

    if RICH.SelAttributes.size < 6 then
      SIZE := 1
    else if RICH.SelAttributes.size < 10 then
      SIZE := 2
    else if RICH.SelAttributes.size < 12 then
      SIZE := 3
    else if RICH.SelAttributes.size < 14 then
      SIZE := 4
    else if RICH.SelAttributes.size < 16 then
      SIZE := 5
    else if RICH.SelAttributes.size < 18 then
      SIZE := 6
    else
      SIZE := 7;

    COR := ColorToString(RICH.SelAttributes.Color);

    if (COR = 'clWindowText') or (COR = 'clBlack') then
      COR := '#000000'
    else if COR = 'clWite' then
      COR := '#FFFFFF'
    else if COR = 'clAqua' then
      COR := '#00FFFF'
    else if COR = 'clFuchsia' then
      COR := '#FF00FF'
    else if COR = 'clBlue' then
      COR := '#0000FF'
    else if COR = 'clYellow' then
      COR := '#FFFF00'
    else if COR = 'clLime' then
      COR := '#00FF00'
    else if COR = 'clRed' then
      COR := '#FF0000'
    else if COR = 'clSilver' then
      COR := '#C0C0C0'
    else if COR = 'clGray' then
      COR := '#808080'
    else if COR = 'clTeal' then
      COR := '#008080'
    else if COR = 'clPurple' then
      COR := '#800080'
    else if COR = 'clNavy' then
      COR := '#000080'
    else if COR = 'clOlive' then
      COR := '#808000'
    else if COR = 'clGreen' then
      COR := '#008000'
    else if COR = 'clMaroon' then
      COR := '#800000'
    else if copy(COR,1,1) = '$' then
      COR := '#'+copy(COR,length(COR)-1,2)
                +copy(COR,length(COR)-3,2)
                +copy(COR,length(COR)-5,2)
    else
      COR := '#000000';

    F[3] := '</font><font>';

    if RICH.Paragraph.Alignment = taCenter then
      F[4] := '<center>'
    else
      F[4] := '</center>';

    if RICH.Paragraph.Alignment = taRightJustify then
      F[5] := '<div>'
    else
      F[5] := '</div>';

    for J := 0 to MAX_ARRAY do
      if FO[J] <> F[J] then
        HTML := HTML + F[J];

    if RICH.SelText = Chr(13) then
      HTML := HTML + '<br>';

    HTML := HTML + RICH.SelText;
  end;
  RICH.SelStart := STR;
  RICH.SelLength := LGT;

  result := HTML;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB