Jump to content

Recommended Posts

Hi Guis,

 

I need to create keyboard shortcut to navigate the tabs and activate them, but I could not use the code below:

#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
#include <GUIConstantsEx.au3>


HotKeySet("^{TAB}", "_TabRight")
HotKeySet("^+{TAB}", "_TabLeft")


$gui = GUICreate("test",450, 300)

$Tab1 = GUICtrlCreateTab(20, 24, 425, 201)
$TabSheet1 = GUICtrlCreateTabItem("Tabsheet 1")
$lbContagemGrupos2 = GUICtrlCreateLabel("aaaa", 50, 50)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlCreateTabItem("")
$TabSheet2 = GUICtrlCreateTabItem(" ")
$TabSheet3 = GUICtrlCreateTabItem(" ")

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd

Func _TabRight()
    $CurPos = _GUICtrlTab_GetCurSel($Tab1)
    _GUICtrlTab_SetCurSel($Tab1, $CurPos + 1)
    $tab = "$TabSheet" & $CurPos
    GUICtrlSetState($TabSheet1 + $CurPos, $GUI_SHOW)
    Return
EndFunc

Func _TabLeft()
    $CurPos = _GUICtrlTab_GetCurSel($Tab1)
    _GUICtrlTab_SetCurSel($Tab1, $CurPos - 1)
    $tab = "$TabSheet" & $CurPos
    GUICtrlSetState($TabSheet1 + $CurPos, $GUI_SHOW)
    Return
EndFunc


Exit

 

can you help me?

Link to post
Share on other sites

Try this.  It uses GUISetAccelerators instead of hotkey.  This is probably better since you are trying to override default Windows hotkeys.  GUISetAccelerators will only do it while your GUI is active.  Of course you should probably add additional logic to make sure that you are not trying to set the tab index less than the first or greater than the last tab.  Also, you didn't need the GUISetState functions in the _TabLeft and _TabRight functions.

For the record, your original logic would have worked by just taking out the GUISetState functions in your _TabRight() and _TabLeft() functions.  However, as stated above, you only want to use those accelerators while your GUI is active, not system-wide.

 

#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
#include <GUIConstantsEx.au3>


;~ HotKeySet("^{tab}\r", "_TabRight")
;~ HotKeySet("^+{tab}", "_TabLeft")


$gui = GUICreate("test",450, 300)

$PrevTab   = GUICtrlCreateDummy()
$NextTab   = GUICtrlCreateDummy()

$Tab1 = GUICtrlCreateTab(20, 24, 425, 201)
$TabSheet1 = GUICtrlCreateTabItem("Tabsheet 1")
$lbContagemGrupos2 = GUICtrlCreateLabel("aaaa", 50, 50)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlCreateTabItem("")
$TabSheet2 = GUICtrlCreateTabItem(" ")
$TabSheet3 = GUICtrlCreateTabItem(" ")

Global $aAccels[2][2] = [["^+{tab}", $PrevTab], ["^{tab}", $NextTab]]
GUISetAccelerators($aAccels)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $PrevTab
            _TabLeft()
        Case $NextTab
            _TabRight()
    EndSwitch
WEnd

Func _TabRight()
    ConsoleWrite("Right" & @CRLF)
    $CurPos = _GUICtrlTab_GetCurSel($Tab1)
    _GUICtrlTab_SetCurSel($Tab1, $CurPos + 1)
    $tab = "$TabSheet" & $CurPos
;~     GUICtrlSetState($TabSheet1 + $CurPos, $GUI_SHOW)
    Return
EndFunc

Func _TabLeft()
    ConsoleWrite("Left" & @CRLF)
    $CurPos = _GUICtrlTab_GetCurSel($Tab1)
    _GUICtrlTab_SetCurSel($Tab1, $CurPos - 1)
    $tab = "$TabSheet" & $CurPos
;~     GUICtrlSetState($TabSheet1 + $CurPos, $GUI_SHOW)
    Return
EndFunc


Exit

 

Edited by TheXman
Link to post
Share on other sites
1 hour ago, TheXman said:

