SetBatchLines -1

WinW := XPos2 := 300
Gui Font, s14, Microsoft YaHei UI
text := "测试Gui显示文字的循环滚动效果"
Gui +ToolWindow
Gui Add, Text, x%XPos2% y15 BackgroundTrans vtext4, %text%

GuiControlGet, Text4, Pos
Gui Add, Text, % "x-999 y10 w9999 h" (Text4H += 10) " +0x12"  ; 上下分割线

Gui Show, w%WinW% h60, 滚动文字展示
计时()
; /*
SetTimer Animate, 15
Return

Animate:
GuiControl Move, Text4, % "x" (XPos2-=2)
GuiControlGet Text4, Pos
If (text4X + text4W < 0)
  MsgBox % "耗时:" 计时() " 毫秒"
Return
*/

; Loop会占有线程,Loop+Sleep的精度计算与SetTimer不一样
  Loop {
    Sleep 20
    GuiControl Move, Text4, % "x" (XPos2-=2)
    GuiControlGet Text4, Pos
    If (text4X + text4W < 0)
      MsgBox % "耗时:" 计时() " 毫秒"
  }
  ; Gui Hide
Return

GuiClose:
  ExitApp



; SetTimer15耗时:4528.450300 毫秒
; SetTimer16耗时:7224.736900 毫秒

; Loop+Sleep20耗时:4519.076900 毫秒
; Loop+Sleep21耗时:7241.284200 毫秒

; 测完了,SetTimer精度=Sleep-5。都有精度问题,就是表现的不一样而已。
; 精度有个阶级段位,15和16数值上差1,但是精度段位差一个阶级


计时() {
  Static
  if 开始=
    DllCall("QueryPerformanceFrequency", "Int64*", 频率), DllCall("QueryPerformanceCounter", "Int64*", 开始)
   else
    DllCall("QueryPerformanceCounter", "Int64*", 结束), 耗时:=(结束 - 开始)/频率*1000, 开始:=""
  Return 耗时
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。