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 

Editor HTML (Dúvidas)

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


Registrado: Terça-Feira, 20 de Julho de 2010
Mensagens: 1563

MensagemEnviada: Ter Nov 07, 2017 11:04 am    Assunto: Editor HTML (Dúvidas) Responder com Citação

Bom dia,

Estou criando um editor de HTML, porém surgiram algumas dúvidas

1 - Como concatenar as tags HTML? (Ex. <font>)

Sendo que eu preciso selecionar o texto onde irei aplicar a tag?
_________________
Facc System - Sistemas para Computador
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Nov 07, 2017 11:46 am    Assunto: Responder com Citação

Você quer concatenar as tags no início e fim ao texto selecionado?

Se estiver utilizando um RichEdit:

Código:
RichEdit1.SelText:= '<font>' + RichEdit1.SelText + '</font>';

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
faccruz
Colaborador
Colaborador


Registrado: Terça-Feira, 20 de Julho de 2010
Mensagens: 1563

MensagemEnviada: Ter Nov 07, 2017 12:15 pm    Assunto: Responder com Citação

O Fórum me trolou, rsrs

Na verdade quero concatenar todos os tipos de estilos CSS

Ex.: Font size="4" face="Times New Roman" color = "#000"

Atualmente está assim


Deveria ficar todas as formatações juntas
_________________
Facc System - Sistemas para Computador
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Nov 07, 2017 4:13 pm    Assunto: Responder com Citação

Para facilitar, te sugiro a criar um Editor de Texto comum com RichEdit em que o usuário formata o texto como desejado (Cor, Fonte, Tamanho, Alinhamento).

E no final é possível converter o conteúdo formatado para HTML.

Segue função que converte o texto do RichEdit para HTML e salva no Clipboard, depois copiamos para um StringList para gerar o arquivo HTML.

uses:
Código:
SHDocVw, MSHTML, ShellApi


Função:
Código:
function ClipboardToHTML(AParent: TWinControl): WideString;
var
  wb: TWebBrowser;

  function WaitDocumentReady: Boolean;
  var
    StartTime: DWORD;
  begin
    StartTime := GetTickCount;
    while wb.ReadyState <> READYSTATE_COMPLETE do
    begin
      Application.HandleMessage;
      if GetTickCount >= StartTime + 2000 then // time-out of max 2 sec
      begin
        Result := False; // time-out
        Exit;
      end;
    end;
    Result := True;
  end;

begin
  Result := '';
  wb := TWebBrowser.Create(nil);
  try
    wb.Silent := True;
    wb.Width := 0;
    wb.Height := 0;
    wb.Visible := False;
    TWinControl(wb).Parent := AParent;
    wb.HandleNeeded;
    if wb.HandleAllocated then
    begin
      wb.Navigate('about:blank');
      (wb.Document as IHTMLDocument2).designMode := 'on';
      if WaitDocumentReady then
      begin
        (wb.Document as IHTMLDocument2).execCommand('Paste', False, 0);
        Result := (wb.Document as IHTMLDocument2).body.innerHTML;
      end;
    end;
  finally
    wb.Free;
  end;
end;


Exemplo de uso (aproveitando o código do seu outro post para gerar HTML):

Código:
var
  HTML: TStringList;
  caminho: string;
begin
  try
    HTML := TStringList.Create;

    caminho := GetTempFolderWindows('TEMP') + '\' + 'teste.html';

    if FileExists(caminho) then
      DeleteFile(caminho);

    HTML.Add('<DOCTYPE>');
    HTML.Add('<html>');
    HTML.Add('  <head>');
    HTML.Add('    <meta>');
    HTML.Add('  </head>');
    HTML.Add('<body>');

    RichEdit1.SelectAll;
    RichEdit1.CopyToClipboard;

    HTML.Add(ClipboardToHTML(Self));

    HTML.Add('</body>');
    HTML.Add('</html>');

    HTML.SaveToFile(caminho);

    ShellExecute(Handle, 'open', PChar(caminho), nil, nil, SW_SHOWMAXIMIZED);
  finally
    FreeAndNil(HTML);
  end;
end;


Função extraída do link:
https://stackoverflow.com/questions/11954946/how-to-convert-simple-richtext-to-html-tags-in-delphi
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
faccruz
Colaborador
Colaborador


Registrado: Terça-Feira, 20 de Julho de 2010
Mensagens: 1563

MensagemEnviada: Seg Nov 13, 2017 12:46 pm    Assunto: Responder com Citação