Try this.  It uses GUISetAccelerators instead of hotkey.  This is probably better since you are trying to override the default windows hotkey.  This will only do it while your GUI is active.  Of course you should add additional logic to make sure you are not trying to set the tab index higher or lower than the actual number of tabs.  Also, you didn't need the additional GUISetState in the _left and _right functions.

For the record, your original logic would have worked by just taking out the GUISetState functions in your _TabRight() and _TabLeft() functions.  However, as stated above, you only want to use those accelerators while your GUI is active, not system-wide.

 

 

 

Label aaaa is in TAB1, but when using the shortcuts it is still shown in TAB2.
I validated that it is not enabling the TAB and just walking through them.

image.png.17ab97ebe9d4d4366fb877f322dcaa39.png

 

Link to post
Share on other sites

I'm not being critical, just factual.  I looked at your code, and other than changing tabs using a hotkey, I don't have a clue what you're trying to do.

So maybe you can start with a detailed explanation of what it is you are trying to accomplish, what results you are expecting, and any other information that may be be relevant to someone trying to help you help yourself.

Link to post
Share on other sites

I'm sorry, my English is bad.

In the code that you helped me I can walk the TABS, but only the TABS are changed, the contents always remain the one of TAB1.

Example:
In TAB1 there is a label with the caption "aaaaa", when it changes to TAB2 the contents of TAB1 appear, so it has not changed to the contents of TAB2.

It looks like it does not activate the next TAB just browsing between them.

Link to post
Share on other sites

Your problem is by creating the GUI, corected:

$PrevTab   = GUICtrlCreateDummy()
$NextTab   = GUICtrlCreateDummy()

$Tab1 = GUICtrlCreateTab(20, 24, 425, 201)
$TabSheet1 = GUICtrlCreateTabItem("Tabsheet 1")
$lbContagemGrupos2 = GUICtrlCreateLabel("aaaa", 50, 50)
GUICtrlSetColor(-1, 0x0000FF)
$TabSheet2 = GUICtrlCreateTabItem(" ")
$TabSheet3 = GUICtrlCreateTabItem(" ")
GUICtrlCreateTabItem("")

GUISetState()

GUICtrlCreateTabItem("") must be after last tabsheet is created.

Edited by AutoBert
Link to post
Share on other sites

Do you mean like this?  Notice that I used _GUICtrlTab_ActivateTab() instead of GuiControlSetState() or GuiControlSetData().

 

#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
#include <GUIConstantsEx.au3>


;~ HotKeySet("^{tab}\r", "_TabRight")
;~ HotKeySet("^+{tab}", "_TabLeft")


$gui = GUICreate("test",450, 300)

$PrevTab   = GUICtrlCreateDummy()
$NextTab   = GUICtrlCreateDummy()

$Tab1 = GUICtrlCreateTab(20, 24, 425, 201)
$TabSheet1 = GUICtrlCreateTabItem("Tabsheet 1")
$lb1 = GUICtrlCreateLabel("aaaa", 50, 50)
$TabSheet2 = GUICtrlCreateTabItem("Tabsheet 2")
$lb2 = GUICtrlCreateLabel("bbbb", 50, 50)
$TabSheet3 = GUICtrlCreateTabItem("Tabsheet 3")
$lb3 = GUICtrlCreateLabel("cccc", 50, 50)
GUICtrlCreateTabItem("")

Global $aAccels[2][2] = [["^+{tab}", $PrevTab], ["^{tab}", $NextTab]]
GUISetAccelerators($aAccels)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $PrevTab
            _TabLeft()
        Case $NextTab
            _TabRight()
    EndSwitch
WEnd

Func _TabRight()
    $CurPos = _GUICtrlTab_GetCurSel($Tab1)
    If $CurPos < _GUICtrlTab_GetItemCount($Tab1) - 1 Then
        _GUICtrlTab_ActivateTab($Tab1, $CurPos + 1)
        ConsoleWrite("Tab Right" & @CRLF)
    EndIf
EndFunc

Func _TabLeft()
    $CurPos = _GUICtrlTab_GetCurSel($Tab1)
    If $CurPos > 0 Then
        _GUICtrlTab_ActivateTab($Tab1, $CurPos - 1)
        ConsoleWrite("Tab Left" & @CRLF)
    EndIf
