Einzelnen Beitrag anzeigen

c.wuensch

Registriert seit: 19. Dez 2004
Ort: Münster
96 Beiträge
 
#1

Problem mit Selection im tWebbrowser

  Alt 30. Mär 2005, 21:02
Hi,

ich bin dabei, mit Delphi und dem tWebbrowser einen einfachen WYSIWYG-Editor zu erstellen. Als Besonderheit (weil ich das häufiger benötige) soll dieser auch das Kopieren / Verschieben von ganzen Bereichen (entweder mit <div> oder mit <table>) ermöglichen, wenn sich nur der Cursor in einem solchen Bereich befindet.

Dazu habe ich mir folgendes überlegt:

Die Erkennung eines solchen Bereichs soll dadurch erfolgen, dass er sich nur eine Ebene unter <body> befindet. (Allerdings könnte auch ein besonderer Kommentar zur Kennzeichnung der Bereiche verwendet werden).

Also zum Beispiel:

XML-Code:
<html>
  <head>
    ...
  </head>

  <body>
    <div>
      

Dies ist der erste Bereich</p>
      <table><tr><td>Zelle 1</td><td>Zelle 2</td></tr></table>
      

Dies ist noch immer der erste Bereich</p>
    </div>

    <table>
      <tr><td>2. Bereich</td></tr>
    </table>
  </body>
</html>
Wenn sich der Cursor irgendwo im 1. Bereich befindet, soll der ganze HTML-Code von <div> bis </div> zurückgegeben werden, wenn er sich im 2. Bereich befindet, alles von <table> bis </table>.

Zur Selektierung eines Bereiches habe ich folgende Prozedur geschrieben:

Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
var
  selectionObj: IHTMLSelectionObject;
  selectionRange: IHtmlTxtRange;
  bodyElement: IHtmlElement;
begin
  selectionObj := IHTMLDocument2(Webbrowser.Document).Selection;
  selectionRange := IHtmlTxtRange(selectionObj.CreateRange);
  bodyElement := IHtmlElement(IHTMLDocument2(Webbrowser.Document).body);

  while selectionRange.parentElement <> bodyElement do begin
    selectionRange.movetoelementtext(selectionRange.parentElement);
    showmessage(selectionRange.htmlText);
  end;
end;
Leider läuft diese Schleife immer weiter, ohne die Markierung zu erweitern.

Was könnte ich denn da falsch machen???

(Gerne sind auch alternative Lösungsvorschläge für das beschriebene Problem willkommen)
  Mit Zitat antworten Zitat