cashiba 发表于 2019-8-31 01:29:51

如何实现一钮复用?[已解决]

本帖最后由 cashiba 于 2019-8-31 08:56 编辑

#include <GUIConstantsEx.au3>
Global $hGUI,$idStart
Example()
Func Example()
    $hGUI = GUICreate("TEST", 300, 200)
    $idStart = GUICtrlCreateButton("记事本", 120, 170, 85, 25)
    Local $idClose = GUICtrlCreateButton("关 闭", 210, 170, 85, 25)
    GUISetState(@SW_SHOW, $hGUI)
    Local $iPID = 0
    While 1
      Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $idClose
                ExitLoop
            Case $idStart
                _ButtonToggle()
      EndSwitch
    WEnd
    GUIDelete($hGUI)
    If $iPID Then ProcessClose($iPID)
EndFunc   ;==>Example
Func _ButtonToggle()
While 1
Local $a = GUIGetCursorInfo($hGui)
If $a = $idStart Then
   if $a = 1 then
   ConsoleWrite("鼠标右键按下" & @CRLF)
   If GUICtrlRead($idStart) = "记事本" Then
      GUICtrlSetData($idStart, "计算器")
   ElseIf GUICtrlSetData($idStart, "计算器") Then
      GUICtrlSetData($idStart, "记事本")
   EndIf
   ElseIf $a = 1 then
   ConsoleWrite("鼠标左键按下" & @CRLF)
   If GUICtrlRead($idStart) = "记事本" Then
      $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)
   ElseIf GUICtrlRead($idStart) = "计算器" Then
      $iPID = Run("calc.exe", "", @SW_SHOWMAXIMIZED)
   EndIf
   EndIf
Else
   ExitLoop
EndIf
sleep(100)
WEnd
EndFunc   ;==>_ButtonToggle
如上,想实现一个按钮左右开弓,一键多能:右击切换计算器和记事本,左击打开
按上述写法容易卡壳
想用按钮消息来实现,发现按钮的消息里没有右击
用鼠标事件绑定按钮,不是太熟悉,似乎也不好用
请大神们指点一下....
预谢!


afan 发表于 2019-8-31 01:48:12

可以开任意个,主界面关闭全退
Global $hGUI, $idStart
Global $aName = ['记事本', '计算器']
Global $aExe = ['notepad.exe', 'calc.exe']
Global $iIx = 0
Global $aPid = , $iSL = 0
Example()
Func Example()
        $hGUI = GUICreate('TEST', 300, 200)
        $idStart = GUICtrlCreateButton($aName[$iIx], 120, 170, 85, 25)
        Local $idClose = GUICtrlCreateButton('关 闭', 210, 170, 85, 25)
        GUISetState()
        While 1
                Switch GUIGetMsg()
                        Case -3, $idClose
                                ExitLoop
                        Case $idStart
                                _ButtonToggle()
                        Case -9
                                _Right()
                EndSwitch
        WEnd
        GUIDelete($hGUI)
        If $iSL Then
                For $ii = 1 To $iSL
                        ProcessClose($aPid[$ii])
                Next
        EndIf
EndFunc   ;==>Example
Func _Right()
        Local $a0 = GUIGetCursorInfo($hGUI)
        Local $iId = $a0
        While $a0
                $a0 = GUIGetCursorInfo($hGUI)
        WEnd
        If $a0 = $iId Then
                $iIx = Number($iIx = 0)
                GUICtrlSetData($idStart, $aName[$iIx])
        EndIf
EndFunc   ;==>_Right
Func _ButtonToggle()
        $iSL += 1
        $aPid = $iSL
        $aPid[$iSL] = Run($aExe[$iIx], '', @SW_SHOWMAXIMIZED)
EndFunc   ;==>_ButtonToggle

tarcy118 发表于 2019-8-31 02:00:22

不错支持一下

cashiba 发表于 2019-8-31 08:52:51

A大思维敏捷,精通AU3,一个-9就解决问题了,佩服佩服!

afan 发表于 2019-8-31 09:18:53

cashiba 发表于 2019-8-31 08:52
A大思维敏捷,精通AU3,一个-9就解决问题了,佩服佩服!

现在是界面任意处点击右键都可以切换,如果限制到按钮可以把35行改为以下
If $a0 = $iId And $iId = $idStart Then

king8462 发表于 2019-8-31 12:36:39

又学了一招,A版威武。

cashiba 发表于 2019-9-1 11:02:16

afan 发表于 2019-8-31 09:18
现在是界面任意处点击右键都可以切换,如果限制到按钮可以把35行改为以下

A大心细阿,这样的小问题隔天后还记得修正....
{:1_206:}

Dontang2018 发表于 2019-9-3 11:29:25

afan 发表于 2019-8-31 01:48
可以开任意个,主界面关闭全退

不错支持一下

h111666b 发表于 2019-9-4 08:25:35

afan 发表于 2019-8-31 01:48
可以开任意个,主界面关闭全退

赚钱学习来了
页: [1]
查看完整版本: 如何实现一钮复用?[已解决]