EndFunc

 

Edited by TheXman
Link to post
Share on other sites
15 hours ago, TheXman said:

Do you mean like this?  Notice that I used _GUICtrlTab_ActivateTab() instead of GuiControlSetState() or GuiControlSetData().

 

#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
#include <GUIConstantsEx.au3>


;~ HotKeySet("^{tab}\r", "_TabRight")
;~ HotKeySet("^+{tab}", "_TabLeft")


$gui = GUICreate("test",450, 300)

$PrevTab   = GUICtrlCreateDummy()
$NextTab   = GUICtrlCreateDummy()

$Tab1 = GUICtrlCreateTab(20, 24, 425, 201)
$TabSheet1 = GUICtrlCreateTabItem("Tabsheet 1")
$lb1 = GUICtrlCreateLabel("aaaa", 50, 50)
$TabSheet2 = GUICtrlCreateTabItem("Tabsheet 2")
$lb2 = GUICtrlCreateLabel("bbbb", 50, 50)
$TabSheet3 = GUICtrlCreateTabItem("Tabsheet 3")
$lb3 = GUICtrlCreateLabel("cccc", 50, 50)
GUICtrlCreateTabItem("")

Global $aAccels[2][2] = [["^+{tab}", $PrevTab], ["^{tab}", $NextTab]]
GUISetAccelerators($aAccels)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $PrevTab
            _TabLeft()
        Case $NextTab
            _TabRight()
    EndSwitch
WEnd

Func _TabRight()
    $CurPos = _GUICtrlTab_GetCurSel($Tab1)
    If $CurPos < _GUICtrlTab_GetItemCount($Tab1) - 1 Then
        _GUICtrlTab_ActivateTab($Tab1, $CurPos + 1)
        ConsoleWrite("Tab Right" & @CRLF)
    EndIf
EndFunc

Func _TabLeft()
    $CurPos = _GUICtrlTab_GetCurSel($Tab1)
    If $CurPos > 0 Then
        _GUICtrlTab_ActivateTab($Tab1, $CurPos - 1)
        ConsoleWrite("Tab Left" & @CRLF)
    EndIf
EndFunc

 

Tks!

 

