cqboyqx 发表于 2018-6-26 08:26:26

鼠标经过按钮产生效应问题(已解决)

本帖最后由 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


kk_lee69 发表于 2018-6-26 09:01:44

真怪了 你自己的例子 不就解答了自己的問題

數量不固定但是 總是 利用 數組 做控制

數組 就能得到數量

而你自己的 範例 不就是 個 不固定的範例

你把For $i = 1 To 16變成 For $i = 1 To 200

下面 有需要做其他變動嗎??

cqboyqx 发表于 2018-6-26 09:09:20

kk_lee69 发表于 2018-6-26 09:01
真怪了 你自己的例子 不就解答了自己的問題

數量不固定但是 總是 利用 數組 做控制


我是说如果鼠标在第一个按钮的时候,第一个按钮变背景色,当鼠标离开第一个按钮的时候,背景色就还原成原有的背景色,其它按钮雷同,现在是离开后不能还原成原来的背景色

kk_lee69 发表于 2018-6-26 09:50:02

變顏色 是 變顏色段的問題跟數組 無關且你目前方法 是循環模式.............這個方法 不好處理

我只是照你的程式稍微 改了一下    會閃爍但是 重點是離開後 顏色就會變掉你先看看吧

#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

cqboyqx 发表于 2018-6-26 10:09:53

kk_lee69 发表于 2018-6-26 09:50
變顏色 是 變顏色段的問題跟數組 無關且你目前方法 是循環模式.............這個方法 不好處理 ...

是不是我这种思路不可取,其实目的就是在不确定按钮个数的情况下,能够达到鼠标在按钮上的时候,按钮就变颜色,移开这个按钮后,这个按钮就恢复原有的颜色

kk_lee69 发表于 2018-6-26 10:53:36

本帖最后由 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






heroxianf 发表于 2018-6-26 10:55:25

cqboyqx 发表于 2018-6-26 10:09
是不是我这种思路不可取,其实目的就是在不确定按钮个数的情况下,能够达到鼠标在按钮上的时候,按钮就变 ...

貌似要用到鼠标悬停事件,你搜索下,GUI我只会简单的应用。

mars0916 发表于 2018-6-26 12:43:30

本帖最后由 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不想閃爍 要加判斷
已經是被變更的顏色就不要再執行設定背景顏色

zch11230 发表于 2018-6-26 12:48:49

发现默认样式下可以获取到鼠标经过和离开button控件的事件,但是加了GUICtrlSetBkColor颜色后就不行了,是什么情况。

kk_lee69 发表于 2018-6-26 14:13:42

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

cqboyqx 发表于 2018-6-27 12:03:58

kk_lee69 发表于 2018-6-26 14:13
#include
#include
#include


感谢感谢K大,

kk_lee69 发表于 2018-6-27 14:24:51

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

chzj589 发表于 2018-6-27 19:01:05

kk_lee69 发表于 2018-6-27 14:24
afan老大 更為簡潔的例子

afan 老大的回复为何不见了???

kk_lee69 发表于 2018-6-27 20:19:19

chzj589 发表于 2018-6-27 19:01
afan 老大的回复为何不见了???

應該是論壇問題不是很穩定的樣子你可以去 站務區 看看 有幾個昨天回覆的也不見了

cqboyqx 发表于 2018-6-29 15:20:31

kk_lee69 发表于 2018-6-27 20:19
應該是論壇問題不是很穩定的樣子你可以去 站務區 看看 有幾個昨天回覆的也不見了

非常感谢K大和afan老大的热心帮助,谢谢
页: [1]
查看完整版本: 鼠标经过按钮产生效应问题(已解决)