鼠标经过按钮产生效应问题(已解决)
本帖最后由 cqboyqx 于 2018-6-29 15:21 编辑鼠标经过按钮产生效应问题,如果按钮个数在不定量的情况下,鼠标在经过当前按钮时,背景色发生改变,离开当前按钮,背景色恢复原来的背景色。如果个数定义了,还好处理,像这种不定义数量就没有想出办法了,看有没有大侠搞过,求赐教。
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 250, 500)
$k = 8
For $i = 1 To 16;总个数不定
Global $Button[$i+1]
$Button1 = GUICtrlCreateButton("Button"&$i, 29, $k, 195, 25)
GUICtrlSetBkColor(-1, 0x99B4D1)
$k+=30
Next
GUISetState(@SW_SHOW)
;$PJ = 1
While 1
$ID = GUIGetCursorInfo()
$PJ= $id
If Not @error Then
If $PJ = $id THEN
If $ID = $PJ Then
GUICtrlSetBkColor($PJ, 0xEE2C2C)
$PJ = 0
EndIf
ElseIf $PJ = 0 Then
ToolTip('鼠标下面的控件ID为:'&$PJ)
If$ID <> $PJ Then
GUICtrlSetBkColor($PJ, 0x99B4D1)
$PJ = ''
EndIf
EndIf
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
真怪了 你自己的例子 不就解答了自己的問題
數量不固定但是 總是 利用 數組 做控制
數組 就能得到數量
而你自己的 範例 不就是 個 不固定的範例
你把For $i = 1 To 16變成 For $i = 1 To 200
下面 有需要做其他變動嗎?? kk_lee69 发表于 2018-6-26 09:01
真怪了 你自己的例子 不就解答了自己的問題
數量不固定但是 總是 利用 數組 做控制
我是说如果鼠标在第一个按钮的时候,第一个按钮变背景色,当鼠标离开第一个按钮的时候,背景色就还原成原有的背景色,其它按钮雷同,现在是离开后不能还原成原来的背景色 變顏色 是 變顏色段的問題跟數組 無關且你目前方法 是循環模式.............這個方法 不好處理
我只是照你的程式稍微 改了一下 會閃爍但是 重點是離開後 顏色就會變掉你先看看吧
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 250, 500)
$k = 8
Global $Button
For $i = 0 To 15;???不定
$Button[$i] = GUICtrlCreateButton("Button"&$i+1, 29, $k, 195, 25)
GUICtrlSetBkColor(-1, 0x99B4D1)
$k+=30
Next
GUISetState(@SW_SHOW)
;$PJ = 1
While 1
$ID = GUIGetCursorInfo()
$PJ= $id
ConsoleWrite($PJ&@CRLF)
For $i=0 TO UBound($Button)-1 Step 1
IF $Button[$i]=$PJ Then
GUICtrlSetBkColor($Button[$i], 0xEE2C2C)
Else
GUICtrlSetBkColor($Button[$i], 0x99B4D1)
EndIf
Next
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
kk_lee69 发表于 2018-6-26 09:50
變顏色 是 變顏色段的問題跟數組 無關且你目前方法 是循環模式.............這個方法 不好處理 ...
是不是我这种思路不可取,其实目的就是在不确定按钮个数的情况下,能够达到鼠标在按钮上的时候,按钮就变颜色,移开这个按钮后,这个按钮就恢复原有的颜色 本帖最后由 kk_lee69 于 2018-6-26 10:55 编辑
cqboyqx 发表于 2018-6-26 10:09
是不是我这种思路不可取,其实目的就是在不确定按钮个数的情况下,能够达到鼠标在按钮上的时候,按钮就变 ...參考一下下面的資料
http://www.autoit3.cn/forum.php?mod=viewthread&tid=56900&highlight=%C4%EA%C0%CF
cqboyqx 发表于 2018-6-26 10:09
是不是我这种思路不可取,其实目的就是在不确定按钮个数的情况下,能够达到鼠标在按钮上的时候,按钮就变 ...
貌似要用到鼠标悬停事件,你搜索下,GUI我只会简单的应用。 本帖最后由 mars0916 于 2018-6-26 12:45 编辑
我在英文論壇看到的
用事件
#include <GUIConstantsEx.au3>
$hGUI = GUICreate("Test", 500, 500)
$hLabel_1 = GUICtrlCreateLabel("", 10, 10, 50, 50)
GUICtrlSetFont(-1, 16)
$hLabel_2 = GUICtrlCreateLabel("", 10, 100, 50, 50)
GUICtrlSetFont(-1, 16)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_MOUSEMOVE
GUICtrlSetData($hLabel_1, @SEC)
EndSwitch
WEnd不想閃爍 要加判斷
已經是被變更的顏色就不要再執行設定背景顏色
发现默认样式下可以获取到鼠标经过和离开button控件的事件,但是加了GUICtrlSetBkColor颜色后就不行了,是什么情况。 cqboyqx 发表于 2018-6-26 10:09
是不是我这种思路不可取,其实目的就是在不确定按钮个数的情况下,能够达到鼠标在按钮上的时候,按钮就变 ...
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include 'GUICtrlOnHover.au3'
$Form1 = GUICreate("Form1", 250, 500)
$k = 8
$COUNT=16;隨便你要幾個 只要你放得下 只需要改這邊
Global $Button[$COUNT]
For $i = 0 To $COUNT-1
$Button[$i] = GUICtrlCreateButton("Button"&$i+1, 29, $k, 195, 25)
_GUICtrl_SetOnHover(-1, '_Hover_Proc', '_Leave_Hover_Proc', 'PrimaryDown_Proc', 'PrimaryUp_Proc')
GUICtrlSetBkColor(-1, 0x99B4D1)
$k+=30
Next
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _Hover_Proc($iCtrlID)
Switch $iCtrlID
Case $Button TO $Button
GUICtrlSetBkColor($iCtrlID, 0xEE2C2C)
EndSwitch
EndFunc ;==>_Hover_Proc
Func _Leave_Hover_Proc($iCtrlID)
Switch $iCtrlID
Case $Button TO $Button
GUICtrlSetBkColor($iCtrlID, 0x99B4D1)
EndSwitch
EndFunc ;==>_Leave_Hover_Proc
kk_lee69 发表于 2018-6-26 14:13
#include
#include
#include
感谢感谢K大, cqboyqx 发表于 2018-6-27 12:03
感谢感谢K大,
afan老大 更為簡潔的例子
GUICreate('BtnSetBkColor', 250, 500)
Local $ii, $Max = 16, $Button[$Max + 1], $iY = 8, $iLast = 0, $aInfo
For $ii = 1 To $Max ;???不定
$Button[$ii] = GUICtrlCreateButton('Button' & $ii, 29, $iY, 195, 25)
GUICtrlSetBkColor(-1, 0x99B4D1)
$iY += 30
Next
GUISetState(@SW_SHOW)
While 1
$aInfo = GUIGetCursorInfo()
If Not @error Then
If $aInfo <> $iLast Then
If $iLast Then GUICtrlSetBkColor($iLast, 0x99B4D1)
GUICtrlSetBkColor($aInfo, 0xEE2C2C)
$iLast = $aInfo
EndIf
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
EndSwitch
WEnd
kk_lee69 发表于 2018-6-27 14:24
afan老大 更為簡潔的例子
afan 老大的回复为何不见了??? chzj589 发表于 2018-6-27 19:01
afan 老大的回复为何不见了???
應該是論壇問題不是很穩定的樣子你可以去 站務區 看看 有幾個昨天回覆的也不見了 kk_lee69 发表于 2018-6-27 20:19
應該是論壇問題不是很穩定的樣子你可以去 站務區 看看 有幾個昨天回覆的也不見了
非常感谢K大和afan老大的热心帮助,谢谢
页:
[1]