Announcement

Collapse
No announcement yet.

Inhalt mehrerer HTML Dokumente in neuem Dokument

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Inhalt mehrerer HTML Dokumente in neuem Dokument

    Hallo,

    ich habe folgendes Problem:
    Aus mehreren gespeicherten HTML Dokumenten soll der Inhalt entnommen werden und zusammen in ein neues Dokument gespeichert werden.
    Im der Form befindet sich eine WebBrowser Komponente in der nacheinander alle HTML Seiten geladen werden. Nach dem Laden soll der Inhalt entnommen werden und einen neue Datei erzeugt werden, bzw. der Inhalt an eine bestehende Datei angehängt werden.
    Ich komme damit irgendwie nicht klar. Vieleicht kann mir ja jemand helfen ? !

    Andreas

  • #2
    Hallo,

    das Auslesen der HTML-Anweisung aus der WebBrowser-Komponente ist nicht das Problem:
    <pre>
    <font color="#003399"><i>{ HTML-Inhalt in eine String-Variable auslesen }</i></font>
    <br>
    <b>procedure</b> TForm1.ToolButtonGetHTMLClick(Sender: TObject);
    <b>var</b>
    aHTMLDoc : IHTMLDocument2;
    aHTMLBody : IHTMLElement;
    swHTMLText : WideString;
    <b>begin</b>
    <b>if</b> <b>not</b> VarIsEmpty(WebBrowser1.Document) <b>then</b>
    <b>begin</b>
    aHTMLDoc := WebBrowser1.Document <b>as</b> IHTMlDocument2;
    aHTMLBody := aHTMLDoc.Get_body;
    swHTMLText := aHTMLBody.outerHTML;
    ShowMessage(swHTMLText);
    <b>end</b>;
    <b>end</b>;
    </pre>
    Im nächten Schritt muss jetzt nur noch das < HTML > und < BODY >-Tag (inklusive Aufhebung) entfernt werden, damit der restliche HTML-Text in das andere Dokument eingefügt werden kann. Im folgenden Beispiel simuliert ein TMemo die einzufügenden HTML-Anweisungen:
    <pre>
    <pre><b>uses</b>
    MSHTML, ActiveX;
    <br>
    <b>procedure</b> TForm1.Button1Click(Sender: TObject);
    <b>var</b>
    aPSI : IPersistStreamInit;
    aSS : TStringStream;
    <b>begin</b>
    <font color="#003399"><i>// leere Webseite anfordern</i></font>
    WebBrowser1.Navigate(<font color="#9933CC">'about:blank'</font>);
    <b>while</b> WebBrowser1.ReadyState &lt; READYSTATE_INTERACTIVE <b>do</b>
    Application.ProcessMessages;
    <font color="#003399"><i>// eigenen Text anzeigen</i></font>
    aSS := TStringStream.Create(Memo1.Lines.Text);
    <b>try</b>
    aSS.Seek(0, soFromBeginning);
    aPSI := WebBrowser1.Document <b>as</b> IPersistStreamInit;
    aPSI.Load(TStreamAdapter.Create(aSS))
    <b>finally</b>
    aSS.Free
    <b>end</b>
    <b>end</b>;
    </pre&gt

    Comment


    • #3
      Danke für die Hilfe !!
      Den ersten Teil hatte ich auch schon, nur das Application.ProcessMessage hat gefehlt.

      Mit dem Schreiben der Informationen in das neue Dokument habe ich noch Schwierigkeiten.

      Ich habe mal den Code beigefügt:

      <PRE>
      procedure TForm1.Button1Click(Sender: TObject);
      var i:integer;
      s:string;
      aHTMLDoc : IHTMLDocument2;
      aHTMLBody : IHTMLElement;
      swHTMLText : WideString;
      aPSI : IPersistStreamInit;
      aSS : TStringStream;
      begin
      ProgressBar1.Position := 0;
      ProgressBar1.Max := FileListBox1.Items.Count;
      WebBrowser2.Navigate('about:blank');
      // Beginn for-Schleife
      for i := 0 to ProgressBar1.Max -1 do begin
      ProgressBar1.Position := ProgressBar1.Position + 1;
      s := ExpandFileName(FileListBox1.Items.Strings[i]);
      Label1.Caption := s;
      Label1.Update;
      WebBrowser1.Navigate(s);
      // Auf WebBrowser warten
      while (WebBrowser1.Busy) OR
      (WebBrowser1.ReadyState < READYSTATE_COMPLETE)
      do Application.ProcessMessages;
      // Inner Body auslesen
      if not VarIsEmpty(WebBrowser1.Document) then
      begin
      aHTMLDoc := WebBrowser1.Document as IHTMLDocument2;
      aHTMLBody := aHTMLDoc.Get_body;
      swHTMLText := aHTMLBody.innerHTML;
      //ShowMessage(swHTMLText);

      while WebBrowser2.ReadyState < READYSTATE_INTERACTIVE do
      Application.ProcessMessages;
      aSS := TStringStream.Create(swHTMLText)
      try
      aSS.Seek(0, soFromBeginning);
      aPSI := WebBrowser2.Document as IPersistStreamInit;
      aPSI.Load(TStreamAdapter.Create(aSS))
      finally
      aSS.Free
      end;

      end;
      end; // End for-Schleife
      end;
      </PRE

      Andrea

      Comment


      • #4
        Hallo,

        das folgende Beispiel zeigt, wie man den Inhalt von mehreren Webseiten in das neue WebBrowser-Dokument einmischen kann. Zur Demonstration habe ich dazu 4 Button verbaut, die in der Reihenfolge der Nummerierung angeklickt werden müssen:
        <pre>
        <b>unit</b> WebBrowser_HTML_zusammenmischenFrm;

        <b>interface</b>

        <b>uses</b>
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, StdCtrls, OleCtrls, SHDocVw;

        <b>type</b>
        TForm1 = <b>class</b>(TForm)
        WebBrowser1: TWebBrowser;
        WebBrowser2: TWebBrowser;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        <b>procedure</b> Button1Click(Sender: TObject);
        <b>procedure</b> Button2Click(Sender: TObject);
        <b>procedure</b> Button3Click(Sender: TObject);
        <b>procedure</b> Button4Click(Sender: TObject);
        <b>private</b>
        <font color="#003399"><i>{ Private-Deklaratio;nen }</i></font>
        FswHTML : WideString;
        FswNewHTML : WideString;
        <b>public</b>
        <font color="#003399"><i>{ Public-Deklarationen }</i></font>
        <b>end</b>;

        <b>var</b>
        Form1: TForm1;

        <b>implementation</b>

        <font color="#003399"><i>{$R *.dfm}</i></font>

        <b>uses</b> ActiveX, MSHTML_TLB;

        <b>procedure</b> TForm1.Button1Click(Sender: TObject);
        <b>var</b>
        aHTMLDoc : IHTMLDocument2;
        aHTMLBody : IHTMLElement;
        <b>begin</b>
        WebBrowser1.Navigate(<font color="#9933CC">'http://p4w2k/OssiSoft/Projekte/IndexProjekte.htm'</font>);
        <b>repeat</b>
        Application.ProcessMessages;
        <b>until</b> WebBrowser1.ReadyState &gt;= READYSTATE_COMPLETE;

        <b>if</b> <b>not</b> VarIsEmpty(WebBrowser1.Document) <b>then</b>
        <b>begin</b>
        aHTMLDoc := WebBrowser1.Document <b>as</b> IHTMlDocument2;
        aHTMLBody := aHTMLDoc.Get_body;
        FswHTML := aHTMLBody.outerHTML;
        ShowMessage(FswHTML);
        <b>end</b>;
        <b>end</b>;

        <b>procedure</b> TForm1.Button2Click(Sender: TObject);
        <b>var</b>
        aPSI : IPersistStreamInit;
        aSS : TStringStream;
        <b>begin</b>
        <font color="#003399"><i>// leere Webseite anfordern</i></font>
        WebBrowser2.Navigate(<font color="#9933CC">'about:blank'</font>);
        <b>while</b> WebBrowser2.ReadyState &lt; READYSTATE_INTERACTIVE <b>do</b>
        Application.ProcessMessages;
        <font color="#003399"><i>// eigenen Text einfügen</i></font>
        aSS := TStringStream.Create(FswHTML);
        <b>try</b>
        aSS.Seek(0, soFromBeginning);
        aPSI := WebBrowser2.Document <b>as</b> IPersistStreamInit;
        aPSI.Load(TStreamAdapter.Create(aSS))
        <b>finally</b>
        aSS.Free
        <b>end</b>
        <b>end</b>;

        <b>procedure</b> TForm1.Button3Click(Sender: TObject);
        <b>var</b>
        aHTMLDoc : IHTMLDocument2;
        aHTMLBody : IHTMLElement;
        <b>begin</b>
        WebBrowser1.Navigate(<font color="#9933CC">'http://p4w2k/OssiSoft/Projekte/Lexington/IndexLexington.htm'</font>);
        <b>repeat</b>
        Application.ProcessMessages;
        <b>until</b> WebBrowser1.ReadyState &gt;= READYSTATE_COMPLETE;
        <b>if</b> <b>not</b> VarIsEmpty(WebBrowser1.Document) <b>then</b>
        <b>begin</b>
        aHTMLDoc := WebBrowser1.Document <b>as</b> IHTMlDocument2;
        aHTMLBody := aHTMLDoc.Get_body;
        FswNewHTML := aHTMLBody.outerHTML;
        ShowMessage(FswNewHTML);
        <b>end</b>;
        <b>end</b>;

        <b>procedure</b> TForm1.Button4Click(Sender: TObject);
        <b>var</b>
        aPSI : IPersistStreamInit;
        aSS : TStringStream;
        <b>begin</b>
        <font color="#003399"><i>// leere Webseite anfordern</i></font>
        WebBrowser2.Navigate(<font color="#9933CC">'about:blank'</font>);
        <b>while</b> WebBrowser2.ReadyState &lt; READYSTATE_INTERACTIVE <b>do</b>
        Application.ProcessMessages;
        <font color="#003399"><i>// eigenen Text einfügen</i></font>
        aSS := TStringStream.Create(FswHTML + FswNewHTML);
        <b>try</b>
        aSS.Seek(0, soFromBeginning);
        aPSI := WebBrowser2.Document <b>as</b> IPersistStreamInit;
        aPSI.Load(TStreamAdapter.Create(aSS))
        <b>finally</b>
        aSS.Free
        <b>end</b>
        <b>end</b>;

        <b>end</b>.

        </pre&gt

        Comment

        Working...
        X