AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Scrollen im TWebBrowser
Thema durchsuchen
Ansicht
Themen-Optionen

Scrollen im TWebBrowser

Ein Thema von Ungeübter · begonnen am 29. Mai 2004 · letzter Beitrag vom 28. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
Ungeübter

Registriert seit: 29. Mai 2004
16 Beiträge
 
#1

Scrollen im TWebBrowser

  Alt 29. Mai 2004, 18:30
Hallo liebe Programmiergemeinde,

mich plagt zur Zeit ein Problem, bei welchem ich bisher keine vernünftige Lösung finden konnte. Allerdings programmiere ich auch noch nicht lange

Ich brauche eine Anweisung, mit der ich bei einem Dokument, welches in der WebBrowser-Komponente geladen ist, ganz nach unten scrollen kann. Nun habe ich dieses Beispiel gefunden (http://www.swissdelphicenter.ch/de/showcode.php?id=1186):

Code:
function WB_ScrollTo(WB: TWebBrowser; Position: TWBPosition): Boolean;
var
  ParentW: OLEVariant;
begin
  Result := WB.Document <> nil;
  if Result then
  begin
    ParentW := WB.OleObject.Document.ParentWindow;
    case Position of
      wbPosBottom: ParentW.ScrollTo(0, ParentW.Screen.Height);
      wbPosTop: ParentW.ScrollTo(0, 0);
      wbPosRight: ParentW.ScrollTo(ParentW.Screen.Width, 0);
    end;
  end;
end;

// Example: Scroll to the bottom of the document:
procedure TForm1.Button1Click(Sender: TObject);
begin
  WB_ScrollTo(WebBrowser1, wbPosBottom);
end;
Als ich dies nun probieren wollte, meckerte der Compiler bei dem Variablentyp "TWBPosition", weshalb ich diesen Typ durch Byte ersetzt und die function entsprechend geändert habe.

Nur funktioniert diese function zwar oftmals, aber leider nicht immer Manchmal scrollt der WebBrowser nur ein kurzes Stück des Dokumentes.

Auf der Suche nach Alternativen bin ich dann auf diese Anweisung gestoßen (http://www.delphipages.com/threads/t...14257&G=114227):

Code:
procedure TForm1.sbScrollToBottomClick(Sender: TObject);
var
 scrollpos: Integer;
 pw : IHTMLWindow2;
 Doc: IHTMLDocument2;
 script: WideString;
begin
 Doc := WebBrowser1.Document as IHTMLDocument2;
 pw := IHTMLWindow2(Doc.parentWindow);
 scrollPos := pw.screen.height;
 pw.scrollBy(0, scrollpos);
end;
Diese Anweisung testweise in eine ButtonClick-Procedure implementiert ergab wiederrum Compilerfehler bei "IHTMLWindow2" und "IHTMLDocument2" – beide Begriffe werden nicht erkannt.

An dieser Stelle bin ich mit meinem Latein am Ende, vielleicht wißt ihr ja einen Rat ?
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Scrollen im TWebBrowser

  Alt 29. Mai 2004, 18:33
Ich hab das Scrollen normalerweise mit einer Textmarke erledigt. Du speicherst die Seite lokal in den temporären Dateien, lädst den Code, und fügst am Ende des HTML-Codes noch den Anker
Code:
<a name="MyAppScroller"></a>
hinzu.
Dann rufst du die entsprechende Seite so auf:
Code:
[url]http://blablabla.com/test.htm#MyAppScroller[/url]
Greetz
alcaeus

[add]Achja, herzlich willkommen in der DP [/add]
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Ungeübter

Registriert seit: 29. Mai 2004
16 Beiträge
 
#3

Re: Scrollen im TWebBrowser

  Alt 29. Mai 2004, 19:30
Ziemlich kreativ

Wenn man mit der Seite lokal arbeiten möchte ist die Methode gut benutzbar, allerdings möchte ich eine Seite im Internet scrollen und bei einer solchen hat man leider keine Zugriffsmöglichkeit. Es sei denn man hackt den server und lädt seine Version auf den Webspace, das aber wäre dann wohl ein bisschen zuviel Aufwand um nichts weiter als eine Seite zu scrollen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Scrollen im TWebBrowser

  Alt 29. Mai 2004, 19:32
Äh? wenn du sie im Browser nazeigen kannst, dann kannst du sie auch über HTTP runterladen und speichern. Muss allerdings sagen alcaeus Methode gefällt mir auch nicht besonders.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jAcK oRsEn

Registriert seit: 29. Mai 2004
Ort: Weeze
118 Beiträge
 
#5

Re: Scrollen im TWebBrowser

  Alt 30. Mai 2004, 00:02
hast du activex und mshtml eingebunden? bei mir funktionieren beide Versionen!
Greetz

jAcK oRsEn
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#6

Re: Scrollen im TWebBrowser

  Alt 30. Mai 2004, 00:38
Also ein bissl Wissen hab ich mir ja zum Glück dank des netten Wetbewerbs angeeignet, unteranderem vieles zum TWebBrowser.
Und hier ist die gekürzte Variante für den Zugriff auf die ScrollPosition.

Code:
OleVariant(WebBrowser1.Document as IHTMLDocument2).Document.ScrollTo(0, 0);
OleVariant(WebBrowser1.Document as IHTMLDocument2).Body.ScrollTop := 0;
OleVariant(WebBrowser1.Document as IHTMLDocument2).Body.ScrollLeft := 0;

...

OleVariant(WebBrowser1.Document as IHTMLDocument2).Document.ScrollBy(x, y);
Also ab Document/Body ist das JavaScript-Syntax (überall nachlesbar - z.B. selfHTML)

Das Funktioniert 100%ig, aber wenn nicht, dann schau mal was du davon noch brauchst - hier mal ein Ausschnitt meines Uses-Bereichs:
XMLDOM, XMLIntf, MSXMLDOM, XMLDoc, IdHTTP, OleCtrls, SHDocVw, ActiveX, MSHTML...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Ungeübter

Registriert seit: 29. Mai 2004
16 Beiträge
 
#7

Re: Scrollen im TWebBrowser

  Alt 31. Mai 2004, 20:07
@Luckie:

Downloaden kann ich sie schon, allerdings stimmen, aufgrund der relativen Adressierung, dann die Beziehungen zwischen der Seite und allen anderen, welche ebenfalls auf dem Server liegen, nicht mehr.

@jAcK oRsEn:

Unter Einbindung der mshtml-uses funktioniert nun auch die zweite der Möglichkeiten, welche ich eingangs gepostet habe.
Leider mit dem selben Ergebnis, allerdings konnte ich den Fehler reproduzieren. Bei normalen Webseiten u.ä. funktionieren beide Möglichkeiten einwandfrei, bei dem Öffnen von Threads wird jedoch in manchen Foren gespeichert, welches der letzte gelesene Beitrag war. Öffnet man nun diesen Thread und versucht an das untere Ende des Dokumentes zu gelangen, bleibt regelmäßig ein Abstand zur Unterkante.
Das Hochscrollen geht dagegen fehlerlos.

@himitsu:

Die Befehle funktionieren auf jeden Fall erstmal, bei der genannten Problematik klappt es allerdings auch nicht (zuverlässig nach unten scrollen). Ich hatte es so versucht:

Code:
OleVariant(WebBrowser1.Document as IHTMLDocument2).Body.ScrollTop := WebBrowser1.OleObject.Document.ParentWindow.Screen.Height;
OleVariant(WebBrowser1.Document as IHTMLDocument2).Body.ScrollLeft := 0;

@All:

Eine, wenn auch sehr rustikale, Möglichkeit welche ich man benutzen kann, ist es dem Dokument den Fokus zu übergeben und die Eingabe der Taste "Ende" zu simulieren. Dabei habe ich bisher noch keine Fehler entdecken können. Allerdings habe ich bisher keine vernünftige Anweisung herausbekommen, um dem Dokument, welches innerhalb des Webbrowsers angezeigt wird, den Fokus zuzuweisen. Und mit einem simulierten Mausklick zu arbeiten ist ein bisschen Vielleicht weiß ja einer eine Möglichkeit, bitte posten.


Neben diesem habe ich noch ein kleines weiteres Problem, welches aber eigentlich simpel sein müsste. Na ja, eben müsste.
Es geht um eine schlichte Umleitung wiederum mit dem TWebBrowser. Laut der Hilfe von Delphi müsste eigentlich folgendes funktionieren:

Code:
procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin

  URL := 'http://www.google.de';

end;
Wie gesagt, die Delphihilfe spricht davon, dass das Verändern des Strings URL zum Umleiten genügen müsste. Nur tut es das bei mir nicht, die ursprünglich angeforderte Webseite wird normal geladen.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

Re: Scrollen im TWebBrowser

  Alt 23. Jan 2005, 10:08
Delphi-Quellcode:
function WB_ScrollTo(WB: TWebBrowser; Position: TWBPosition): Boolean;
var
  ParentW: OLEVariant;
begin
  Result := WB.Document <> nil;
  if Result then
  begin
    ParentW := WB.OleObject.Document.ParentWindow;
    case Position of
      wbPosBottom: ParentW.ScrollTo(0, ParentW.Screen.Height);
      wbPosTop: ParentW.ScrollTo(0, 0);
      wbPosRight: ParentW.ScrollTo(ParentW.Screen.Width, 0);
    end;
  end;
end;

// Example: Scroll to the bottom of the document:
procedure TForm1.Button1Click(Sender: TObject);
begin
  WB_ScrollTo(WebBrowser1, wbPosBottom);
end;
Feststellung: ParentW.Screen.Height wird maximal 864 Gross, egal wie Gross (Hoch) das geladene Dokument ist.
Wie kann man zuverlaessig ganz nach unten scrollen?
Thomas
  Mit Zitat antworten Zitat
cgimda

Registriert seit: 20. Jan 2005
5 Beiträge
 
#9

Re: Scrollen im TWebBrowser

  Alt 23. Jan 2005, 18:43
WebBrowser1.OleObject.Document.ParentWindow.ScrollTo(0,MaxInt); Du musst also ParentW.Screen.Height durch MaxInt ersetzen.

So müsste es funktionieren. Ich hoffe ich konnte dir helfen.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

Re: Scrollen im TWebBrowser

  Alt 23. Jan 2005, 22:52
Zitat von cgimda:
WebBrowser1.OleObject.Document.ParentWindow.ScrollTo(0,MaxInt); Du musst also ParentW.Screen.Height durch MaxInt ersetzen.
So müsste es funktionieren. Ich hoffe ich konnte dir helfen.
Danke, das hat so funktioniert.
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:28 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