惮殃赤贫lv0

概览

发布的

订单

邀请码

关注

粉丝

收藏

设置

  • 。。。不造为毛格式变成那样,坛主将就着测试吧

    私密:[第二关]一键多用设计
  • 再来~这次符合主题了

    f1::
    KCLable("F1", f1func_dict, ["消息1", "消息2", "消息3", "消息4", "消息5"])
    return

    消息1:
    消息2:
    消息3:
    消息4:
    消息5:
    MsgBox, % A_ThisLabel
    return

    /*
    功能描述:
    短击设定按键显示功能项目
    长按选择功能
    超时退出

    主函数:

    KCLable() __ Key Chose Lable
    参1:keyname_str 待激活的按键,为字符串
    参2:choscount_dict 设定用以统计列表功能选择次数的字典,酌情舍去
    参3:lablefunc_strlist 选择标签的列表,为字符串列表
    参4:waitsec_int 超时未切换或未选择退出,单位为妙,可为浮点数, 默认值2
    参5:chosgototm_int 长按选择功能时间,单位毫秒, 默认值300
    其他:无返回值

    子函数:
    1.LsToStr(lablefunc_list, focusline_int) : 不可复用,将列表转换为行格式的多行字符串返回,用于tooltip

    2.NMsecSubt(tmlsA, tmlsB): 可复用,以列表方式时间计算函数,计算系统时间差,用以判断按键按击时间

    3.sortDicToLs(thels, byref __diccount): 修改后可复用,将字典键的值以从大到小顺序排列为列表,输出该列表

    4.varInlist(var, ls): 可复用,判断值是否在列表中
    */

    KCLable(keyname_str, ByRef choscount_dict,lablefunc_strlist, waitsec_int := 1, chosgototm_int := 200) { ;主函数
    foucs_int := 1 ;每次按键初始焦点位置
    ;*** 功能选择次数统计点1 ***
    lablefunc_strlist := sortDicToLs(lablefunc_strlist, choscount_dict)
    ToolTip, % LsToStr(lablefunc_strlist, foucs_int)
    keywait, % keyname_str
    loop {
    KeyWait, % keyname_str, % "DT" waitsec_int
    if (ErrorLevel) {
    tooltip
    break
    }
    else {
    __noww := [A_Now, A_MSec]
    keywait, % keyname_str
    ;长按时选择功能后退出
    __gotsince := [A_Now, A_MSec]
    __gotPE := NMsecSubt(__gotsince, __noww)
    if (__gotPE >= chosgototm_int) {
    gosub, % lablefunc_strlist[foucs_int]
    ;*** 功能选择次数统计点2 ***
    choscount_dict[lablefunc_strlist[foucs_int]] += 1
    tooltip
    ; 此处完成功能,计数标签功能选择次数并排序
    break
    }
    ;短按切换焦点
    else {
    foucs_int += 1
    if (foucs_int > lablefunc_strlist.MaxIndex())
    foucs_int := 1
    ToolTip, % LsToStr(lablefunc_strlist, foucs_int)
    }
    }
    }
    }

    LsToStr(lablefunc_list, focusline_int) { ;将列表设置为某种格式
    rt_str =
    for i in lablefunc_list
    {
    ;首行
    if (i == 1) {
    if (i == focusline_int)
    rt_str := % "> " lablefunc_list[i]
    else
    rt_str := % " " lablefunc_list[i]
    }
    ;非首行
    else {
    if (i == focusline_int)
    rt_str := % rt_str "n> " lablefunc_list[i]
    else
    rt_str := % rt_str "n " lablefunc_list[i]
    }
    }
    return rt_str
    }

    NMsecSubt(tmlsA, tmlsB) { ;计算两时间点列表值的差,返回单位毫秒
    subSVar := tmlsA[1]
    subSVar -= tmlsB[1], s ;两数相减的秒数
    if (subVar != 0)
    return % (subSVar * 1000) + (tmlsA[2] - tmlsB[2])
    else
    return % (tmlsA[2] - tmlsB[2])
    }

    sortDicToLs(thels, byref __diccount) { ;将字典键的值以从大到小顺序排列为列表,输出该列表

    for i in __diccount
    i := i
    if (!i) { ;字典为空,创建字典
    __diccount := {}
    for i in thels
    __diccount.Insert(thels[i], 0)
    newls := thels
    }
    else { ;字典不为空,根据字典值,升序排列
    maxit :=
    newls := []
    for thei in thels
    {
    ;寻找字典中的最大值
    maxit := 0 ;最大值初始

    for keyName in __diccount
    {
    iF !varInlist(keyName, newls)
    {
    if (!maxit)
    maxit := __diccount[keyName]
    if (__diccount[keyName] > maxit)
    maxit := __diccount[keyName]
    }
    }
    ;寻找字典中的最大值的首位键
    for theindex in thels
    {
    nowlsindex := thels[theindex]
    if !varInlist(nowlsindex, newls) ;当前循环到的值不在新列表中
    {
    TT := thels[theindex]
    if (__diccount[TT] == maxit)
    {
    maxkey := thels[theindex]
    break
    }
    }
    }
    newls.Insert(maxkey)
    }
    }
    return newls

    }

    varInlist(var, ls) {
    for i in ls
    {
    if (ls[i] == var)
    return 1
    }
    return 0
    }

    私密:[第二关]一键多用设计
  • 额..果然0.0不好意思,没看清题目

    私密:[第二关]一键多用设计
  • 。。。参考代码是没有,就是文档翻晕了。。这个进度条长度计算没有什么难度,以前写游戏脚本用过A_now -= 这样计时,sleep有点尴尬,但是短时内的计时有Msec这样的缺陷我是早发现了,近期是喜欢上list数组列表,刚好练练手也解决一个早期的未了目标什么的。。。

    私密:[第一关]设置一个置顶于屏幕的倒计时!
  • 目测少了一大段。。。是不是论坛bug

    私密:[第二关]一键多用设计
  • 用鼠标中键选择剪切板内容,linenum 变量初始为5....写完看上去可以用来做库函数示例的复制黏贴

    私密:[第二关]一键多用设计
  • #NoEnv
    #SingleInstance FORCE
    #Persistent
    CoordMode, tooltip, screen

    ;testFilepath = % A_ScriptDir "\" lineList.txt ;测试文件名称
    testFilepath := % A_ScriptFullPath ;*****以本脚本内容为例,可更改

    global linenum := 20 ;*****设定显示行数,决定焦点位置,可以更改

    global cliplist := FlLiToList(testFilepath) ;创建粘粘列表
    global maxIlength := StrLen(cliplist.MaxIndex()) ;列表极限数量字符长度
    global FocusLine := 1 ;初始关注焦点

    global showway := % (!Mod(linenum, 2)) ? (Floor(linenum / 2)) : Ceil(linenum / 2) ;focusline显示位置

    infofresh := 80 ;信息刷新时间间隔
    keyfocusgetsleep := 20 ;按键切换功能休眠时间
    return

    MButton::
    if (show1 := !show1) {
    SetTimer, tooltip, % show1 ? infofresh : ("off")
    show2 := 1
    }
    else
    ToolTip
    return

    #if show1

    ;ctrl + 上键 焦点前移
    WheelUp::
    FocusLine -= 1 ;关注焦点上移,对应序号往前
    if (FocusLine = cliplist.MaxIndex())
    FocusLine := 1 ;至顶部

    cliptex := % cliplist[FocusLine]
    clip_change(cliptex)
    sleep % keyfocusgetsleep
    return

    ;tooltip显示排版
    tooltip:
    if (show2 != 1) { ;刚切换模式时
    tooltex := maketoollist()
    if (extext = tooltex) ;若上一次显示的内容与此次 相同,不显示ToolTip,解决闪屏
    return
    }
    show2 = 2
    if cliplist.MaxIndex() { ;若列表不为空,显示排版
    ;若上一次显示的内容与此次 相同,不显示ToolTip
    ToolTip, % tooltex, 0, 0
    WinSet, TransColor, Color [N], WinTitle

    extext := tooltex
    }
    else
    ToolTip, [黏贴列表为空], 0, 0
    return

    maketoollist() { ;设定tooltip排版
    rtTex := 0
    ;1.列表小于linenum数时,列表不增不减,关注焦点为focusline
    if (cliplist.MaxIndex() <= linenum) { ;设定显示行数大于列表数量时,随focusline焦点
    for i in cliplist
    {
    foc := i
    if (i = 1) && (FocusLine = 1)
    rtTex := % preCHO(foc) cliplist[foc]
    else if (i != 1) && (FocusLine = 1)
    rtTex := % rtTex "`n" preBLK(foc) cliplist[foc]
    else if (i != 1) && (i = FocusLine)
    rtTex := % rtTex "`n" preCHO(foc) cliplist[foc]
    }
    }
    ;2.showway以上或以下小于裁剪数量时,分别增量反方向的行数
    else if (FocusLine (!Mod(linenum, 2) ? (cliplist.MaxIndex() - showway) : (cliplist.MaxIndex() - showway))) {
    loop, % cliplist.MaxIndex() - FocusLine + showway
    {
    foc := % focusline - showway + A_Index
    if A_Index = 1
    rtTex := % preBLK(foc) cliplist[foc]
    else if ((foc) = FocusLine)
    rtTex := % rtTex "`n" preCHO(foc) cliplist[foc]
    else
    rtTex := % rtTex "`n" preBLK(foc) cliplist[foc]

    if (foc) = cliplist.MaxIndex()
    break
    }

    downtopnum := % linenum - (cliplist.MaxIndex() - (focusline - showway))
    Loop, % downtopnum
    {
    rtTex := % rtTex "`n" preBLK(A_Index) cliplist[A_Index]
    }
    }
    ;3.正常显示方式,
    else {
    foc := % FocusLine - showway + 1
    loop % linenum
    {
    if a_INDEX = 1
    rtTex := % (FocusLine = 1) ? preCHO(foc) : preBLK(foc) cliplist[foc]
    else
    rtTex := % rtTex "`n" ((foc != FocusLine) ? preBLK(foc) : preCHO(foc)) cliplist[foc]
    foc += 1
    }
    }
    return % rtTex
    }

    ;将字符串置入粘贴板
    clip_change(to_clipboard)
    {
    Clipboard :=
    Clipboard := % to_clipboard
    ClipWait
    }

    preCHO(inchar) { ;前置显示选中
    mid := % "> "
    gotforlen := maxIlength - StrLen(inchar)
    Loop %gotforlen%
    Bfor := % Bfor "0"
    return % Bfor inchar " |" mid
    }

    preBLK(inchar) { ;前置显示空白
    mid := % " "
    gotforlen := maxIlength - StrLen(inchar)
    Loop %gotforlen%
    Bfor := % Bfor "0"
    return % Bfor inchar " |" mid
    }

    FlLiToList(filelongpath) { ;将true每行内容写入列表,返回列表
    Array1 := []
    loop, read, % filelongpath
    {
    if A_LoopReadLine
    Array1.Insert(A_LoopReadLine)
    }
    if !Array1.MaxIndex()
    return 0
    else
    return % Array1
    }

    私密:[第二关]一键多用设计
  • Gui, Add, Progress, x-1 y-1 w300 h27 c293d3f Backgroundf6f8da vMyProgress
    改了下第四行,看上去更符合逻辑哈。。
    第八行注释有误,是[每毫秒]

    私密:[第一关]设置一个置顶于屏幕的倒计时!
  • GUI, -sysmenu +AlwaysOnTop -caption +Border
    gui,font, cf6f8da s12, Consolas
    Gui, Add, text, x301 y2 w300 h25 vmytex, :0
    Gui, Add, Progress, x0 y0 w300 h25 cf6f8da Background293d3f vMyProgress
    GuiControl,, MyProgress, 0
    ;获取倒计时间隔秒数
    inputbox, waitingSec, 输入等待时间`,单位为秒
    ;每秒所占的像素单位长度
    perMSecWide := 100 / waitingSec / 1000
    ;记录开始时间
    startTNow := A_Now
    startTMSec := A_MSec
    startT := [startTNow, startTMSec]
    ;计算结束时间
    startTNow += waitingSec, s
    stopT := [startTNow, startTMSec] ;结束时间0
    ;显示进度条
    gui, COLOR, 293d3f
    gui, show, x100 y20 w390 h25
    ;计算改变进度条
    loop {
    noww := [A_Now, A_MSec]
    wide := Floor(NMsecSubt(noww, startT) * 1000 * perMSecWide)
    if (NMsecSubt(noww, stopT) &amp;lt; 0) {
    GuiControl, , MyProgress, % wide
    ttttt := % NMsecSubt(stopT, noww)
    StringTrimRight, ttttt, ttttt, 3
    GuiControl, , mytex, % &amp;quot;:&amp;quot; ttttt
    }
    else
    break
    }
    GuiControl,, MyProgress, 100
    ExitApp

    NMsecSubt(tmlsA, tmlsB) { ;计算两时间点列表值的差
    subSVar := tmlsA[1]
    subSVar -= tmlsB[1], s ;两数相减的秒数
    if (subVar != 0)
    return % subSVar + ((tmlsA[2] - tmlsB[2]) / 1000)
    else
    return % (tmlsA[2] - tmlsB[2]) / 1000
    }

    私密:[第一关]设置一个置顶于屏幕的倒计时!
个人中心
购物车
优惠劵
有新私信 私信列表
搜索