natanbh1 escreveu:
Para facilitar, te sugiro a criar um Editor de Texto comum com RichEdit em que o usuário formata o texto como desejado (Cor, Fonte, Tamanho, Alinhamento).

E no final é possível converter o conteúdo formatado para HTML.

Segue função que converte o texto do RichEdit para HTML e salva no Clipboard, depois copiamos para um StringList para gerar o arquivo HTML.

uses:
Código:
SHDocVw, MSHTML, ShellApi


Função:
Código:
function ClipboardToHTML(AParent: TWinControl): WideString;
var
  wb: TWebBrowser;

  function WaitDocumentReady: Boolean;
  var
    StartTime: DWORD;
  begin
    StartTime := GetTickCount;
    while wb.ReadyState <READYSTATE_COMPLETE>= StartTime + 2000 then // time-out of max 2 sec
      begin
        Result := False; // time-out
        Exit;
      end;
    end;
    Result := True;
  end;

begin
  Result := '';
  wb := TWebBrowser.Create(nil);
  try
    wb.Silent := True;
    wb.Width := 0;
    wb.Height := 0;
    wb.Visible := False;
    TWinControl(wb).Parent := AParent;
    wb.HandleNeeded;
    if wb.HandleAllocated then
    begin
      wb.Navigate('about:blank');
      (wb.Document as IHTMLDocument2).designMode := 'on';
      if WaitDocumentReady then
      begin
        (wb.Document as IHTMLDocument2).execCommand('Paste', False, 0);
        Result := (wb.Document as IHTMLDocument2).body.innerHTML;
      end;
    end;
  finally
    wb.Free;
  end;
end;


Exemplo de uso (aproveitando o código do seu outro post para gerar HTML):

Código:
var
  HTML: TStringList;
  caminho: string;
begin
  try
    HTML := TStringList.Create;

    caminho := GetTempFolderWindows('TEMP') + '\' + 'teste.html';

    if FileExists(caminho) then
      DeleteFile(caminho);

    HTML.Add('<DOCTYPE>');
    HTML.Add('<html>');
    HTML.Add('  <head>');
    HTML.Add('    <meta>');
    HTML.Add('  </head>');
    HTML.Add('<body>');

    RichEdit1.SelectAll;
    RichEdit1.CopyToClipboard;

    HTML.Add(ClipboardToHTML(Self));

    HTML.Add('</body>');
    HTML.Add('</html>');

    HTML.SaveToFile(caminho);

    ShellExecute(Handle, 'open', PChar(caminho), nil, nil, SW_SHOWMAXIMIZED);
  finally
    FreeAndNil(HTML);
  end;
end;


Função extraída do link:
https://stackoverflow.com/questions/11954946/how-to-convert-simple-richtext-to-html-tags-in-delphi




Valeu pela dica, porém, está sendo aberto um arquivo em branco
_________________
Facc System - Sistemas para Computador
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
faccruz
Colaborador
Colaborador


Registrado: Terça-Feira, 20 de Julho de 2010
Mensagens: 1563

MensagemEnviada: Seg Nov 13, 2017 1:06 pm    Assunto: Responder com Citação

Achei onde estava o erro.

Mas apareceu outra dificuldade, estou utilizando o TJvRichEdit por causa que eu preciso adicionar imagens no HTML.

Porém, ao utilizar a função para converter, ela simplesmente ignora a imagem, gerando apenas as outras tags.
_________________
Facc System - Sistemas para Computador
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Nov 16, 2017 9:48 am    Assunto: Responder com Citação

Realmente esta função que postei não funciona com imagem.

Tem uma alternativa com a bibilioteca Jedi com o componente JvRichEditToHtml.

Mas infelizmente ela também não dá suporte a conversão com imagens.

Documentação:

Citação:
http://wiki.delphi-jedi.org/wiki/JVCL_Help:TJvRichEditToHtml

Citação:
Please note that TJvRichEditToHtml does not attempt to convert tabs, tables, images, or other advanced RTF markup instructions.

Citação:
Por favor, note que o TJvRichEditToHtml não tenta converter guias, tabelas, imagens ou outras instruções avançadas de marcação RTF.

Exemplo de uso:

Código:
var
  caminho: string;
begin
  caminho := GetTempFolderWindows('TEMP') + '\' + 'teste.html';

  if FileExists(caminho) then
    DeleteFile(caminho);

  JvRichEditToHtml1.ConvertToHtml(JvRichEdit1, caminho);

  ShellExecute(Handle, 'open', PChar(caminho), nil, nil, SW_SHOWMAXIMIZED);
end;

Se eu descobrir alguma maneira de converter para html com imagens lhe aviso.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
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