找回密码
 加入
搜索
查看: 3762|回复: 6

[AU3基础] 关于ControlMove的移动问题

  [复制链接]
发表于 2010-5-7 16:21:58 | 显示全部楼层 |阅读模式
在一个GUI窗口。。
如何让一个 文本 通过ControlMove命令 慢速像上移动??
我设置后 文本都是一下子 就移动到制定坐标了。我想让它慢慢移动。也就是动态的移动。。
大大们能给个例子么??
发表于 2010-5-7 19:30:37 | 显示全部楼层
论坛上面有很多这种例子啊
写个简单一点的例子。

  1. #include <GUIConstantsEx.au3>
  2. Opt ("GUIOnEventMode",1)
  3. $GUI = GUICreate("test", @DesktopWidth-100, @DesktopHeight-100, -1, -1);, 0x80000000, 0x00080088
  4. GUISetOnEvent ($GUI_EVENT_CLOSE,"_exit")
  5. $lable1 = GUICtrlCreateLabel("移动的文字",500,500, 300, 100)
  6. GUICtrlSetFont(-1, 30, 800, 0, "楷体_GB2312")
  7. GUISetState(@SW_SHOW)
  8. $pos = ControlGetPos($GUI,"",$lable1)
  9. $y = $pos[1]
  10. $move = 1
  11. While 1
  12.         If $move Then
  13.                 ControlMove ("test","",$lable1,Default,$y)
  14.                 $y -= $move
  15.         EndIf
  16.         If $y<1 Then $move = -1
  17.         If $y>500 Then $move = 1
  18.         Sleep (10)
  19. WEnd

  20. Func _exit ()
  21.         Exit
  22. EndFunc
复制代码

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-5-7 20:34:13 | 显示全部楼层
 楼主| 发表于 2010-5-8 09:42:11 | 显示全部楼层
