找回密码
 加入
搜索
查看: 2332|回复: 14

[网络通信] 鼠标经过按钮产生效应问题(已解决)

[复制链接]
发表于 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[4]
        If Not @error Then
                If $PJ = $id[4] THEN
                        If $ID[4] = $PJ Then 
                                    GUICtrlSetBkColor($PJ, 0xEE2C2C)
                                                $PJ = 0
                                                
                                EndIf 
                ElseIf $PJ = 0 Then 
                ToolTip('鼠标下面的控件ID为:'&$PJ)                
                                 If  $ID[4] <> $PJ Then  
                                    GUICtrlSetBkColor($PJ, 0x99B4D1)
                                                $PJ = ''                
                                EndIf                 
                EndIf 
    EndIf                 
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd


本帖子中包含更多资源

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

×
发表于 2018-6-26 09:01:44 | 显示全部楼层
真怪了 你自己的例子 不就解答了自己的問題

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

數組 就能得到數量

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

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

下面 有需要做其他變動嗎??
 楼主| 发表于 2018-6-26 09:09:20 来自手机 | 显示全部楼层
kk_lee69 发表于 2018-6-26 09:01
真怪了 你自己的例子 不就解答了自己的問題

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

我是说如果鼠标在第一个按钮的时候,第一个按钮变背景色,当鼠标离开第一个按钮的时候,背景色就还原成原有的背景色,其它按钮雷同,现在是离开后不能还原成原来的背景色
发表于 2018-6-26 09:50:02 | 显示全部楼层
變顏色 是 變顏色段  的問題  跟數組 無關  且  你目前方法 是  循環模式  .............這個方法 不好處理

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

[mw_shl_code=c,true]#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 250, 500)
$k = 8
Global $Button[16]
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[4]
                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
[/mw_shl_code]
 楼主| 发表于 2018-6-26 10:09:53 来自手机 | 显示全部楼层
kk_lee69 发表于 2018-6-26 09:50
變顏色 是 變顏色段  的問題  跟數組 無關  且  你目前方法 是  循環模式  .............這個方法 不好處理 ...

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






本帖子中包含更多资源

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

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

貌似要用到鼠标悬停事件,你搜索下,GUI我只会简单的应用。
发表于 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不想閃爍 要加判斷
已經是被變更的顏色就不要再執行設定背景顏色

发表于 2018-6-26 12:48:49 | 显示全部楼层
发现默认样式下可以获取到鼠标经过和离开button控件的事件,但是加了GUICtrlSetBkColor颜色后就不行了,是什么情况。
发表于 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[0] TO $Button[UBound($Button)-1]
                       GUICtrlSetBkColor($iCtrlID, 0xEE2C2C)
                                                


        EndSwitch
EndFunc   ;==>_Hover_Proc

Func _Leave_Hover_Proc($iCtrlID)
        Switch $iCtrlID
                Case $Button[0] TO $Button[UBound($Button)-1]
                                                GUICtrlSetBkColor($iCtrlID, 0x99B4D1)

        EndSwitch
EndFunc   ;==>_Leave_Hover_Proc

 楼主| 发表于 2018-6-27 12:03:58 | 显示全部楼层
kk_lee69 发表于 2018-6-26 14:13
[AU3]#include
#include
#include

感谢感谢K大,
发表于 2018-6-27 14:24:51 | 显示全部楼层


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[4] <> $iLast Then
                        If $iLast Then GUICtrlSetBkColor($iLast, 0x99B4D1)
                        GUICtrlSetBkColor($aInfo[4], 0xEE2C2C)
                        $iLast = $aInfo[4]
                EndIf
        EndIf
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
        EndSwitch
WEnd

发表于 2018-6-27 19:01:05 | 显示全部楼层
kk_lee69 发表于 2018-6-27 14:24
afan  老大 更為簡潔的例子

afan 老大的回复为何不见了???
发表于 2018-6-27 20:19:19 | 显示全部楼层
chzj589 发表于 2018-6-27 19:01
afan 老大的回复为何不见了???

應該是論壇問題  不是很穩定的樣子  你可以去 站務區 看看 有幾個昨天回覆的也不見了
 楼主| 发表于 2018-6-29 15:20:31 | 显示全部楼层
kk_lee69 发表于 2018-6-27 20:19
應該是論壇問題  不是很穩定的樣子  你可以去 站務區 看看 有幾個昨天回覆的也不見了

非常感谢K大和afan老大的热心帮助,谢谢
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 02:38 , Processed in 0.085054 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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