AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebbrowser: Text aus Frames finden
Thema durchsuchen
Ansicht
Themen-Optionen

TWebbrowser: Text aus Frames finden

Ein Thema von Moyyer · begonnen am 7. Jan 2006 · letzter Beitrag vom 8. Jan 2006
Antwort Antwort
Moyyer

Registriert seit: 31. Mai 2003
155 Beiträge
 
Delphi 7 Enterprise
 
#1

TWebbrowser: Text aus Frames finden

  Alt 7. Jan 2006, 21:16
Hallo alle Deplhifreunde.

Ich suche eine Möglichkeit einen Text von einer Seite, welche Frames besitzt, auszulesen.
Habe nur eine Möglichlkeit ohne Frames gefunden.

Delphi-Quellcode:
procedure TForm1.SearchAndHighlightText(aText: string);
var
  tr: IHTMLTxtRange; //TextRange Object
begin
  if not WebBrowser1.Busy then
  begin
    tr := ((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange;
    //Get a body with IHTMLDocument2 Interface and then a TextRang obj. with IHTMLBodyElement Intf.

    while tr.findText(aText, 1, 0) do //while we have result
    begin
     ... // Ausgabe
    end;
  end;
end;
Ich habe keine Ahnung, was ich umändern muss.

Suche außerdem eine Befehlsrefernz über "Webbrowser.Documents" und "Webbrowser.OleObject", da mein Delphi (bei dieser Funktion) kein Drop-Down Menü mit Befehlen einzeigt.

Gruß Moyyer
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: TWebbrowser: Text aus Frames finden

  Alt 7. Jan 2006, 21:56
Hallo,


Probiers mal damit:
Delphi-Quellcode:
uses
  ActiveX;

function TForm1.GetFrame(FrameNo: Integer): IWebbrowser2;
var
  OleContainer: IOleContainer;
  enum: IEnumUnknown;
  unk: IUnknown;
  Fetched: PLongint;
begin
  while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
    Application.ProcessMessages;
  if Assigned(Webbrowser1.document) then
  begin
    Fetched := nil;
    OleContainer := Webbrowser1.Document as IOleContainer;
    OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
    Enum.Skip(FrameNo);
    Enum.Next(1, Unk, Fetched);
    Result := Unk as IWebbrowser2;
  end
  else
    Result := nil;
end;


// Testseite laden
procedure TForm1.Button1Click(Sender: TObject);
begin
  Webbrowser1.Navigate('http://www.warebizprogramming.com/tutorials/html/framesEx1.htm');
end;

// Save all frames in single files
// Alle Frameseiten in einzelne Dateien speichern
procedure TForm1.Button2Click(Sender: TObject);
var
  IpStream: IPersistStreamInit;
  AStream: TMemoryStream;
  iw: IWebbrowser2;
  i: Integer;
  sl: TStringList;
begin
  for i := 0 to Webbrowser1.OleObject.Document.frames.Length - 1 do
  begin
    iw := GetFrame(i);
    AStream := TMemoryStream.Create;
    try
      IpStream := iw.document as IPersistStreamInit;
      if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then
      begin
        AStream.Seek(0, 0);
        sl := TStringList.Create;
        sl.LoadFromStream(AStream);
        sl.SaveToFile('c:\frame' + IntToStr(i) + '.txt');
        // memo1.Lines.LoadFromStream(AStream);
        sl.Free;
      end;
    except
    end;
    AStream.Free;
  end;
end;
Thomas
  Mit Zitat antworten Zitat
Moyyer

Registriert seit: 31. Mai 2003
155 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: TWebbrowser: Text aus Frames finden

  Alt 7. Jan 2006, 22:27
Hallo hab es ausgetestet nur leider legt er weder dateien an noch schreibt er irgendwas in das memo (die ausgeklammerte zeile)

der nachfolgende code ist zum ausfüllen von frame formularen gedacht und müsste vllt nur umgeschrieben werden, nur leider kenne ich die befehle nicht (brauche befehlsreferenz)

WebBrowser1.OleObject.Document.Frames.item('Name des Frames').Document.Forms.item('Name des Formulars').Elements.item('Name des Feldes').value := 'Irgendetwas' P.S. code ist aus diesem Beitrag (Link)
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: TWebbrowser: Text aus Frames finden

  Alt 8. Jan 2006, 01:00
Zitat von Moyyer:
Hallo hab es ausgetestet nur leider legt er weder dateien an noch schreibt er irgendwas in das memo (die ausgeklammerte zeile)
Was fuer eine Delphi Version/IE Version verwendest du denn?
Hab's mit D6/IE 6 probiert. Funktioniert problemlos.

WebBrowser1.OleObject.Document.Frames.item('mainFr ame').Document.Forms.item(0).Elements.item('firstn ame').value := 'firstname!';

Anbei noch ein kleines Beispiel, wie man Formulare in Frames ausfuellen kann.
(alles entpacken, da noch html Testdateien dabei sind)
Angehängte Dateien
Dateityp: zip wbframe_219.zip (232,2 KB, 53x aufgerufen)
Thomas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: TWebbrowser: Text aus Frames finden

  Alt 8. Jan 2006, 10:35
Hallo.

Zitat von Moyyer:
brauche befehlsreferenz
Da sollte dir das entsprechende Kapitel aus dem Windows Platform SDK weiterhelfen: klick

Hier noch ein Beispiel, wie du mit early binding auf den Inhalt eines frame zugreifen kannst:

Delphi-Quellcode:
procedure TWebForm.DemoButtonClick(Sender: TObject);
var
  doc: IHTMLDocument2;
  win: IHTMLWindow2;
  fc: IHTMLFramesCollection2;
  u: IUnknown;
  i: Integer;
  v: OleVariant;
begin
  doc := WebBrowser.Document as IHTMLDocument2;
  fc := doc.frames;
  ShowMessage(Format('frames detected: %d', [fc.Length]));
  for i := 0 to Pred(fc.length) do
  begin
    v := i;
    u := fc.item(v);
    if u.QueryInterface(IHTMLWindow2, win) = 0 then
      ShowMessage(win.document.body.innerHTML)
  end;
end;
Manchmal ist es unnötig oder sogar unerwünscht, dass der HTML-Code durch den WebBrowser gerendert wird. Dann hilft dir vielleicht die Demo zu den MSHTML markup services aus diesem thread weiter: klick

Grüße vom marabu
  Mit Zitat antworten Zitat
Moyyer

Registriert seit: 31. Mai 2003
155 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: TWebbrowser: Text aus Frames finden

  Alt 8. Jan 2006, 12:06
Hi marabu

Dein Code hat funktioniert
Vielen Dank

Zitat:
Zitat:
Moyyer hat folgendes geschrieben:
brauche befehlsreferenz
Da sollte dir das entsprechende Kapitel aus dem Windows Platform SDK weiterhelfen: klick
Stimmt, auf der MSDN Website habe ich auch noch nicht gesucht

Gruß Moyyer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz