9

How to get and set TChromium scrollbar positions in Delphi ?

TLama
  • 75,147
  • 17
  • 214
  • 392
  • 9
    Voted to reopen. This is in my view a valid and useful question! There's not much to research (so not much to show as well), since it's probably impossible to get or set scrollbar positions in CEF. – TLama Dec 17 '12 at 21:20
  • Thank you for answer, I will try to another solution. – Pongpitak Rattanawicharn Dec 18 '12 at 12:46

3 Answers3

4

It's possible to work with javascript objects directly. Just use CefV8Context of the frame.

Here is an example:

var
    val: ICefV8Value;
    context: ICefv8Context;
    excp: ICefV8Exception;
    scroll: TPoint;
begin
    if (Chromium1.Browser.MainFrame = nil) then
      exit;

    //this will work only with exact frame
    context := Chromium1.Browser.MainFrame.GetV8Context;

    if (context <> nil) then
    begin
        context.Eval('window.pageXOffset', val, excp);
        scroll.x := val.GetIntValue;
        context.Eval('window.pageYOffset', val, excp);
        scroll.y := val.GetIntValue;
    end
    else
      exit;

    //todo: do something with scroll here
end;
kormizz
  • 41
  • 4
1

Currently playing with CefSharp, I do think that this is similar than in Delphi. Here is my solution:

public int GetVerticalScrollPosition()
{
    var r = _webView.EvaluateScript(@"document.body.scrollTop");
    return Convert.ToInt32(r);
}

public void SetVerticalScrollPosition(int pos)
{
    _webView.ExecuteScript(
        string.Format(@"document.body.scrollTop = {0}", pos));
}

I'm not that Delphi expert anymore, hope you can understand my code; basically I use JavaScript to read/write the scroll positions and execute these small JavaScript snippets through the EvaluateScript and ExecuteScript methods.

Community
  • 1
  • 1
Uwe Keim
  • 39,551
  • 56
  • 175
  • 291
0

You need to use JavaScript in TCromium.Browser. That's the easiest way:

Chromium1.Browser.MainFrame.ExecuteJavaScript('window.scrollBy(0,50)', 'about:blank', 0);

Good luck!

kwadratens
  • 187
  • 15