脚本画的按钮点击一下怎么才能运行一次

function msg(value)
reaper.ShowConsoleMsg(tostring(value) … “\n”)
end
gfx.clear=1210758 --背景颜色
bname=‘第一个按钮’
wt="我的按钮 "
gfx.setfont(3, “arial”,30,40)
bw,bh=gfx.measurestr(bname) --获取名字的宽和高
ww=bw+30
wh=300
wx,wy=200, 300
gfx.init( wt, ww, wh,0, wx,wy ) --窗口初始化
gfx.set(0, 0, 0, 1) --黑色
gfx.rect(10,20,bw+3,bh+3) --画出按钮
gfx.set(1, 1, 1, 1) --白色
gfx.x, gfx.y=12,20
gfx.drawstr(bname) --画出按钮标题
function dianjianniu()
if gfx.mouse_x>10 and gfx.mouse_x<(bw+10) and gfx.mouse_y>20 and gfx.mouse_y<(bh+20) and gfx.mouse_cap==1 then msg(bw) end
if gfx.getchar()>=0 then reaper.defer(dianjianniu) end
end
dianjianniu()
点击一下按钮,脚本控制台输出3到4个数,怎么才能做到点一下运行一次

你说的

是指脚本运行后的窗口里面的按钮是吗?

如果是,那脚本的窗口只要不关闭,里面的按钮就是按一次运行一次。


顺便一说上述脚本的多个引号,都使用了全角引号,应使用英文引号才正确。

1 Like
function msg(value)
   reaper.ShowConsoleMsg(tostring(value)..'\n')
end
gfx.clear=1210758 --背景颜色
bname='第一个按钮'
wt="我的按钮 "
gfx.setfont(3, 'arial',30,40)
bw,bh=gfx.measurestr(bname) --获取名字的宽和高
ww=bw+30
wh=300
wx,wy=200, 300
gfx.init( wt, ww, wh,0, wx,wy ) --窗口初始化
gfx.set(0, 0, 0, 1) --黑色
gfx.rect(10,20,bw+3,bh+3) --画出按钮
gfx.set(1, 1, 1, 1) --白色
gfx.x, gfx.y=12,20
gfx.drawstr(bname) --画出按钮标题

local state_last=0  --初始化上一个状态
function dianjianniu()
  if gfx.mouse_x>10 and gfx.mouse_x<(bw+10) and gfx.mouse_y>20 and gfx.mouse_y<(bh+20) then
    if gfx.mouse_cap~=state_last then  --当前状态跟上一个状态不同
      if state_last==1 then msg(bw) end  --当前是0上一个是1,代表鼠标左键抬起,响应事件
      state_last=gfx.mouse_cap  --更新上一个状态
    end
  end
  if gfx.getchar()>=0 then reaper.defer(dianjianniu) end
end
dianjianniu()

改了一下,除了楼上说的新手错误以外,你的问题答案在于处理界面逻辑一个很常见的手法,引入一个变量,用于记录按钮的“上一个状态”,在上面代码里这个变量是 state_last,每次点击时不是马上响应具体事件(你的原代码就是这样),而是把按钮当前状态跟上一个状态做比较,只有在当前状态跟上一个状态有差异了才响应具体事件。我上面用的方式是响应“鼠标抬起”,你需要响应“鼠标按下”的话也可以自行修改

2 Likes

感谢两位大佬回答,明白为什么了。

谢谢,看它能运行,以为引号用对了