使用事件处理程序重绘 gl2 isigraphs
Redrawing gl2 isigraphs using event handler
我一直在玩 table 和 gl2 演示,并且多次遇到 "domain error: chkgl2"。
我想做的是在程序 运行 上初始化后通过选择/取消选择复选框来修改 isigraph。
我有以下代码:
demo_run=: 3 : 0
require 'gl2'
coinsert 'jgl2'
wd 'pc test closeok escclose'
wd 'pn "Tester"'
wd 'cc gs isigraph'
wd 'cc cb checkbox; cn "Test GUI"'
wd 'set cb value 0'
wd 'pmove 400 10 400 200'
wd 'pshow'
)
demo_cb_button=: 3 : 0
demo_gs_paint''
)
demo_gs_paint=: 3 : 0
'w h'=: glqwh''
glfill 0 0 0 255
glrgb 255 223 0
glpen 2 1
if. cb do.
for_i. 250*i. >. h%250 do.
gllines 0,i,w,i
end.
end.
)
demo_run''
我期待的是更新 isigraph 的复选框。我得到的是 "domain error: chkgl2" 在线 "glfill 0 0 0 255".
如有任何帮助,我们将不胜感激!
我发现了几件事:
1) 你称你的 parent 'test'
但你给动词一个 'demo'
前缀。您可以为动词 demo_run
执行此操作,但如果您希望形式的 children 做出反应,则需要以 test_cb_button
的形式引用它们
2) cb
在你的测试中实际上是字符 '1' 而不是整数 1,所以为了让它作为条件工作,你需要将它更改为整数类型。我使用 Do (".
) 进行了此更改 (". cb)
3) 我不确定您的代码 250*i. >. h%250
是否如您所愿,因此我将其替换为 i. >.h%15
,然后将 gllines
命令更改为 gllines 0,i,w,i*15
以获得更有趣的效果。
4) 您使用的 isigraph
会自动触发屏幕绘制,我想知道您是否正在单击触发屏幕绘制的按钮以更改按钮图像,同时还明确要求使用 test_gs_paint
动词绘制屏幕导致 glfill
成为 运行 两次。第二次它可能处于创建域错误的上下文中。老实说,我不知道。我所知道的是,当我改用 isidraw
并使用 glpaint ''
(isidraw
需要)触发我自己的绘画命令时,事情似乎有效。
5) 我已经添加了与 isigraph
一起使用的第二个版本,看起来问题是通过直接用 test_gs_paint
调用绘画动词你确实调用了它两次。通过将操作更改为 glpaint ''
,表单会重新 运行 整个表单的绘制一次,这也会导致 test_gs_paint
更新。不过这一次它以更加协调的方式进行。我的第二个版本反映了变化。我留下的其他更正。
我的 isidraw
版本的代码如下:
demo_run=: 3 : 0
require 'gl2'
coinsert 'jgl2'
wd 'pc test closeok escclose'
wd 'pn "Tester"'
wd 'cc gs isidraw' NB. changed from isigraph
wd 'cc cb checkbox; cn "Test GUI"'
wd 'set cb value 0'
wd 'pmove 400 10 400 200'
wd 'pshow'
)
test_cb_button=: 3 : 0
test_gs_paint''
)
test_gs_paint=: 3 : 0
'w h'=: glqwh''
glfill 0 0 0 255
glrgb 255 223 0
glpen 2 1
if. (".cb) do. NB. needed to test on an integer and not a character value
for_i. i. >.h%15 do. NB. changed to give a more noticeable effect
gllines 0,i,w,i*15
end.
end.
glpaint'' NB. added to accommodate isidraw requirement of explicit painting
)
demo_run''
我的 isigraph
版本的表格:
demo_run=: 3 : 0
require 'gl2'
coinsert 'jgl2'
wd 'pc test closeok escclose'
wd 'pn "Tester"'
wd 'cc gs isigraph'
wd 'cc cb checkbox; cn "Test GUI"'
wd 'set cb value 0'
wd 'pmove 400 10 400 200'
wd 'pshow'
)
test_cb_button=: 3 : 0
glpaint '' NB. changed from test_gs_paint ''
)
test_gs_paint=: 3 : 0
'w h'=: glqwh''
glfill 0 0 0 255
glrgb 255 223 0
glpen 2 1
if. (".cb) do.
for_i. i. >.h%15 do.
gllines 0,i,w,i*15
end.
end.
)
demo_run''
我一直在玩 table 和 gl2 演示,并且多次遇到 "domain error: chkgl2"。
我想做的是在程序 运行 上初始化后通过选择/取消选择复选框来修改 isigraph。
我有以下代码:
demo_run=: 3 : 0
require 'gl2'
coinsert 'jgl2'
wd 'pc test closeok escclose'
wd 'pn "Tester"'
wd 'cc gs isigraph'
wd 'cc cb checkbox; cn "Test GUI"'
wd 'set cb value 0'
wd 'pmove 400 10 400 200'
wd 'pshow'
)
demo_cb_button=: 3 : 0
demo_gs_paint''
)
demo_gs_paint=: 3 : 0
'w h'=: glqwh''
glfill 0 0 0 255
glrgb 255 223 0
glpen 2 1
if. cb do.
for_i. 250*i. >. h%250 do.
gllines 0,i,w,i
end.
end.
)
demo_run''
我期待的是更新 isigraph 的复选框。我得到的是 "domain error: chkgl2" 在线 "glfill 0 0 0 255".
如有任何帮助,我们将不胜感激!
我发现了几件事:
1) 你称你的 parent 'test'
但你给动词一个 'demo'
前缀。您可以为动词 demo_run
执行此操作,但如果您希望形式的 children 做出反应,则需要以 test_cb_button
2) cb
在你的测试中实际上是字符 '1' 而不是整数 1,所以为了让它作为条件工作,你需要将它更改为整数类型。我使用 Do (".
) 进行了此更改 (". cb)
3) 我不确定您的代码 250*i. >. h%250
是否如您所愿,因此我将其替换为 i. >.h%15
,然后将 gllines
命令更改为 gllines 0,i,w,i*15
以获得更有趣的效果。
4) 您使用的 isigraph
会自动触发屏幕绘制,我想知道您是否正在单击触发屏幕绘制的按钮以更改按钮图像,同时还明确要求使用 test_gs_paint
动词绘制屏幕导致 glfill
成为 运行 两次。第二次它可能处于创建域错误的上下文中。老实说,我不知道。我所知道的是,当我改用 isidraw
并使用 glpaint ''
(isidraw
需要)触发我自己的绘画命令时,事情似乎有效。
5) 我已经添加了与 isigraph
一起使用的第二个版本,看起来问题是通过直接用 test_gs_paint
调用绘画动词你确实调用了它两次。通过将操作更改为 glpaint ''
,表单会重新 运行 整个表单的绘制一次,这也会导致 test_gs_paint
更新。不过这一次它以更加协调的方式进行。我的第二个版本反映了变化。我留下的其他更正。
我的 isidraw
版本的代码如下:
demo_run=: 3 : 0
require 'gl2'
coinsert 'jgl2'
wd 'pc test closeok escclose'
wd 'pn "Tester"'
wd 'cc gs isidraw' NB. changed from isigraph
wd 'cc cb checkbox; cn "Test GUI"'
wd 'set cb value 0'
wd 'pmove 400 10 400 200'
wd 'pshow'
)
test_cb_button=: 3 : 0
test_gs_paint''
)
test_gs_paint=: 3 : 0
'w h'=: glqwh''
glfill 0 0 0 255
glrgb 255 223 0
glpen 2 1
if. (".cb) do. NB. needed to test on an integer and not a character value
for_i. i. >.h%15 do. NB. changed to give a more noticeable effect
gllines 0,i,w,i*15
end.
end.
glpaint'' NB. added to accommodate isidraw requirement of explicit painting
)
demo_run''
我的 isigraph
版本的表格:
demo_run=: 3 : 0
require 'gl2'
coinsert 'jgl2'
wd 'pc test closeok escclose'
wd 'pn "Tester"'
wd 'cc gs isigraph'
wd 'cc cb checkbox; cn "Test GUI"'
wd 'set cb value 0'
wd 'pmove 400 10 400 200'
wd 'pshow'
)
test_cb_button=: 3 : 0
glpaint '' NB. changed from test_gs_paint ''
)
test_gs_paint=: 3 : 0
'w h'=: glqwh''
glfill 0 0 0 255
glrgb 255 223 0
glpen 2 1
if. (".cb) do.
for_i. i. >.h%15 do.
gllines 0,i,w,i*15
end.
end.
)
demo_run''