2012-12-17 8 views
8

Jak uzyskać i ustawić TChromium pozycji paska przewijania w Delphi?Jak uzyskać i ustawić pozycje paska przewijania TChromium?

+9

Zagłosowano na ponowne otwarcie. Moim zdaniem jest to ważne i użyteczne pytanie! Nie ma wiele do zbadania (więc nie wiele do pokazania), ponieważ prawdopodobnie niemożliwe jest uzyskanie lub ustawienie pozycji paska przewijania w CEF. – TLama

+0

Dziękuję za odpowiedź, spróbuję innego rozwiązania. –

Odpowiedz

1

Obecnie gra z CefSharp, myślę, że to jest podobne niż w Delphi. Oto moje rozwiązanie:

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

Nie jestem już ekspertem od Delphi, mam nadzieję, że rozumiesz mój kod; zasadniczo I use JavaScript to read/write the scroll positions i wykonaj te małe fragmenty kodu JavaScript za pomocą metod EvaluateScript i ExecuteScript.

3

Możliwe jest bezpośrednie działanie z obiektami javascript. Wystarczy użyć CefV8Context ramki.

Oto przykład:

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

Trzeba użyć JavaScript w TCromium.Browser. To najprostszy sposób:

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

Powodzenia!

Powiązane problemy