Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-10-2012
Avatar de ZayDun
ZayDun ZayDun is offline
Miembro
 
Registrado: mar 2007
Posts: 129
Poder: 18
ZayDun Va por buen camino
Ventana emergente al pasar html a texto plano

Hola, quiero pasar unos datos html a texto plano y para ello utilizo el siguiente código dentro de un Tbutton:

Código Delphi [-]
var
IDoc: IHTMLDocument2;
Strl: TStringList;
sHTMLFile: String;
v: Variant;
Links: IHTMLElementCollection;
i: Integer;
Link: IHTMLAnchorElement;
begin
if sOpenDialog1.Execute then
begin
sHTMLFile := sOpenDialog1.FileName;
Strl := TStringList.Create;
try
Strl.LoadFromFile(sHTMLFile);
Idoc:=CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
try
IDoc.designMode:='on';
while IDoc.readyState<>'complete' do
Application.ProcessMessages;
v:=VarArrayCreate([0,0],VarVariant);
v[0]:= Strl.Text;
IDoc.write(PSafeArray(System.TVarData(v).VArray));
IDoc.designMode:='off';
while IDoc.readyState<>'complete' do
Application.ProcessMessages;
Memo2.Lines.Text := IDoc.body.innerText;
finally
IDoc := nil;
end;
finally
Strl.Free;
end;
end;

Funciona bien, pero ocurre algo extraño que no se como puedo evitarlo, y es que al hacer la conversión de html a texto se abre una ventana de IExplorer en blanco con la siguiente url "about:blank#_methods=onPlusOne%2C_ready%2C_close%2C_open%2C_resizeMe%2C_renderstart%2Concircled&id= I0_1351596422868&parent=about%3A%2F%2F"

¿Existe alguna manera de evitar que se abra la ventana?
Supongo que de alguna manera se puede evitar al igual que se evita en un WebBrowser con solo poner Cancel:=True; en el OnNewWindow, pero no se como hacer en este caso.

Saludos.
Responder Con Cita
  #2  
Antiguo 30-10-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

En lugar de buscar una posible solución... ¿no sería mejor utilizar alguna "rutina" para convertir HTML a texto plano, de las que pueden encontrarse buscando en Google, por ejemplo? De este modo matarías, en mi opinión, dos pájaros de un tiro: dejarías de usar el "TWebBrowser" para eso, y, solucionarías de paso el problema... ¿Cómo lo ves?
Responder Con Cita
  #3  
Antiguo 30-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Me imagino que con Delphi XE2 y sus expresiones regulares, esto debe ser pan comido

// Saludos
Responder Con Cita
  #4  
Antiguo 30-10-2012
Avatar de ZayDun
ZayDun ZayDun is offline
Miembro
 
Registrado: mar 2007
Posts: 129
Poder: 18
ZayDun Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Hola,

En lugar de buscar una posible solución... ¿no sería mejor utilizar alguna "rutina" para convertir HTML a texto plano, de las que pueden encontrarse buscando en Google, por ejemplo? De este modo matarías, en mi opinión, dos pájaros de un tiro: dejarías de usar el "TWebBrowser" para eso, y, solucionarías de paso el problema... ¿Cómo lo ves?
He utilizado rutinas incluso algunos componentes, pero estos últimos son de pago (Clever Internet Suit y Chilkat ), y las rutinas que he encontrado no me han dado el resultado esperado ya que faltaba parte del código o mostraba algo de código en html. Gracias por el interés y creo que utilizare algun componente free para "parsear" el código.
Responder Con Cita
  #5  
Antiguo 30-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por ZayDun Ver Mensaje
...
Funciona bien, pero ocurre algo extraño que no se como puedo evitarlo, y es que al hacer la conversión de html a texto se abre una ventana de IExplorer en blanco con la siguiente url "about:blank#_methods=onPlusOne%2C_ready%2C_close%2C_open%2C_resizeMe%2C_renderstart%2Concircled&id= I0_1351596422868&parent=about%3A%2F%2F"