Good Work.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By It_is_me_Me
      I have provided a portion of my script (seen below) and I wanted to use what the USER will input into my IP address box and input box for TCP port. I set the IP address to use 0.0.0.0 as default and the Port to 502. But I want to let the user change it and when they click the buttons (IP Address and Port), the tooltip will show what the USER entered. How can I use the details that the User will input into my input box and IP address box and let them see what they entered when they click the buttons?
       
      Here are the scripts:
      ;-------------------------------------------------------------
      #include <ButtonConstants.au3>
      #include <ComboConstants.au3>
      #include <EditConstants.au3>
      #include <GUIConstantsEx.au3>
      #include <GuiIPAddress.au3>
      #include <StaticConstants.au3>
      #include <WindowsConstants.au3>
      #include <GuiEdit.au3>
      #include <MsgBoxConstants.au3>
      #include <Date.au3>
      #include <TabConstants.au3>
      #include <GuiTab.au3>

      Global $Form1 = GUICreate("Security Automation", 490, 339, -1, -1)
      ;MAIN Tab
      Global $TAB = GUICtrlCreateTab(0, 0, 489, 337)
      Global $tab_main = GUICtrlCreateTabItem("Main")
      $label_Title = GUICtrlCreateLabel("ETP-073 Security", 12, 33, 103, 17)
      GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
      ;-----------------TCP User input information-------------------------------------------------------------------------------
      $groupBox_TCP = GUICtrlCreateGroup("TCP", 12, 49, 289, 57, BitOR($GUI_SS_DEFAULT_GROUP,$BS_FLAT))
      ;TCP IP address
      Global $IPAddress1 = _GUICtrlIpAddress_Create($Form1, 20, 81, 170, 21)
      $Label_ipAddress = GUICtrlCreateLabel("Host IP Address", 20, 65, 80, 17)
      $userInputIP = _GUICtrlIpAddress_Set($IPAddress1, "0.0.0.0")
      ;TCP Port
      $label_tcpPort = GUICtrlCreateLabel("Port", 196, 65, 23, 17)
      Global $input_tcpPort = GUICtrlCreateInput("502", 196, 81, 57, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
      $userPort = GUICtrlRead($input_tcpPort)
      ;TCP Address
      $label_tcpAddress = GUICtrlCreateLabel("Addr.", 260, 65, 29, 17)
      Global $input_tcpDevAddress = GUICtrlCreateInput("1", 260, 81, 33, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
      ;Buttons
      Global $btn_userIP = GUICtrlCreateButton("User IP", 308, 297, 81, 25)
      Global $btn_Port = GUICtrlCreateButton("Port", 404, 297, 75, 25)
      ;Showing the GUI
      GUISetState(@SW_SHOW)
      While 1
         $nMsg = GUIGetMsg()
         Switch $nMsg
            Case $GUI_EVENT_CLOSE
               Exit
            Case $btn_userIP
               ToolTip($userInputIP)
            Case $btn_Port
               ToolTip($userPort)
         EndSwitch
      WEnd
      ;--------------end of script ------------------
       
      Note: There will be a "!->Includefile <WMDebug.au3> not found." Pay no attention to it.
    • By CYBRIX
      So I am a person who has learned programming off the internet, without structured courses, and I'm trying to create a UI element that can be used like "GUICtrlCreate...".

      I'd like to get some kind of insight on how to improve the code of a Graph element that I have created.
      I am unfamiliar on the standards for creating such UI elements, and assume I'll get some valuable insight here.
       
      Here's some sample code: (I tried to make it look a bit less upsetting to those who know better, but be warned: not pretty.)
      #include <WinAPISys.au3> #include <WinAPI.au3> #include <WinAPIGdi.au3> #include <Array.au3> #include <WindowsConstants.au3> #include <GUIConstants.au3> Local $hWnd = GUICreate("Test", 200, 200) GUISetState(@SW_SHOW, $hWnd) Local $hGraph = _GraphStartUp($hWnd, 10, 30, 180, 180) Local $nData, $nDataMax = 1000, $hDataTimer = TimerInit() While GUIGetMsg() <> $GUI_EVENT_ClOSE If TimerDiff($hDataTimer) >= 150 Then $nData = Random(0, $nDataMax) _UpdateGraph($nData) $hDataTimer = TimerInit() EndIf Sleep(20) WEnd _GraphShutDown($hWnd, $hGraph) Exit Func _GraphStartUp($hWnd, $x, $y, $w, $h, $nUpdateTimes = 1000, $nResolution = 60) Global $hBluePen = _WinAPI_CreatePen($PS_SOLID, 2, _WinAPI_RGB(220, 0, 0)) Global $hGreyPen = _WinAPI_CreatePen($PS_DASH, 1, _WinAPI_RGB(100, 100, 100)) Global $hBlackPen = _WinAPI_CreatePen($PS_SOLID, 1, _WinAPI_RGB(0, 0, 0)) Global $hWhitePen = _WinAPI_CreatePen($PS_SOLID, 1, _WinAPI_RGB(255, 255, 255)) Global $nGraphRes = $nResolution Global $aGraphData[$nGraphRes + 1] For $i = 2 To $nGraphRes $aGraphData[$i] = 0 Next Global $hWinDC = _WinAPI_GetWindowDC($hWnd) Global $nGraphX = $x Global $nGraphY = $y Global $nGraphWidth = $w Global $nGraphHeight = $h Global $nGraphXUnit = $nGraphWidth / ($nGraphRes - 1) Global $nGraphBottomY = $nGraphY + $nGraphHeight Global $nGraphMaxX = $nGraphX + $nGraphWidth Global $aUpdateArea[4][2] = [[$nGraphX - 1, $nGraphY - 1], [$nGraphX - 1, $nGraphBottomY + 1], [$nGraphMaxX + 1, $nGraphBottomY + 1], [$nGraphMaxX + 1, $nGraphY - 1]] Global $pUpdateAreaRgn = _WinAPI_CreatePolygonRgn($aUpdateArea) Global $pTextRect = _WinAPI_CreateRectEx($nGraphX + 1, $nGraphY + 1, $nGraphWidth / 2, $nGraphHeight / 4) Global $nGreatestValue = 1 GLobal $pGraphArea = _WinAPI_CreateRectEx($nGraphX - 7, $nGraphY - 26, $nGraphWidth + 14, $nGraphHeight + 2) Global $pDrawCall = DllCallbackRegister('_DrawGraph', 'none', '') Global $pGraphTimer = _WinAPI_SetTimer($hWnd, 567891234, $nUpdateTimes, DllCallbackGetPtr($pDrawCall)) _DrawGraph() Return $pGraphTimer EndFunc Func _DrawGraph() Global $hPen $nGreatestValue = _ArrayMax($aGraphData, 1, 1) $hPen = _WinAPI_SelectObject($hWinDC, $hWhitePen) _WinAPI_PaintRgn($hWinDC, $pUpdateAreaRgn) $hPen = _WinAPI_SelectObject($hWinDC, $hGreyPen) _WinAPI_DrawLine($hWinDC, $nGraphX, $nGraphY, $nGraphMaxX, $nGraphY) _WinAPI_DrawLine($hWinDC, $nGraphX, $nGraphY + ($nGraphHeight / 2), $nGraphMaxX, $nGraphY + ($nGraphHeight / 2)) _WinAPI_DrawLine($hWinDC, $nGraphMaxX, $nGraphY, $nGraphMaxX, $nGraphBottomY) $hPen = _WinAPI_SelectObject($hWinDC, $hBluePen) For $i = 1 To $nGraphRes - 1 _WinAPI_DrawLine($hWinDC, $nGraphX + (($i - 1) * $nGraphXUnit), $nGraphBottomY - ($aGraphData[$i] / $nGreatestValue * $nGraphHeight), $nGraphX + ($i * $nGraphXUnit), $nGraphBottomY - ($aGraphData[$i + 1] / $nGreatestValue * $nGraphHeight)) Next $hPen = _WinAPI_SelectObject($hWinDC, $hBlackPen) _WinAPI_DrawLine($hWinDC, $nGraphX, $nGraphBottomY, $nGraphMaxX, $nGraphBottomY) _WinAPI_DrawLine($hWinDC, $nGraphX, $nGraphY, $nGraphX, $nGraphBottomY) _WinAPI_DrawText($hWinDC, Round($aGraphData[$nGraphRes], 2), $pTextRect, $DT_LEFT) EndFunc Func _UpdateGraph($nData) _ArrayAdd($aGraphData, $nData) _ArrayDelete($aGraphData, 1) EndFunc Func _GraphShutDown($hWnd, $pGraphTimer) _WinAPI_SelectObject($hWinDC, $hPen) _WinAPI_DeleteObject($hBlackPen) _WinAPI_DeleteObject($hGreyPen) _WinAPI_DeleteObject($hBluePen) _WinAPI_DeleteObject($hWhitePen) _WinAPI_ReleaseDC($hWnd, $hWinDC) _WinAPI_KillTimer($hWnd, $pGraphTimer) DllCallbackFree($pDrawCall) _WinAPI_RedrawWindow($hWnd, $pGraphArea) EndFunc  
    • By mLipok
      I check this snippet:
      https://www.autoitscript.com/wiki/Snippets_(_GUI_)#GUI_With_Scrollable_TabItem
      Modified them and I refactored. That's because I needed to adapt it to my needs (I'll write later).
      I thought I understood how it works.
      But I was wrong.
       
      This is my example which is showing what I want to achieve.
      #include <AutoItConstants.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GuiScrollBars.au3> #include <GUIScrollbars_Ex.au3> #include <StringConstants.au3> #include <StructureConstants.au3> #include <WindowsConstants.au3> GUIRegisterMsg($WM_VSCROLL, WM_VSCROLL) _Example() Func _Example() Local $i_Count = 30 Local $a_Options_List[$i_Count + 1] $a_Options_List[0] = $i_Count For $i = 1 To $i_Count $a_Options_List[$i] = 'Test #' & $i Next ConsoleWrite("- " & _my_gui_Wybierz('Testing', $a_Options_List) & @CRLF) EndFunc ;==>_Example Func _my_gui_Wybierz($s_Description, $a_Options_List = "", $i_Left = Default, $i_Top = Default, $i_Width = Default, $hWnd_Parent = 0) ;~ WinSetOnTop($ACROBAT_TITLE, "", $WINDOWS_NOONTOP ) If $i_Left = Default Then $i_Left = -1 If $i_Top = Default Then $i_Top = -1 If $i_Width = Default Then $i_Width = 400 #Region _my_gui_Wybierz - GUI Creation Local $i_Height = 600 Local $hWND_DateForm = GUICreate("", $i_Width, $i_Height, $i_Left, $i_Top, BitOR(0, $WS_SIZEBOX), -1, $hWnd_Parent) WinSetOnTop($hWND_DateForm, "", $WINDOWS_ONTOP) Local $hChild = GUICreate("Scroll area", $i_Width - 15, $i_Height - 40, 0, 0, $WS_POPUP, $WS_EX_MDICHILD, $hWND_DateForm) _GUIScrollBars_Init($hChild, -1) _GUIScrollBars_ShowScrollBar($hChild, $SB_HORZ, False) _GUIScrollBars_ShowScrollBar($hChild, $SB_VERT, True) ;~ _GUIScrollBars_SetScrollRange($hChild, $SB_VERT, 3, 30) GUICtrlCreateLabel("", 10, 7, $i_Width - 45, 80) Local $id_Label1 = GUICtrlCreateLabel("", 10, 7 + 5, $i_Width - 45, 80 - 5) GUICtrlSetBkColor(-1, 0x88AABB) Local $a_List_of_Button_ID[$a_Options_List[0] + 1] For $IDX_Item = 1 To $a_Options_List[0] If $IDX_Item > 0 And $IDX_Item < 10 Then $a_List_of_Button_ID[$IDX_Item] = GUICtrlCreateButton( _ $IDX_Item & ". " & $a_Options_List[$IDX_Item], _ 10, 90 + ($IDX_Item - 1) * 21, $i_Width - 45, 20, BitOR($BS_LEFT, $WS_GROUP)) Else $a_List_of_Button_ID[$IDX_Item] = GUICtrlCreateButton( _ Chr(Asc('A') + $IDX_Item - 10) & ". " & $a_Options_List[$IDX_Item], _ 10, 90 + ($IDX_Item - 1) * 21, $i_Width - 45, 20, BitOR($BS_LEFT, $WS_GROUP)) EndIf Next Local $temp_var = $a_Options_List[0] Local $a_accelerators[($temp_var * 2) + 1][2] Local $i_Accelerators_Counter = 0 Local $i_Accelerator_Char1 = '' Local $i_Accelerator_Char2 = '' For $IDX_Item = 1 To $a_Options_List[0] If $IDX_Item > 9 Then $i_Accelerator_Char1 = Chr(Asc('A') + $IDX_Item - 10) $i_Accelerator_Char2 = Chr(Asc('a') + $IDX_Item - 10) Else $i_Accelerator_Char1 = "{NUMPAD" & $IDX_Item & "}" ;Chr(48 + $IDX_Item) $i_Accelerator_Char2 = $IDX_Item EndIf $a_accelerators[($IDX_Item * 2) - 1][0] = $i_Accelerator_Char1 $a_accelerators[($IDX_Item * 2) - 1][1] = $a_List_of_Button_ID[$IDX_Item] $a_accelerators[($IDX_Item * 2) - 1 + 1][0] = $i_Accelerator_Char2 $a_accelerators[($IDX_Item * 2) - 1 + 1][1] = $a_List_of_Button_ID[$IDX_Item] $i_Accelerators_Counter += 2 Next $a_accelerators[0][0] = $i_Accelerators_Counter GUISetAccelerators($a_accelerators, $hChild) GUICtrlSetData($id_Label1, $s_Description) GUISetState(@SW_SHOW, $hWND_DateForm) GUISetState(@SW_SHOW, $hChild) #EndRegion _my_gui_Wybierz - GUI Creation #Region - _my_gui_Wybierz - Handling messages Local $i_Selected_item = 0 Local $v_Return_Value = "" Local $a_GUI_Messages While 1 $a_GUI_Messages = GUIGetMsg($GUI_EVENT_ARRAY) If $a_GUI_Messages[0] = $GUI_EVENT_NONE Then ; do nothing ElseIf $a_GUI_Messages[1] = $hWND_DateForm Then If $a_GUI_Messages[0] = $GUI_EVENT_CLOSE Then ExitLoop ElseIf $a_GUI_Messages[1] <> $hChild Then ; .... Else For $IDX_Check = 1 To $a_Options_List[0] If $a_List_of_Button_ID[$IDX_Check] = $a_GUI_Messages[0] Then $v_Return_Value = GUICtrlRead($a_List_of_Button_ID[$IDX_Check]) $i_Selected_item = $IDX_Check $v_Return_Value = _RegExpFirstMatch($v_Return_Value, '.+?\. (.+)') ExitLoop 2 ; exit from ForNext and also from WhileWend EndIf Next EndIf WEnd #EndRegion - _my_gui_Wybierz - Handling messages GUIDelete($hChild) GUIDelete($hWND_DateForm) Return SetError(0, $i_Selected_item, $v_Return_Value) EndFunc ;==>_my_gui_Wybierz Func WM_VSCROLL($hWnd, $msg, $wParam, $lParam) #forceref $msg, $wParam, $lParam Local $nScrollCode = BitAND($wParam, 0x0000FFFF) Local $index = -1, $yChar, $yPos Local $Min, $Max, $Page, $Pos, $TrackPos For $x = 0 To UBound($aSB_WindowInfo) - 1 If $aSB_WindowInfo[$x][0] = $hWnd Then $index = $x $yChar = $aSB_WindowInfo[$index][3] ExitLoop EndIf Next If $index = -1 Then Return 0 ; Get all the vertial scroll bar information Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT) $Min = DllStructGetData($tSCROLLINFO, "nMin") $Max = DllStructGetData($tSCROLLINFO, "nMax") $Page = DllStructGetData($tSCROLLINFO, "nPage") ; Save the position for comparison later on $yPos = DllStructGetData($tSCROLLINFO, "nPos") $Pos = $yPos $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos") Switch $nScrollCode Case $SB_TOP ; user clicked the HOME keyboard key DllStructSetData($tSCROLLINFO, "nPos", $Min) Case $SB_BOTTOM ; user clicked the END keyboard key DllStructSetData($tSCROLLINFO, "nPos", $Max) Case $SB_LINEUP ; user clicked the top arrow DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1) Case $SB_LINEDOWN ; user clicked the bottom arrow DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1) Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page) Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page) Case $SB_THUMBTRACK ; user dragged the scroll box DllStructSetData($tSCROLLINFO, "nPos", $TrackPos) EndSwitch ; Set the position and then retrieve it. Due to adjustments ; by Windows it may not be the same as the value set. DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) ; If the position has changed, scroll the window and update it $Pos = DllStructGetData($tSCROLLINFO, "nPos") If ($Pos <> $yPos) Then _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos)) $yPos = $Pos EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_VSCROLL Func _RegExpFirstMatch($s_Data, $s_Pattern) Local $a_Results = StringRegExp($s_Data, $s_Pattern, $STR_REGEXPARRAYGLOBALMATCH) If @error Then Return SetError(@error, @extended, '') Return SetError(0, UBound($a_Results), $a_Results[0]) EndFunc ;==>_RegExpFirstMatch  
      I have few problems with this code, and many question related to them.
      Question 1:
      How to make the Scrollbars to work ?
      I mean to scroll buttons.
      Question 2:
      Do I must to ues Child Window, or is it possible to scroll buttons without using Child Window ?
      Question 3:
      Why after uncommenting this following line:
      ;~ _GUIScrollBars_SetScrollRange($hChild, $SB_VERT, 3, 30) the ScrollBar disapears ?
    • By Mo0C0w
      Hey guys!
      I just started working with the GUI yesterday and it has only brought more fun to the Autoit adventure  
      Basically I have a GUI windows that opens and based on the selection of the combo box the button will do something different. This specific scenario I am talking about the Client Update Verification  combo selection. When selected and the button is pressed my second gui window opens. As of now if I only paste comp1 or comp2 by itself it works correctly, but if I paste both, it has a fit.
      What would the correct way to do this be? Any help or examples, would be greatly appreciated! Thank you in advance
       
      #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Client_List.au3> #Region ### START Koda GUI section ### Form=c:\users\dnoble\pictures\plexiibox v4.kxf Global $Form1_1 = GUICreate("Plexii", 336, 419, 1548, 586) GUISetBkColor(0xFFFFFF) Global $Pic1 = GUICtrlCreatePic("C:\Users\dnoble\Pictures\plexii.jpg", 41, 0, 252, 268, BitOR($GUI_SS_DEFAULT_PIC,$SS_CENTERIMAGE)) Global $Label2 = GUICtrlCreateLabel("Select Test", 125, 280, 95, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") Global $Combo2 = GUICtrlCreateCombo("Select Test", 39, 312, 257, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) GUICtrlSetData(-1, "Client Update Verification|Bids") GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") Global $Button1 = GUICtrlCreateButton("Proceed", 111, 352, 129, 33) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 If GUICtrlRead($Combo2) = "Client Update Verification" Then _Form2() ;clientupdateverification() EndSwitch WEnd Func _Form2() #Region ### START Koda GUI section ### Form=c:\users\dnoble\pictures\plexiiboxclientupdate verification.kxf $Form1_1 = GUICreate("Plexii", 336, 521, 866, 454) GUISetBkColor(0xFFFFFF) $Edit1 = GUICtrlCreateEdit("", 57, 72, 241, 345) GUICtrlSetData(-1, "Edit1") $Button1 = GUICtrlCreateButton("Execute", 95, 440, 145, 41) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 If GUICtrlRead($Edit1) = "comp1" Then comp1() If GUICtrlRead($Edit1) = "comp2" Then comp2() EndSwitch WEnd EndFunc  

    • By AntS
      Help! The mouse clicks I'm sending to a control on a dialog box produce no response.
      The dialog box in question handles advanced display properties. The tab page my script interacts with is created by Trident Microsystems. It allows the user to enhance or attenuate the screen's RGB values. (See image.) My script automates the process of changing these in order to adjust the screen's hue or, when the red, green and blue values are all the same, the brightness.
      Producing a script to change the brightness has been quite straightforward. I use ControlClick() to send a mouse click to one of the trackbars on the right of the tab page. By default, they're linked and so move as one. The difficulty I'm having however is in automating the process when the desired red, green and blue values aren't the same as each other.
      Ordinarily, there are three ways of doing this: 
      (1) clear the Link check box to unlink the three trackbars then either click on each trackbar or drag their sliders,
      (2) clear the Link tick-box then for each colour, click on the corresponding trackbar slider (to select it) then click on a point on the graph, and
      (3) click on the Load button to open an Open dialog box and load a preset (stored as a .gam file).
      However, when ControlClick() is used to clear the Link check box or to push the Load button, nothing happens. Making the dialog box the active window makes no difference.
      The AutoIt Window Info tool indicates that the Reload a Bitmap, Save, Load and Reset buttons, the Link check box and the graph are all the same control. (See other images.) In fact, it there are only four controls on the page: the tab page, which is an instance of a SysTabControl32 class, and the three trackbars, each of which is an instance of the TridentTrackBar class. (Am unsure whether the SysTabControl32 class is a Windows or third-party control.)
      What's the solution?
      Note that the MouseClick() function—as opposed to ControlClick()—does work, but having AutoIt commandeer the screen pointer isn't an acceptable solution.
      For the sake of completeness, here's the relevant code fragment for the Link check box. 
      ;unlink trackbars WinActivate("(Multiple Monitors)") ControlClick("(Multiple Monitors)", "", 12320, "left", 1, 211, 252)  



×
×
  • Create New...