Jump to content
Sign in to follow this  
Mungo

Simple button and icon toolbar with hover effect - problem

Recommended Posts

Mungo

I tried to come up with a simple toolbar which displays the plain icons (without a button frame) but also shows a button effect when hovered or clicked on.

My approach was to create a button, add an icon and hide the icon button again. Then place the icon without the button on top of it. When the mouse is moved over the icon I hide the icon (which leaves button displayed) giving me the hover effect for hover and clicks (using GUIGetCursorInfo() to get the icon ID).

It seem to work ... but sometimes the hover effect does not show as expected especially when the mouse is moved slowly to the edge of the icon. While the icon ID is being read and action triggered (see Mouse OVER text) the icon itself is not being hidden (and button displayed).

I found that the effect is more likely to occur when the GUI is freshly loaded.

Can anyone reproduce this effect? I wonder what may causes this effect or is anything wrong in my coding?

Any hint and support would be appreciated!

Many thanks

#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

f_toolbar()

Func f_toolbar()
    Local $id_button_1_a, $id_button_2_a, $id_button_3_a
    Local $id_button_1_b, $id_button_2_b, $id_button_3_b
    Local $id_button_close
    Local $h_toolbar_gui, $msg_pop, $id_output_lbl

    ; -- Declare and set mouse over variables
    Local $last_tool_b_id = 0       ; ID of last button/icon visited
    Local $a_cursor_b_info          ; GUIGetCursorInfo() array

    Local $win_w = 400              ; GUI width
    Local $win_h = 400              ; GUI height
    Local $icon_file = @SystemDir & "\shell32.dll"

    ; -- Create the GUI -------------------------------------------------------------------------------------------------------
    $h_toolbar_gui = GUICreate("Toolbar hover - Test ...", $win_w, $win_h)

    ; -- A frame for the toolbar
    GUICtrlCreateLabel("", 3, 3, $win_w-3, 44, $SS_ETCHEDFRAME )
    GUICtrlSetState(-1, $GUI_DISABLE)

    ; -- The Toolbar
    ; -- 1. Toolbar button -----------------------------------------------------------------------------------------------------
    $id_button_1_a = GUICtrlCreateButton("1", 4, 4, 40, 40, $BS_ICON)                                                           ; Create BUTTON
    GUICtrlSetImage(-1, $icon_file, -71, 1)                                                                                     ; Add ICON to button
    GUICtrlSetState(-1, $GUI_HIDE)                                                                                              ; Hide ICON BUTTON again
    $id_button_1_b = GUICtrlCreateIcon($icon_file, -71, 4, 4, 40, 40, $BS_CENTER)                                               ; Create ICON to display

    ; -- 2. Toolbar button -----------------------------------------------------------------------------------------------------
    $id_button_2_a = GUICtrlCreateButton("2", 44, 4, 40, 40, $BS_ICON)                                                          ; Create BUTTON
    GUICtrlSetImage(-1, $icon_file, -5, 1)                                                                                      ; Add ICON to button
    GUICtrlSetState(-1, $GUI_HIDE)                                                                                              ; Hide ICON BUTTON again
    $id_button_2_b = GUICtrlCreateIcon($icon_file, -5, 44, 4, 40, 40, $BS_CENTER)                                               ; Create ICON to display

    ; -- 3. Toolbar button -----------------------------------------------------------------------------------------------------
    $id_button_3_a = GUICtrlCreateButton("3", 84, 4, 40, 40, $BS_ICON)
    GUICtrlSetImage(-1, $icon_file, -28, 1)                                                                                     ; Add ICON to button
    GUICtrlSetState(-1, $GUI_HIDE)                                                                                              ; Hide ICON BUTTON again
    $id_button_3_b = GUICtrlCreateIcon($icon_file, -28, 84, 4, 40, 40, $BS_CENTER)                                              ; Create ICON to display

    ; -- Lable CTRL for feedback
    $id_output_lbl = GUICtrlCreateLabel("Move mouse over toolbar ...", 4, 100, $win_w-8, 16)                                    ; Lable for feedback
    GUICtrlSetBkColor($id_output_lbl, 0xFFFFFF)

    ; -- The Close button
    $id_button_close = GUICtrlCreateButton("Close", $win_w/2-40, $win_h-40, 80, 24, $BS_DEFPUSHBUTTON)

    GUISetState(@SW_SHOW)

    While 1
        $msg_pop = GUIGetMsg()
        Select
            Case $msg_pop = $GUI_EVENT_CLOSE
                ExitLoop

            Case $msg_pop = $id_button_close
                ExitLoop

            Case $msg_pop = $id_button_1_a Or $msg_pop = $id_button_1_b
                GUICtrlSetState($id_button_1_a, $GUI_SHOW)                                                                      ; Show BUTTON
                MsgBox(32, "DEBUG", "Button 1 pressed ...", 0, $h_toolbar_gui)

            Case $msg_pop = $id_button_2_a Or $msg_pop = $id_button_2_b
                GUICtrlSetState($id_button_2_a, $GUI_SHOW)                                                                      ; Show BUTTON
                MsgBox(32, "DEBUG", "Button 2 pressed ...", 0, $h_toolbar_gui)

            Case $msg_pop = $id_button_3_a Or $msg_pop = $id_button_3_b
                GUICtrlSetState($id_button_3_a, $GUI_SHOW)                                                                      ; Show BUTTON
                MsgBox(32, "DEBUG", "Button 3 pressed ...", 0, $h_toolbar_gui)

            Case Else
                $a_cursor_b_info = GUIGetCursorInfo($h_toolbar_gui)  ; - $aArray[4] = ID of the control that the mouse cursor is hovering over (or 0 if none)

                Select
                    ; -- Button 1 - Cursor -------------------------------------------------------------------------------------
                    Case  $a_cursor_b_info[4] = $id_button_1_b And $last_tool_b_id <> $id_button_1_b And $last_tool_b_id = 0    ; MOUSE OVER
                        GUICtrlSetState($id_button_1_a, $GUI_SHOW)                                                              ; Show BUTTON
                        GUICtrlSetData($id_output_lbl, "Mouse OVER - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl, 0xFFFF00)
                        $last_tool_b_id = $id_button_1_b
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                    Case $a_cursor_b_info[4] <> $id_button_1_b And $last_tool_b_id = $id_button_1_b                             ; NO MOUSE OVER
                        GUICtrlSetState($id_button_1_a, $GUI_HIDE)                                                              ; Hide BUTTON
                        $a_cursor_b_info[4] = 0
                        GUICtrlSetData($id_output_lbl, "Mouse AWAY - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl,  0x99CCFF)
                        $last_tool_b_id = 0
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                    ; -- Button 2 - Cursor -------------------------------------------------------------------------------------
                    Case  $a_cursor_b_info[4] = $id_button_2_b And $last_tool_b_id <> $id_button_2_b And $last_tool_b_id = 0    ; MOUSE OVER
                        GUICtrlSetState($id_button_2_a, $GUI_SHOW)                                                              ; Show BUTTON
                        GUICtrlSetData($id_output_lbl, "Mouse OVER - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl, 0xFFFF00)
                        $last_tool_b_id = $id_button_2_b
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                    Case $a_cursor_b_info[4] <> $id_button_2_b And $last_tool_b_id = $id_button_2_b                             ; NO MOUSE OVER
                        GUICtrlSetState($id_button_2_a, $GUI_HIDE)                                                              ; Hide BUTTON
                        $a_cursor_b_info[4] = 0
                        GUICtrlSetData($id_output_lbl, "Mouse AWAY - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl,  0x99CCFF)
                        $last_tool_b_id = 0
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                    ; -- Button 3 - Cursor -------------------------------------------------------------------------------------
                    Case  $a_cursor_b_info[4] = $id_button_3_b And $last_tool_b_id <> $id_button_3_b And $last_tool_b_id = 0    ; MOUSE OVER
                        GUICtrlSetState($id_button_3_a, $GUI_SHOW)                                                              ; Show BUTTON
                        GUICtrlSetData($id_output_lbl, "Mouse OVER - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl, 0xFFFF00)
                        $last_tool_b_id = $id_button_3_b
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                    Case $a_cursor_b_info[4] <> $id_button_3_b And $last_tool_b_id = $id_button_3_b                             ; NO MOUSE OVER
                        GUICtrlSetState($id_button_3_a, $GUI_HIDE)                                                              ; Hide BUTTON
                        $a_cursor_b_info[4] = 0
                        GUICtrlSetData($id_output_lbl, "Mouse AWAY - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl,  0x99CCFF)
                        $last_tool_b_id = 0
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                EndSelect
        EndSelect
    WEnd

    GUIDelete()
EndFunc   ;==> f_toolbar()
Edited by Mungo

Share this post


Link to post
Share on other sites
Yashied
Mungo

Thanks Yashied,

Yes, I try to get my head around the powerful _GUICtrlToolbar_... and _GUICtrlRebar_...  functions ... However, still try to understand why my example behaves the way it does ... icon not hiding despite action triggered ?

Well, I try keep learning all the time.  :sweating:

Cheers :shifty:

Share this post


Link to post
Share on other sites
Yashied

The problem in overlapping controls.

 

#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

f_toolbar()

Func f_toolbar()
    Local $id_button_1_a, $id_button_2_a, $id_button_3_a
    Local $id_button_1_b, $id_button_2_b, $id_button_3_b
    Local $id_button_close
    Local $h_toolbar_gui, $msg_pop, $id_output_lbl

    ; -- Declare and set mouse over variables
    Local $last_tool_b_id = 0       ; ID of last button/icon visited
    Local $a_cursor_b_info          ; GUIGetCursorInfo() array

    Local $win_w = 400              ; GUI width
    Local $win_h = 400              ; GUI height
    Local $icon_file = @SystemDir & "\shell32.dll"

    ; -- Create the GUI -------------------------------------------------------------------------------------------------------
    $h_toolbar_gui = GUICreate("Toolbar hover - Test ...", $win_w, $win_h)

    ; -- A frame for the toolbar
    GUICtrlCreateLabel("", 3, 3, $win_w-3, 44, $SS_ETCHEDFRAME )
    GUICtrlSetState(-1, $GUI_DISABLE)

    ; -- The Toolbar
    ; -- 1. Toolbar button -----------------------------------------------------------------------------------------------------
    $id_button_1_a = GUICtrlCreateButton("1", 4, 4, 40, 40, $BS_ICON)                                                           ; Create BUTTON
    GUICtrlSetImage(-1, $icon_file, -71, 1)                                                                                     ; Add ICON to button
    GUICtrlSetState(-1, $GUI_HIDE)                                                                                              ; Hide ICON BUTTON again
    $id_button_1_b = GUICtrlCreateIcon($icon_file, -71, 4, 4, 40, 40, $BS_CENTER)                                               ; Create ICON to display

    ; -- 2. Toolbar button -----------------------------------------------------------------------------------------------------
    $id_button_2_a = GUICtrlCreateButton("2", 44, 4, 40, 40, $BS_ICON)                                                          ; Create BUTTON
    GUICtrlSetImage(-1, $icon_file, -5, 1)                                                                                      ; Add ICON to button
    GUICtrlSetState(-1, $GUI_HIDE)                                                                                              ; Hide ICON BUTTON again
    $id_button_2_b = GUICtrlCreateIcon($icon_file, -5, 44, 4, 40, 40, $BS_CENTER)                                               ; Create ICON to display

    ; -- 3. Toolbar button -----------------------------------------------------------------------------------------------------
    $id_button_3_a = GUICtrlCreateButton("3", 84, 4, 40, 40, $BS_ICON)
    GUICtrlSetImage(-1, $icon_file, -28, 1)                                                                                     ; Add ICON to button
    GUICtrlSetState(-1, $GUI_HIDE)                                                                                              ; Hide ICON BUTTON again
    $id_button_3_b = GUICtrlCreateIcon($icon_file, -28, 84, 4, 40, 40, $BS_CENTER)                                              ; Create ICON to display

    ; -- Lable CTRL for feedback
    $id_output_lbl = GUICtrlCreateLabel("Move mouse over toolbar ...", 4, 100, $win_w-8, 16)                                    ; Lable for feedback
    GUICtrlSetBkColor($id_output_lbl, 0xFFFFFF)

    ; -- The Close button
    $id_button_close = GUICtrlCreateButton("Close", $win_w/2-40, $win_h-40, 80, 24, $BS_DEFPUSHBUTTON)

    GUISetState(@SW_SHOW)

    While 1
        $msg_pop = GUIGetMsg()
        Select
            Case $msg_pop = $GUI_EVENT_CLOSE
                ExitLoop

            Case $msg_pop = $id_button_close
                ExitLoop

            Case $msg_pop = $id_button_1_a Or $msg_pop = $id_button_1_b
                GUICtrlSetState($id_button_1_a, $GUI_SHOW)
                MsgBox(32, "DEBUG", "Button 1 pressed ...", 0, $h_toolbar_gui)

            Case $msg_pop = $id_button_2_a Or $msg_pop = $id_button_2_b
                GUICtrlSetState($id_button_2_a, $GUI_SHOW)
                MsgBox(32, "DEBUG", "Button 2 pressed ...", 0, $h_toolbar_gui)

            Case $msg_pop = $id_button_3_a Or $msg_pop = $id_button_3_b
                GUICtrlSetState($id_button_3_a, $GUI_SHOW)
                MsgBox(32, "DEBUG", "Button 3 pressed ...", 0, $h_toolbar_gui)

            Case Else
                $a_cursor_b_info = GUIGetCursorInfo($h_toolbar_gui)  ; - $aArray[4] = ID of the control that the mouse cursor is hovering over (or 0 if none)

                Select
                    ; -- Button 1 - Cursor -------------------------------------------------------------------------------------
                    Case  $a_cursor_b_info[4] = $id_button_1_b And $last_tool_b_id = 0                                          ; MOUSE OVER
                        GUICtrlSetState($id_button_1_a, $GUI_SHOW)
                        GUICtrlSetState($id_button_1_b, $GUI_HIDE)
                        GUICtrlSetData($id_output_lbl, "Mouse OVER - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl, 0xFFFF00)
                        _Swap($id_button_1_a, $id_button_1_b)
                        $last_tool_b_id = $id_button_1_b
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                    Case $a_cursor_b_info[4] <> $id_button_1_b And $last_tool_b_id = $id_button_1_b                             ; NO MOUSE OVER
                        GUICtrlSetState($id_button_1_a, $GUI_SHOW)
                        GUICtrlSetState($id_button_1_b, $GUI_HIDE)
                        $a_cursor_b_info[4] = 0
                        GUICtrlSetData($id_output_lbl, "Mouse AWAY - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl,  0x99CCFF)
                        _Swap($id_button_1_a, $id_button_1_b)
                        $last_tool_b_id = 0
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                    ; -- Button 2 - Cursor -------------------------------------------------------------------------------------
                    Case  $a_cursor_b_info[4] = $id_button_2_b And $last_tool_b_id = 0                                          ; MOUSE OVER
                        GUICtrlSetState($id_button_2_a, $GUI_SHOW)
                        GUICtrlSetState($id_button_2_b, $GUI_HIDE)
                        GUICtrlSetData($id_output_lbl, "Mouse OVER - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl, 0xFFFF00)
                        _Swap($id_button_2_a, $id_button_2_b)
                        $last_tool_b_id = $id_button_2_b
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                    Case $a_cursor_b_info[4] <> $id_button_2_b And $last_tool_b_id = $id_button_2_b                             ; NO MOUSE OVER
                        GUICtrlSetState($id_button_2_a, $GUI_SHOW)
                        GUICtrlSetState($id_button_2_b, $GUI_HIDE)
                        $a_cursor_b_info[4] = 0
                        GUICtrlSetData($id_output_lbl, "Mouse AWAY - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl,  0x99CCFF)
                        _Swap($id_button_2_a, $id_button_2_b)
                        $last_tool_b_id = 0
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                    ; -- Button 3 - Cursor -------------------------------------------------------------------------------------
                    Case  $a_cursor_b_info[4] = $id_button_3_b And $last_tool_b_id = 0                                          ; MOUSE OVER
                        GUICtrlSetState($id_button_3_a, $GUI_SHOW)
                        GUICtrlSetState($id_button_3_b, $GUI_HIDE)
                        GUICtrlSetData($id_output_lbl, "Mouse OVER - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl, 0xFFFF00)
                        _Swap($id_button_3_a, $id_button_3_b)
                        $last_tool_b_id = $id_button_3_b
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                    Case $a_cursor_b_info[4] <> $id_button_3_b And $last_tool_b_id = $id_button_3_b                             ; NO MOUSE OVER
                        GUICtrlSetState($id_button_3_a, $GUI_SHOW)
                        GUICtrlSetState($id_button_3_b, $GUI_HIDE)
                        $a_cursor_b_info[4] = 0
                        GUICtrlSetData($id_output_lbl, "Mouse AWAY - Ctrl ID:" & @TAB & $a_cursor_b_info[4])
                        GUICtrlSetBkColor($id_output_lbl,  0x99CCFF)
                        _Swap($id_button_3_a, $id_button_3_b)
                        $last_tool_b_id = 0
                        ; -- DEBUG -----------------------------------------------------------------
                         ConsoleWrite("> ... " &  "$last_tool_b_id - Ctrl ID:" & @TAB & $last_tool_b_id & @CRLF)
                        ; -- DEBUG -----------------------------------------------------------------

                EndSelect
        EndSelect
    WEnd

    GUIDelete()
EndFunc   ;==> f_toolbar()

Func _Swap(ByRef $iNum1, ByRef $iNum2)
    Local $Temp = $iNum1
    $iNum1 = $iNum2
    $iNum2 = $Temp
EndFunc   ;==>_Swap

Here is a complete example of using Toolbar control.

 

#Include <GUIConstantsEx.au3>
#Include <GUIImageList.au3>
#Include <GUIToolbar.au3>
#Include <StaticConstants.au3>
#Include <ToolbarConstants.au3>
#Include <WindowsConstants.au3>
#Include <WinAPIEx.au3>

$hForm = GUICreate('MyGUI', 332, 332)

$hTool = GUICreate('', 332, 64, 0, 0, $WS_CHILD, 0, $hForm)
$Dummy = GUICtrlCreateDummy()

$hToolbar = _GUICtrlToolbar_Create($hTool, BitOR($BTNS_BUTTON, $BTNS_SHOWTEXT, $TBSTYLE_FLAT, $TBSTYLE_TOOLTIPS), $TBSTYLE_EX_DOUBLEBUFFER)

$hImageList = _GUIImageList_Create(32, 32, 5, 1, 5)
Dim $Icon[5] = [19, 205, 298, 300, 304]
For $i = 0 To 4
    $hIcon = _WinAPI_ShellExtractIcon(@SystemDir & '\shell32.dll', $Icon[$i], 32, 32)
    _GUIImageList_ReplaceIcon($hImageList, -1, $hIcon)
    _WinAPI_DestroyIcon($hIcon)
Next

_GUICtrlToolbar_SetImageList($hToolbar, $hImageList)

_GUICtrlToolbar_AddString($hToolbar, 'Button 1')
_GUICtrlToolbar_AddString($hToolbar, 'Button 2')
_GUICtrlToolbar_AddString($hToolbar, 'Button 3')
_GUICtrlToolbar_AddString($hToolbar, 'Button 4')
_GUICtrlToolbar_AddString($hToolbar, 'Button 5')

_GUICtrlToolbar_AddButton($hToolbar, 10000, 0, 0)
_GUICtrlToolbar_AddButton($hToolbar, 10001, 1, 1)
_GUICtrlToolbar_AddButtonSep($hToolbar, 5)
_GUICtrlToolbar_AddButton($hToolbar, 10002, 2, 2)
_GUICtrlToolbar_AddButton($hToolbar, 10003, 3, 3)
_GUICtrlToolbar_AddButton($hToolbar, 10004, 4, 4)

_GUICtrlToolbar_SetButtonSize($hToolbar, 64, 64)
_GUICtrlToolbar_SetMetrics($hToolbar, 0, 0, 1, 0)
_GUICtrlToolbar_SetIndent($hToolbar, 1)

_SendMessage($hToolbar, $TB_AUTOSIZE)

GUISwitch($hForm)

; Main GUI controls...

GUICtrlCreateLabel('', 0, 64, 335, 2, $SS_ETCHEDHORZ)

GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

GUISetState(@SW_SHOWNOACTIVATE, $hTool)
GUISetState(@SW_SHOW, $hForm)

While 1
    Switch GUIGetMsg()
        Case 0
            ContinueLoop
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $Dummy
            $ID = GUICtrlRead($Dummy)
            Switch $ID
                Case 10000 ; Button 1
                    MsgBox(64, 'Toolbar', 'Button 1 has been pressed!', 0, $hForm)
                Case 10001 ; Button 2
                    MsgBox(64, 'Toolbar', 'Button 2 has been pressed!', 0, $hForm)
                Case 10002 ; Button 3
                    MsgBox(64, 'Toolbar', 'Button 3 has been pressed!', 0, $hForm)
                Case 10003 ; Button 4
                    MsgBox(64, 'Toolbar', 'Button 4 has been pressed!', 0, $hForm)
                Case 10004 ; Button 5
                    MsgBox(64, 'Toolbar', 'Button 5 has been pressed!', 0, $hForm)
                Case Else

            EndSwitch
    EndSwitch
WEnd

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)

    Local $ID = BitAND($wParam, 0xFFFF)

    Switch $hWnd
        Case $hTool
            Switch $ID
                Case 10000 To 10004 ; Button 1 - Button 5
                    GUICtrlSendToDummy($Dummy, $ID)
                Case Else

            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

    Local $tNMIA = DllStructCreate($tagNMITEMACTIVATE, $lParam)
    Local $hTarget = DllStructGetData($tNMIA, 'hWndFrom')
    Local $ID = DllStructGetData($tNMIA, 'Code')

    Switch $hWnd
        Case $hTool
            Switch $hTarget
                Case $hToolbar
                    Switch $ID
                        Case $TBN_GETINFOTIPW

;~                          Local $tNMTBGIT = DllStructCreate($tagNMTBGETINFOTIP, $lParam)
                            Local $tNMTBGIT = DllStructCreate($tagNMHDR & ';ptr Text;int TextMax;int Item;lparam lParam;', $lParam)
                            Local $Item = DllStructGetData($tNMTBGIT, 'Item')
                            Local $Text = ''

                            Switch $Item
                                Case 10000 ; Button 1
                                    $Text = 'Tooltip 1'
                                Case 10001 ; Button 2
                                    $Text = 'Tooltip 2'
                                Case 10002 ; Button 3
                                    $Text = 'Tooltip 3'
                                Case 10003 ; Button 4
                                    $Text = 'Tooltip 4'
                                Case 10004 ; Button 5
                                    $Text = 'Tooltip 5'
                                Case Else

                            EndSwitch
                            If $Text Then
                                DllStructSetData(DllStructCreate('wchar[' & DllStructGetData($tNMTBGIT, 'TextMax') & ']', DllStructGetData($tNMTBGIT, 'Text')), 1, $Text)
                            EndIf
                    EndSwitch
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

In addition, you can use my Skin UDF.

 

#Include <GDIPlus.au3>
#Include <GUIConstantsEx.au3>
#Include <Skin.au3>

_GDIPlus_Startup()

$hForm = GUICreate('MyGUI', 401, 160)
GUISetBkColor(0xF0F0F0)
$Button1 = _Skin_AddButton(12, 119, 29, 29, _LoadBitmap('down_normal.bmp'), _LoadBitmap('down_over.bmp'), _LoadBitmap('down_push.bmp'))
$Button2 = _Skin_AddButton(46, 119, 29, 29, _LoadBitmap('up_normal.bmp'), _LoadBitmap('up_over.bmp'), _LoadBitmap('up_push.bmp'))
$Button3 = _Skin_AddButton(87, 124, 29, 29, _LoadBitmap('down_normal_small.bmp'), _LoadBitmap('down_over_small.bmp'), _LoadBitmap('down_push_small.bmp'))
$Button4 = _Skin_AddButton(111, 124, 29, 29, _LoadBitmap('up_normal_small.bmp'), _LoadBitmap('up_over_small.bmp'), _LoadBitmap('up_push_small.bmp'))
$Button5 = _Skin_AddButton(323, 14, 64, 64, _LoadBitmap('cd_normal.bmp'), _LoadBitmap('cd_over_push.bmp'), _LoadBitmap('cd_over_push.bmp'))
GUISetState()

While 1
    _Skin_Helper($hForm)
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $Button1
            ConsoleWrite('#1' & @CR)
        Case $Button2
            ConsoleWrite('#2' & @CR)
        Case $Button3
            ConsoleWrite('#3' & @CR)
        Case $Button4
            ConsoleWrite('#4' & @CR)
        Case $Button5
            ConsoleWrite('#5' & @CR)
    EndSwitch
WEnd

GUIDelete()

_Skin_Destroy()

Func _LoadBitmap($sPath)

    Local $hBitmap, $hImage

    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($sPath)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return $hBitmap
EndFunc   ;==>_LoadBitmap
  • Like 3

Share this post


Link to post
Share on other sites
SmOke_N

 

In addition, you can use my Skin UDF.

 

 

Nicely done


Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Share this post


Link to post
Share on other sites
Mungo

Yashied,

Thanks for the hint and addition to my coding - fixed the problem and learned and understood something new again ;)

Great examples for both the GuiToolbar as well as Skin UDFs. I probably will use both of them in different areas of my project.

I already started to work through the GuiToolbar examples before but had problems piecing things together and got stuck. However, with getting your examples I gave it another shot and it looks much more promising now.

Your example is nice and complete and it is much easier for me to comprehend now how it works (thumbs UP !). I just started and I am still working on it - and some questions undoubtedly will still arise  :graduated:

Cheers

Edited by Mungo

Share this post


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
Sign in to follow this  

  • Similar Content

    • timmy2
      By timmy2
      I'm using a graphic button in a form and I want to change it to another image when the cursor is hovered over the button. 
      I've got that working but the button flickers constantly.
      Here's my script:
      #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> ; create borderless, chromeless form into which image will be placed $Form1 = GUICreate("Welcome", 500, 500, -1, -1, BitOR($WS_SYSMENU,$WS_POPUP), 0) ; place image file in form $Pic1 = GUICtrlCreatePic("Welcometest.bmp", 0, 0, 500, 500) ; needed for some reason GuiCtrlSetState(-1,$GUI_DISABLE) ; display "Click to Continue" button $C2CBtn = GUICtrlCreatePic("C2C_off.bmp", 300, 300) ; display all of the above as a unit GUISetState(@SW_SHOW) While 1 $ggci = GUIGetCursorInfo($Form1) If $ggci[4] = $C2CBtn Then GUICtrlSetImage($C2CBtn,"C2C_on.bmp") Else GUICtrlSetImage($C2CBtn,"C2C_off.bmp") EndIf $nMsg = GuiGetMsg() Switch $nMsg Case $C2CBtn Exit EndSwitch Sleep(100) WEnd Resulting GUI

      Hovering the cursor over the button changes it as desired. Clicking on the button exits the demo (also desired).  But it flickers constantly. Not desired! ;-)
      The attached button images and background image are all 24b bmp files. The actual image used in place of the white box consists of high quality text and graphics so I can't use JPG format.
       
      Welcometest.bmp
      C2C_off.bmp
      C2C_on.bmp
    • dimm
      By dimm
      Is it possible to compile script without any icon resources included?
      When I make exe it uses default system icon of current OS even if I compile as console application.
      On other versions of Windows it looks a little strange

       
      Update:
      It seems that the only way is remove icons from exe after compilation using resource editors like ResHacker.

       
      another bad solution:
      Using corrupted 35 bytes icon file. Windows can't load it and shows default system icon.
      #pragma compile(Icon, broken.ico) broken.ico
    • nooneclose
      By nooneclose
      Hello again, I am in phase two of my help bot. I cannot figure out how to properly code Autoit to click on a webpage button using the I.E UDF. I want to click on the button that I have attached as an image. This button does not have a name but it has an ID. Here is the HTML code for this button that I found using chromes developer inspector.
      HTML Code: 
      <img role="button" tabindex="-1" id="toolactions_INSERT-tbb_image" src="nav_icon_insertkey.gif" alt="New Work Order CTRL+ALT+I" draggable="false"> Here is the code that I have so far:
      ;******************************************************************************* ; Opens IE and fill out a New Workorder ;******************************************************************************* ; Start IE at the ** Tracking Application in ****** $oIE = _IECreate("https:I_am_Bound_by_my_company_to_not_reveal_this_webpage") ; Wait for a browser page load to complete _IELoadWait($oIE) Sleep(6000) ; Store the field names where the important data will be sent Local $nWorkOrderB = _IEGetObjById($oIE, "toolactions_INSERT-tbb_image") _IEAction($nWorkOrderB, "click")  I want my program to click on the button that looks like a piece of paper with a blue # 
      (For those wondering, I am allowed to send images just not the URL.) 
      As always any help would be appreciated. 

    • MJ36
      By MJ36

      How to click this button ? 
      I Try 
       
      func test () $oCorrectObj = "" $tags = $oIE.document.GetElementsByTagName("button") For $tag in $tags $class_value = $tag.GetAttribute("type") If string($class_value) = "buttont" Then $oCorrectObj = $tag MsgBox(0, "Level: ", "Level found :)") Else MsgBox(16, "Failed", "Not found.") ExitLoop EndIf Next If IsObj ( $oCorrectObj ) Then _IEAction ($oCorrectObj, "click") EndIF  
      and
       
      func klik () Local $oFound = "" Local $oBtns = _IETagNameGetCollection($oIE, "span") For $oBtn In $oBtns If String($oBtn.classname) = "yt-uix-button-content" Then $oFound = $oBtn EndIf Next _IEAction ($oFound, "click") EndFunc  
      Please Help 
      Can you click it by name?
    • faustf
      By faustf
      i guys , like title anyone  have idea if is possible , and if yes if  have example to post ?  i find in forum and in google but  i dont know   how can start  to create  button with icon over toolbar near  clock or is  goog before language layout .
      sorry i not post any script but i dont know  where to start
      thankz
      at  all
×