2012-12-17 33 views
8

Cách nhận và đặt TChromium vị trí thanh cuộn ở Delphi?Cách nhận và đặt vị trí thanh cuộn TChromium?

+9

Đã bỏ phiếu để mở lại. Đây là quan điểm của tôi về một câu hỏi hữu ích và hữu ích! Không có nhiều để nghiên cứu (do đó không có nhiều để hiển thị là tốt), vì nó có thể không thể có được hoặc thiết lập các vị trí thanh cuộn trong CEF. – TLama

+0

Cảm ơn bạn đã trả lời, tôi sẽ thử một giải pháp khác. –

Trả lời

1

Hiện đang chơi với CefSharp, tôi nghĩ rằng điều này tương tự như trong Delphi. Đây là giải pháp của tôi:

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

Tôi không phải là chuyên gia Delphi nữa, hy vọng bạn có thể hiểu mã của tôi; về cơ bản I use JavaScript to read/write the scroll positions và thực thi các đoạn mã JavaScript nhỏ này thông qua các phương thức EvaluateScriptExecuteScript.

3

Có thể làm việc trực tiếp với các đối tượng javascript. Chỉ cần sử dụng CefV8Context của khung.

Đây là một mẫu:

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

Bạn cần phải sử dụng JavaScript trong TCromium.Browser. Đó là cách dễ nhất:

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

Chúc may mắn!

Các vấn đề liên quan