Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   TWebBrowser: Inhaltbereich markieren und drucken??? (https://www.delphipraxis.net/177883-twebbrowser-inhaltbereich-markieren-und-drucken.html)

romber 3. Dez 2013 19:44

TWebBrowser: Inhaltbereich markieren und drucken???
 
Hallo!

Ich lade eine bestimmte Seite in TWebBrowser. Kann ich irgendwie den bestimmten Bereicht des Seiteninhalts markieren, wenn ich die Quellcode der Seite kenne und genau weiss, wie der zu markierenden Bereich im Quellcode anfängt und endet? Ist das überhaupt möglich? Diesen Bereich möchte ich dann drucken, genau so wie im normalen Browser, wenn wir nicht die ganze Seite, sondern nur den markierten Bereich drucken wollen.

Danke!

Volker Z. 4. Dez 2013 00:05

AW: TWebBrowser: Inhaltbereich markieren und drucken???
 
Hallo,

leider etwas wenig Information.
Zitat:

[...] wenn ich die Quellcode der Seite kenne und genau weiss, wie der zu markierenden Bereich im Quellcode anfängt und endet [...]
Heißt das Du kennst den Textinhalt der Seite oder hat der Quellcode eine ganz spezielle Struktur (Kommentare o. ä.)?

Wenn Du den Textinhalt der Seite kennst, also z. B.:
Ich lade eine bestimmte Seite in TWebBrowser. Kann ich irgendwie den bestimmten Bereicht des Seiteninhalts markieren, wenn ich die Quellcode der Seite kenne und genau weiss, wie der zu markierenden Bereich im Quellcode anfängt und endet? Ist das überhaupt möglich? Diesen Bereich möchte ich dann drucken, genau so wie im normalen Browser, wenn wir nicht die ganze Seite, sondern nur den markierten Bereich drucken wollen.

und Du möchtest den Teil von "Ich lade eine bestimmte [...]" bis "[..] Ist das überhaupt möglich?" selektieren und drucken, dann ginge das z. B. so:
Delphi-Quellcode:
procedure TForm1.Button1Click (Sender : TObject);
var
  t0, t1 : string;
  r0, r1 : IHTMLTxtRange;
begin
  t0 := 'Ich lade eine bestimmte';
  t1 := 'Diesen Bereich möchte ich dann';
  r0 := ((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange;
  r1 := ((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange;
  if r0.findText (t0, 0, 0) and r1.findText (t1, 0, 0) then
    begin
      r0.setEndPoint ('EndToStart', r1);
      r0.moveEnd ('word', -1);
      r0.select;
      WebBrowser1.ExecWB (OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT)
    end
end;
Sollte Dir den Bereich entsprechend selektieren und den Druckdialog aufrufen.

Wenn Du etwas anderes vor hast, dann musst Du schon noch etwas Info liefern.


Gruß

romber 4. Dez 2013 01:14

AW: TWebBrowser: Inhaltbereich markieren und drucken???
 
Erst mal vielen Dank für die schnelle Reaktion!

Zitat:

Zitat von Volker Z. (Beitrag 1238431)
Heißt das Du kennst den Textinhalt der Seite oder hat der Quellcode eine ganz spezielle Struktur (Kommentare o. ä.)?

Die Quellcode hat eine ganz spezielle Struktur.

Zitat:

Zitat von Volker Z. (Beitrag 1238431)
...und Du möchtest den Teil von "Ich lade eine bestimmte [...]" bis "[..] Ist das überhaupt möglich?" selektieren und drucken...

Genau. Allerdings ist der o.g. Texbeispiel mit dem Inhalt zu vergleichen, den ich markieren und ausdrucken möchte. Diesen Inhalt kenne ich nicht, ich weiss nur, dass der benötigte Berreich im Quelltext der Seite immer zwischen zwei HTML-Tags steht. So Z.B:

Code:
<irgendwas id="irgendelcheDetails" class="details">Hier der Bereich zum Selektieren</irgendwas>
Das bedeuted, ich kann in meinem Fall nicht einfach den Text im Browser-Bereich markieren, sondern muss irgendwie mit dem Quelltext der Seite arbeiten.

Volker Z. 4. Dez 2013 01:46

AW: TWebBrowser: Inhaltbereich markieren und drucken???
 
Hallo,

leider kann ich wieder nur raten. Hilft Dir vielleicht folgendes weiter:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  d : IHTMLDocument3;
  e : IHTMLElement;
  t : string;
  r : IHTMLTxtRange;
begin
  d := WebBrowser1.Document as IHTMLDocument3;
  if not Assigned (d) then
    Exit;

  e := d.getElementById ('irgendelcheDetails');
  if Assigned (e) then
    begin
      t := e.innerText;
      r := ((WebBrowser1.Document as IHTMLDocument2).body as IHTMLBodyElement).createTextRange;
      if r.findText (t, 0, 0) then
        begin
          r.select;
          WebBrowser1.ExecWB (OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT)
        end
    end
end;
[EDIT]
Wenn es die NSA nicht wissen darf was Du selektiv ausdrucken möchtest, ok auch gut, ansonsten zeigt doch einfach den HTML-Code; helfen wird dann sicherlich einfacher.
[/EDIT]

Gruß

Perlsau 4. Dez 2013 04:48

AW: TWebBrowser: Inhaltbereich markieren und drucken???
 
Zitat:

Zitat von romber (Beitrag 1238438)
Genau. Allerdings ist der o.g. Texbeispiel mit dem Inhalt zu vergleichen, den ich markieren und ausdrucken möchte. Diesen Inhalt kenne ich nicht, ich weiss nur, dass der benötigte Berreich im Quelltext der Seite immer zwischen zwei HTML-Tags steht. So Z.B:
Code:
<irgendwas id="irgendelcheDetails" class="details">Hier der Bereich zum Selektieren</irgendwas>
Das bedeuted, ich kann in meinem Fall nicht einfach den Text im Browser-Bereich markieren, sondern muss irgendwie mit dem Quelltext der Seite arbeiten.

Derartige HTML-Parser habe ich schon öfter geschrieben, und auch diese Problematik ist mir nicht ganz fremd. Da du den Quelltext verwenden mußt, um einen bestimmten Textbereich eingrenzen zu können, wäre es sicher nicht verkehrt, dir die ersten zwei drei Worten nach <irgendwas id="irgendelcheDetails" class="details"> zu merken und ebenso die letzten zwei drei Worte vor </irgendwas>. Diese beiden Strings übergibst du dann an deine Markier- und Druckmethode, z.B. die von Volker Z oben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz