2012-12-17 62 views
8

如何获取并设置德尔福的滚动条位置TChromium如何获取并设置TChromium滚动条位置?

+9

投票重新开放。这在我看来是一个有效且有用的问题!没有太多需要研究的地方(所以没有太多的展示),因为在CEF中获取或设置滚动条位置可能是不可能的。 – TLama

+0

谢谢你的回答,我会尝试另一种解决方案。 –

回答

1

目前玩CefSharp,我认为这与Delphi相似。这里是我的解决方案:

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)); 
} 

我不是那个Delphi专家了,希望你能理解我的代码;基本上I use JavaScript to read/write the scroll positions并通过EvaluateScriptExecuteScript方法执行这些小JavaScript片段。

3

可以直接使用JavaScript对象。只需使用框架的CefV8Context。

这里有一个例子:

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; 
0

您需要TCromium.Browser使用JavaScript。这是最简单的方法:

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

祝你好运!