AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit MSHTMLTxtRange
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit MSHTMLTxtRange

Ein Thema von Benjin · begonnen am 28. Mär 2005 · letzter Beitrag vom 28. Apr 2005
Antwort Antwort
Benjin

Registriert seit: 1. Nov 2004
Ort: München
64 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit MSHTMLTxtRange

  Alt 28. Mär 2005, 17:48
Hallo,

ich möchte mit Hilfe eines IHTMLTxtRange Objekts einen bestimmten Term in 4 verschiedenen HtmlSeiten suchen.
Dazu lasse ich in einer Schleife zunächst die entsprechende Seite aufrufen, um dann das TxtRange Objekt zu benutzen. Leider wird bei meiner Implementierung stets eine EAccessViolation aufgerufen, obwohl die Funktion ohne entsprechende Schleife, also bei der Suche in nur einem Dokument einwandfrei funktioniert.

Delphi-Quellcode:
procedure MultiSearch(Term: String);
var
   tr: IHTMLTxtRange;
   i: Integer;
begin

if Term <> 'then
 begin
for i:= 0 to 3 do
 begin

 FrmMultisearch.WBMultiSearch.Navigate(AdrArticles + IntToStr(i) +
 '.html');


 if not FrmMultisearch.WBMultiSearch.Busy then
   begin


      tr := ((FrmMultisearch.WBMultiSearch.Document as
                  IHTMLDocument2).body as
      IHTMLBodyElement).createTextRange;
    {Get a body with IHTMLDocument2 Interface and then a
      TextRang obj. with IHTMLBodyElement Intf.}


    while tr.findText(Term, 1, 0) do //while we have result
      begin

      inc(hitcounts[i]);
      end;
    end;

  end;
 end;
end;

Leider werd ich aus der MSHTML Referenz auch nicht schlauer, wodurch diese Exception geworfen werden könnte.
..... - Kurt - .....
  Mit Zitat antworten Zitat
Benjin

Registriert seit: 1. Nov 2004
Ort: München
64 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Problem mit MSHTMLTxtRange

  Alt 27. Apr 2005, 20:50
Halli Hallo, weiß hier niemand Rat?

..... - Kurt - .....
  Mit Zitat antworten Zitat
marabu

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

Re: Problem mit MSHTMLTxtRange

  Alt 28. Apr 2005, 14:12
Zitat von Benjin:
Leider wird bei meiner Implementierung stets eine EAccessViolation aufgerufen, obwohl die Funktion ohne entsprechende Schleife, also bei der Suche in nur einem Dokument einwandfrei funktioniert.
Beides ist kaum zu glauben.

Mit diesem Busy-Test hat der nachfolgende Code keine Chance je ausgeführt zu werden. Ich schlage vor du wartest, bis das Dokument geladen worden ist.

Delphi-Quellcode:
// if not FrmMultisearch.WBMultiSearch.Busy then
while FrmMultisearch.WBMultiSearch.Busy {and not UserCancel} do //
  ApplicationProcessMessages;
Und mit dieser Parameterversorgung arbeitet findText() auf einem 1 Zeichen großen Bereich. Sehr effizient, aber wenig informativ. Lass den Wert besser auf 0. Und wenn du nicht ab und zu den Suchbereich verschiebst, dann machst du den ganzen Geschwindigkeitsvorteil von oben wieder zunichte, weil immer wieder an der selben Stelle gesucht wird.

Delphi-Quellcode:
// while tr.findText(Term, 1, 0) do begin // Siehe Anmerkung 2
while tr.findText(Term, 0, 0) do begin // Suchen bis zum Ende des Textes
  inc(hitcounts[i]);
  tr.collapse(false); // Suchbereich neu festlegen
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benjin

Registriert seit: 1. Nov 2004
Ort: München
64 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Problem mit MSHTMLTxtRange

  Alt 28. Apr 2005, 16:20
Also,

ich habe mich mit diesem Problem wirklich ewig herumgeschlagen.

Nun, wie es so oft ist. Die Lösung war eine naheliegende und doch so abwegige.

Operationen, die auf einen TWebBrowser angewandt werden, funktionieren teilweise nur wenn dieser
auch "visible" ist.


Meine Implementierung beinhaltete aber eine Suche im Hintergrund, d.h. ich habe eine unsichtbare Form,
auf der TWebBrowser Elemente plaziert sind, in denen die Suche nach dem gesuchten term stattfindet.

Die Ergebnisse werden in eine Html Datei geschrieben, die Verlinkgungen a la:

"6 Treffer auf Seite y" enthält,

diese Treffereinträge kann man klicken, dann wird die entsprechende Seite in einem Hauptbrowser angezeigt.


Nun stellt sich mir ein neues Problem:

Wie kann ich die Form verbergen, ohne dass "visible" auf false gestellt wird?


Grüße,

jan
..... - Kurt - .....
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

Re: Problem mit MSHTMLTxtRange

  Alt 28. Apr 2005, 16:24
Zitat von Benjin:
Wie kann ich die Form verbergen, ohne dass "visible" auf false gestellt wird?
Indem du die Form ins Nirvana befoerderst. FormX.Left := -MaxInt;
Thomas
  Mit Zitat antworten Zitat
marabu

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

Re: Problem mit MSHTMLTxtRange

  Alt 28. Apr 2005, 16:45
Zitat von Benjin:
Nun, wie es so oft ist. Die Lösung war eine naheliegende und doch so abwegige.
Abwegig trifft es ganz gut. Normalerweise nimmst du einen Parser (z.B. diesen oder jenen), solange du den HTML Code nicht visualisieren willst.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benjin

Registriert seit: 1. Nov 2004
Ort: München
64 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Problem mit MSHTMLTxtRange

  Alt 28. Apr 2005, 16:53
Zitat von marabu:
Zitat von Benjin:
Nun, wie es so oft ist. Die Lösung war eine naheliegende und doch so abwegige.
Abwegig trifft es ganz gut. Normalerweise nimmst du einen Parser (z.B. diesen oder jenen), solange du den HTML Code nicht visualisieren willst.

Grüße vom marabu

Das wäre die Notlösung gewesen, mit der implementierten Markierfunktion von TWebBrowser ist es einfacher und komfortabler umzusetzen.

Dass sich mein Programm dadurch ein wenig aufbläht, fällt nicht sehr ins gewicht, da es insgesamt sehr kompakt ist.


Danke für deine Hilfe.


jan
..... - Kurt - .....
  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 21:45 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