Try using Node.DisplayRect(True/False ?) for the actual Canvas rectangle area.
This reports the actual location you need to be, from there you can calculate, It think the parameters you are using are based
from a non scrolled windows, because you can also query the ScrolledLeft and ScrollTop information..
The Display rectangle should return a TRECT with all the info in it.