¿Existe alguna manera de evitar que se abra la ventana?
Supongo que de alguna manera se puede evitar al igual que se evita en un WebBrowser con solo poner Cancel:=True; en el OnNewWindow, pero no se como hacer en este caso.
Hola.

Acabo de ejecutar el código que pusiste y en ningún momento se me presenta IE como mencionas. ¿ Hay más código que pudiera estar involucrado en esa acción ?

Como dato adicional, uso Mozilla Firefox por lo que también probé poniendo y sacando a IE como navegador predeterminado por si esa pudiera haber sido la causa, pero en ningún momento el código abrió IE.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 30-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Corroboro lo que comenta ecfisa. Para efectos de facilitar el trabajo, he resumido el código expuesto en esta función:

Código Delphi [-]
uses MsHtml, ComObj, ActiveX;

function StripTags(S: String): String;
var
  HtmlDocument: IHTMLDocument2;
  PsArray: OleVariant;

begin
  HtmlDocument := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;

  HtmlDocument.designMode := 'on';

  while HtmlDocument.readyState <> 'complete' do
    Application.ProcessMessages;

  PsArray := VarArrayCreate([0, 0], VarVariant);
  PsArray[0] := S;
  HtmlDocument.write(PSafeArray(TVarData(PsArray).VArray));

  HtmlDocument.designMode := 'off';

  while HtmlDocument.readyState <> 'complete' do
    Application.ProcessMessages;

  Result := HtmlDocument.body.innerText;
end;

He de añadir que el código me gustó porque yo no sabía cómo se accedía a un IHTMLDocument sin tener que crear una instancia del WebBrowser.

// Saludos
Responder Con Cita
  #7  
Antiguo 30-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por roman Ver Mensaje
He de añadir que el código me gustó porque yo no sabía cómo se accedía a un IHTMLDocument sin tener que crear una instancia del WebBrowser.
Yo también ignoraba como hacerlo, así que: gracias ZayDun

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 30-03-2015
elguille elguille is offline
Miembro
 
Registrado: ene 2005
Posts: 114
Poder: 20
elguille Va por buen camino
El codigo descrito en mi caso tenia un comportamiento errático en tiempo de proceso al ejecutarse muchas veces, llegando a estar 20 segundos para una sola transformación en cambio este me ha ido perfecto y rápido...
Código Delphi [-]
uses
MSHTML,
SHDocVw,
ActiveX;

function GetPlainText(Const Html: string): string;
var
DummyWebBrowser: TWebBrowser;
Document       : IHtmlDocument2;
DummyVar       : Variant;
begin
   Result := '';
   DummyWebBrowser := TWebBrowser.Create(nil);
   try
     //open an blank page to create a IHtmlDocument2 instance
     DummyWebBrowser.Navigate('about:blank');
     Document := DummyWebBrowser.Document as IHtmlDocument2; 
     if (Assigned(Document)) then //Check the Document
     begin
       DummyVar      := VarArrayCreate([0, 0], varVariant); //Create a variant array to write the html code to the  IHtmlDocument2
       DummyVar[0]   := Html; //assign the html code to the variant array
       Document.Write(PSafeArray(TVarData(DummyVar).VArray)); //set the html in the document
       Document.Close;
       Result :=(Document.body as IHTMLBodyElement).createTextRange.text;//get the plain text
     end;
   finally
     DummyWebBrowser.Free;
   end;
end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ventana Emergente liito16 Varios 2 26-02-2011 00:44:27
como crear ventana emergente gio013 OOP 7 29-07-2010 15:40:36
Ventana Emergente G.A.R.S Gráficos 2 27-05-2005 04:41:23
Saber si una ventana esta en primer plano Yaco Varios 0 28-02-2005 01:28:26
capturar datos de una ventana emergente smendo PHP 2 01-12-2004 10:50:29


La franja horaria es GMT +2. Ahora son las 13:43:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi