#Persistent
; gui的g标签 和settimer早就支持函数
; 标签太多的话 变量名容易混 变量值容易被搞错
; 像 for k,v 这种常见取名 我已经取到 for k6,v6了
; 还是出错了
; 是的 用 settimer 调用函数 同时传参
; 就是把某个函数连同其参数 绑定到一个变量上 然后 settimer 那个变量
; 精简版示例
ceshi := Func("HideGui").Bind("预设传参11")
SetTimer, %ceshi%, -50
Return
HideGui(s:="") {
ToolTip % "传参为:" s
}
/*
#Persistent
a := Func("HideGui").Bind("预设传参11")
b := a
SetTimer, %a%, 100
Return
HideGui(s:="") {
ToolTip % "传参为:" s
}
F1::SetTimer, %b%, Off
*/
; 以下是一个单独的例子
; Timer(function, period, priority, parameters*)
timer1 := new Timer("ShowParams", 250,, "一", "二", "三") ;绑定参数
timer1.On() ; 启动计时器
Sleep, 2000
timer2 := new Timer("ShowParams", 550,, 1, 2) ;绑定参数
timer2.On() ; 启动计时器
Sleep, 3000
timer2.Off() ; 暂停计时器
timer2 := "" ; 删除计时器
ShowParams(a, b, c := 3){
Tooltip, %a%-%b%-%c%
}
class Timer {
__New(callback, period := 250, priority := 0, params*) {
if (!IsFunc(callback)) ; 不存在该函数
throw Exception("Call to nonexistent function", -1)
else if (!params.MaxIndex()) ; 无参数传入
this.binding := Func(callback)
else if (params.MaxIndex() < Func(callback).MinParams) ; 参数过少
throw Exception("Too few parameters passed to funcion", -1)
else if (params.MaxIndex() > Func(callback).MaxParams and !Func(callback).IsVariadic) ; 参数过多
throw Exception("Too many parameters passed to funcion", -1)
else
this.binding := Func(callback).Bind(params*)
this.period := period
this.priority := priority
}
__Delete(){
funcObj := this.binding
SetTimer, %funcObj%, Delete
}
On(){
funcObj := this.binding
SetTimer, %funcObj%, % this.period, % this.priority
}
Off(){
funcObj := this.binding
SetTimer, %funcObj%, off
}
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)