我一直在玩表格和gl2演示,并且多次遇到“域错误: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的复选框。我得到的是“ glfill 0 0 0 255”行上的“域错误:chkgl2”。
任何帮助将不胜感激!
答案 0 :(得分:1)
我发现的几件事:
1)您正在给父母'test'
打电话,但给动词加上了'demo'
前缀。您可以对动词demo_run
进行此操作,但是如果希望表单的子代做出反应,则需要以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''