以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  画线问题请教  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=2178)

--  作者:xyhsoft
--  发布时间:2010/7/19 23:08:26
--  画线问题请教

 

如图,上面一根线是用程序的画线工具画的,下面的一根是自己用VBS代码画的,但在窗格的右边,上面的一根过Y轴右边的部分不可见,而下面的一根过Y轴右边是看得见的。不知有什么方法,使下面的自己画的线在Y轴右边也不可见?

 

VBS代码如下:

 

Sub Technic_Paint()
     set Grid = technic.ActiveGrid
     start_x = Grid.PelsByPos(3600,false)
     start_y = Grid.PriceToPels(5.20)

     end_x = Grid.PelsByPos(3660,false)
     end_y = Grid.PriceToPels(4.20)
 
     call Grid.DrawLine (start_x, start_y, end_x, end_y)  

End Sub

 

 



--  作者:admin
--  发布时间:2010/7/20 17:55:10
--  

TopHeight         当前窗格上边距高度,以象素表示,该边距通常用来显示公式数据,可读写。

LeftWidth         当前窗格左边距宽度,以象素表示,该边距通常用来显示左Y坐标,可读写。

RightWidth        当前窗格右边距宽度,以象素表示,该边距通常用来显示右Y坐标,可读写。

BottomHeight      当前窗格下边距高度,以象素表示,该边距通常用来显示X坐标,可读写。

 

将上述属性考虑进去即可。

 

Sub Technic_Paint()
     set Grid = technic.ActiveGrid
     start_x = Grid.PelsByPos(3600,false)
     start_y = Grid.PriceToPels(5.20)

     end_x = Grid.PelsByPos(3660,false)
     end_y = Grid.PriceToPels(4.20)

 

     if end_x > Grid.Width - Grid.RightWidth then

        end_x = Grid.Width - Grid.RightWidth

     end if

    \'其他限制代码,自己加上去即可
 
     call Grid.DrawLine (start_x, start_y, end_x, end_y)  

End Sub


--  作者:明心
--  发布时间:2010/7/21 8:58:48
--  
顶一下,学习了。
--  作者:xyhsoft
--  发布时间:2010/7/21 10:33:51
--  
以下是引用admin在2010-7-20 17:55:10的发言:

TopHeight         当前窗格上边距高度,以象素表示,该边距通常用来显示公式数据,可读写。

LeftWidth         当前窗格左边距宽度,以象素表示,该边距通常用来显示左Y坐标,可读写。

RightWidth        当前窗格右边距宽度,以象素表示,该边距通常用来显示右Y坐标,可读写。

BottomHeight      当前窗格下边距高度,以象素表示,该边距通常用来显示X坐标,可读写。

 

将上述属性考虑进去即可。

 

Sub Technic_Paint()
     set Grid = technic.ActiveGrid
     start_x = Grid.PelsByPos(3600,false)
     start_y = Grid.PriceToPels(5.20)

     end_x = Grid.PelsByPos(3660,false)
     end_y = Grid.PriceToPels(4.20)

 

     if end_x > Grid.Width - Grid.RightWidth then

        end_x = Grid.Width - Grid.RightWidth

     end if

    \'其他限制代码,自己加上去即可
 
     call Grid.DrawLine (start_x, start_y, end_x, end_y)  

End Sub

版主,这种方式不行哦,X轴坐标变化了,其相对应的Y轴坐标没有变,当将整幅K线图形向右移动过程中,那画出的线的位置是不断变化的。即:整幅K线图形向右水平移动到右边界,继续右移时,所画线的初位置(start_x, start_y)变化,而末位置( end_x, end_y)不变。
 
[此贴子已经被作者于2010-7-21 10:44:22编辑过]

--  作者:admin
--  发布时间:2010/7/21 10:38:26
--  
道理是一样的,你可以先把代码写上去,测试一下,如果还是不对,再来说明原因和问题
--  作者:xyhsoft
--  发布时间:2010/7/21 10:46:56
--  
测试一下,原因和问题如4楼说明。要保持原图不变,对应的end_y也要重新计算了。要是复杂图形,那就太复杂了。还有没有别的方法呢?
[此贴子已经被作者于2010-7-21 10:54:28编辑过]

--  作者:admin
--  发布时间:2010/7/21 10:55:21
--  

将4个坐标数字都进行坐标范围的规范

if start_x < 0 then

   start_x = 0

end if

 

if start_x > Grid.Height - Grid.BottomHeight

   start_x = Grid.Height - Grid.BottomHeight

end if

 

if start_x > Grid.Width - Grid.RightWidth then

   start_x = Grid.Width - Grid.RightWidth

end if

 

start_y 其余参数依次类推


--  作者:xyhsoft
--  发布时间:2010/7/21 11:03:38
--  
请版主再看看,原因和问题如4楼说明。画面移动时,要保持原图不变,对应的end_y也要重新计算了。要是复杂图形,那就太复杂了。还有没有别的方法呢?
--  作者:admin
--  发布时间:2010/7/21 13:54:27
--  

没有什么办法,我们编程序都需要自己处理边界问题的


--  作者:xyhsoft
--  发布时间:2010/7/22 0:04:42
--  

(链接的图形质量好差啊)

 

显示问题已解决,谢谢版主解答。

 

但还需两个转换函数,用于获取数据,但编译器通不过:

 FrameToGrid(x1, y1, x2, y2)
 ValueByPoint(x, y, Date, ydata, false)

上面两个都通不过。

[此贴子已经被作者于2010-7-22 0:07:32编辑过]