本帖最后由 woeiwoei 于 2010-5-8 10:02 编辑
  1. #include <GDIPlus.au3>
  2. #include <GuiComboBox.au3>
  3. #include <File.au3>
  4. #include <Array.au3>
  5. #include <WindowsConstants.au3>
  6. #include <GuiConstantsEx.au3>
  7. #include <ButtonConstants.au3>
  8. #include <SliderConstants.au3>
  9. #include <Date.au3>
  10. Global $Label,$controlGui[9], $text
  11. $ini =@ScriptDir&"\config.ini"
  12. $txt = IniRead($ini, "设置", "网吧公告", "")
  13. Opt("MustDeclareVars", 0)
  14. Global Const $AC_SRC_ALPHA = 1
  15. _GDIPlus_Startup()
  16. $Src = @scriptdir&"\beijing.png"
  17. $hImage =_GDIPlus_ImageLoadFromFile($Src)
  18. $width =  _GDIPlus_ImageGetWidth ($hImage)
  19. $height = _GDIPlus_ImageGetHeight($hImage)
  20. $GUI = GUICreate("Chat Tools", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
  21. SetBitMap($GUI, $hImage, 0)
  22. $Label1 = GUICtrlCreateLabel("", 360, 8, 30, 30)
  23. $Label2 = GUICtrlCreateLabel("", 330, 8, 30, 30)
  24. GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
  25. GUISetState()
  26. WinSetOnTop($gui,"",1)
  27. for $i = 0 to 255 step 10
  28. SetBitMap($GUI, $hImage, $i)
  29. next
  30. $font="方正粗活意简体"
  31. $controlGui[0] = GUICreate("ControlGUI", $width, $height, 0,0,$WS_POPUP,BitOR($WS_EX_LAYERED,$WS_EX_MDICHILD),$gui)
  32. GUICtrlCreatePic(@ScriptDir & "\grey.gif",0,0,$width,$height)
  33. GuiCtrlSetState(-1,$GUI_DISABLE)
  34. GUICtrlCreateLabel("梦幻王国网吧公告", 25, 25, 140, 50)
  35. GUICtrlSetFont(-1,12,'','',$font)
  36. GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
  37. GUICtrlSetColor(-1, 0x123456)
  38. $clock=GUICtrlCreateLabel("",200,30,200,20)
  39. GUICtrlSetFont(-1,10)
  40. GUICtrlSetColor(-1, 0x000000)
  41. GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
  42. GUISetState(@SW_SHOW)
  43. $text=GUICtrlCreateLabel($txt,60, 240, 400, 15)
  44. GuiCtrlSetFont(-1, 10)
  45. GUICtrlSetBkColor(-1,$GUI_BKCOLOR_TRANSPARENT)
  46. GUICtrlSetColor(-1,0x000000)



  47. _WinAPI_DeleteObject($hImage)
  48. _GDIPlus_Shutdown()
  49. Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
  50.   if ($hWnd = $GUI) and ($iMsg = $WM_NCHITTEST) then Return $HTCAPTION
  51. EndFunc
  52. $num=0
  53. $b=1

  54. While $num <= 2500
  55.         If $b = 240 Then $b = 10
  56.                 Sleep(100)
  57.                 ControlMove ('',$txt,$text,60,240-$b,400,15)
  58.                 $b += 1
  59.         $num = $num + 1
  60. _ReduceMemory(@AutoItPID)
  61. $LbR = GUICtrlRead($clock)
  62. $Nw = _Now()
  63. If $Nw <> $LbR Then GUICtrlSetData($clock, $Nw)
  64. $nMsg = GUIGetMsg()
  65. Switch $nMsg
  66.         Case $GUI_EVENT_CLOSE
  67.                 Exit
  68.         Case $Label1
  69.                 Exit
  70.         Case $Label2
  71.         WinSetState($GUI,"",@SW_MINIMIZE)
  72. EndSwitch
  73.         WEnd

  74. Func SetBitmap($hGUI, $hImage, $iOpacity)
  75.     Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend

  76.     $hScrDC = _WinAPI_GetDC(0)
  77.     $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
  78.     $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
  79.     $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
  80.     $tSize = DllStructCreate($tagSIZE)
  81.     $pSize = DllStructGetPtr($tSize)
  82.     DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
  83.     DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
  84.     $tSource = DllStructCreate($tagPOINT)
  85.     $pSource = DllStructGetPtr($tSource)
  86.     $tBlend = DllStructCreate($tagBLENDFUNCTION)
  87.     $pBlend = DllStructGetPtr($tBlend)
  88.     DllStructSetData($tBlend, "Alpha", $iOpacity)
  89.     DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
  90.     _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
  91.     _WinAPI_ReleaseDC(0, $hScrDC)
  92.     _WinAPI_SelectObject($hMemDC, $hOld)
  93.     _WinAPI_DeleteObject($hBitmap)
  94.     _WinAPI_DeleteDC($hMemDC)
  95. EndFunc  

  96. Func _ReduceMemory($i_PID = -1)
  97.         If $i_PID <> -1 Then
  98.                         Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
  99.                         Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
  100.                         DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
  101.         Else
  102.                         Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
  103.         EndIf
  104.         Return $ai_Return[0]
  105. EndFunc

  106.        
复制代码
我看了 afan大大的 文字向上移动.Afan那个程序。我想应该是 png做背景的问题把?
测试了 Controlmove() 和GUICtrlsetpos()一样 存在闪屏问题。。我的神啊。
这个闪屏问题还没人能解决了??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2010-5-8 10:07:09 | 显示全部楼层
传送门:
水木子 发表于 2010-5-7 20:34


谢谢 水木子大大  ~~但是闪屏还是依旧存在。。时间显示还好点。偶尔闪一下。
文字滚动闪的人恼火!!&#49324;&#46988;&#49332;&#47140;!!!!!
发表于 2010-5-8 10:47:55 | 显示全部楼层
本帖最后由 水木子 于 2010-5-8 10:50 编辑

在XP里是有点抖,Win7里感觉还比较平滑。
建议还是用 AdlibRegister 调用,做到循环里确实抖动很严重。
 楼主| 发表于 2010-5-8 15:20:02 | 显示全部楼层
在XP里是有点抖,Win7里感觉还比较平滑。
建议还是用 AdlibRegister 调用,做到循环里确实抖动很严重。
水木子 发表于 2010-5-8 10:47



     AdlibRegister  调用稍微 好了点。。没解决根本问题呀。。
我继续研究~~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2026-9-21 00:21 , Processed in 0.068598 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表