Sign in to follow this  
Followers 0
Mungo

Simple button and icon toolbar with hover effect - problem

6 posts in this topic

#1 ·  Posted (edited)

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



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

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
3 people like this

Share this post


Link to post
Share on other sites

 

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

#6 ·  Posted (edited)

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  
Followers 0

  • Similar Content

    • GordonFreeman
      By GordonFreeman
      Hi, i searched some topics but cannot found a simple way to do that:
      #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $Form1 = GUICreate("Form1", 615, 438, 192, 124) GUISetState(@SW_SHOW) ; I tried this but user reported that it work in 2006, not seems work actually $filemenu = GUICtrlCreateMenu ("&File") $fileitem = GUICtrlCreateMenuitem ("Open",$filemenu) GuiCtrlSetImage($fileitem, "shell32.dll", 4) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Also tried:
      #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $Form1 = GUICreate("Form1", 615, 438, 192, 124) GUISetState(@SW_SHOW) $filemenu = TrayCreateMenu("&File") $fileitem = TrayCreateItem("Open",$filemenu) ;GuiCtrlSetImage($fileitem, "shell32.dll", 4) ;GuiCtrlSetImage(TrayItemGetHandle($fileitem), "shell32.dll", 4) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Well.. thanks in advance!
       
      Ok. I found this working example from Yashied. If i cannot find a simple then i will go with it
      #Include <GUIConstantsEx.au3> #Include <GUIMenu.au3> #Include <Constants.au3> #Include <WinAPI.au3> #Include <WindowsConstants.au3> Opt('MustDeclareVars', 1) Global $hMenu, $hForm, $hFile = 1000, $idNew, $idExit $hForm = GUICreate('Menu', 400, 300) $hFile = _GUICtrlMenu_CreateMenu() _GUICtrlMenu_InsertMenuItem ($hFile, 0, ' &Favorites', $idNew) _GUICtrlMenu_InsertMenuItem ($hFile, 1, '', 0) _GUICtrlMenu_InsertMenuItem($hFile, 2, ' E&xit', $idExit) $hMenu = _GUICtrlMenu_CreateMenu() _GUICtrlMenu_InsertMenuItem($hMenu, 0, '&File', 0, $hFile) _GUICtrlMenu_SetMenu($hForm, $hMenu) _GUICtrlMenu_SetItemBmp($hFile, 0, _CreateBitmapFromIcon(_WinAPI_GetSysColor($COLOR_MENU), @SystemDir & '\shell32.dll', 43, 16, 16)) _GUICtrlMenu_SetItemBmp($hFile, 2, _CreateBitmapFromIcon(_WinAPI_GetSysColor($COLOR_MENU), @SystemDir & '\shell32.dll', 27, 16, 16)) GUISetState() Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Func _CreateBitmapFromIcon($iBackground, $sIcon, $iIndex, $iWidth, $iHeight) Local $hDC, $hBackDC, $hBackSv, $hIcon, $hBitmap $hDC = _WinAPI_GetDC(0) $hBackDC = _WinAPI_CreateCompatibleDC($hDC) $hBitmap = _WinAPI_CreateSolidBitmap(0, $iBackground, $iWidth, $iHeight) $hBackSv = _WinAPI_SelectObject($hBackDC, $hBitmap) $hIcon = _WinAPI_PrivateExtractIcon($sIcon, $iIndex, $iWidth, $iHeight) If Not @error Then _WinAPI_DrawIconEx($hBackDC, 0, 0, $hIcon, 0, 0, 0, 0, $DI_NORMAL) _WinAPI_DestroyIcon($hIcon) EndIf _WinAPI_SelectObject($hBackDC, $hBackSv) _WinAPI_ReleaseDC(0, $hDC) _WinAPI_DeleteDC($hBackDC) Return $hBitmap EndFunc ;==>_CreateBitmapFromIcon Func _WinAPI_PrivateExtractIcon($sIcon, $iIndex, $iWidth, $iHeight) Local $hIcon, $tIcon = DllStructCreate('hwnd'), $tID = DllStructCreate('hwnd') Local $Ret = DllCall('user32.dll', 'int', 'PrivateExtractIcons', 'str', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr', DllStructGetPtr($tIcon), 'ptr', DllStructGetPtr($tID), 'int', 1, 'int', 0) If (@error) Or ($Ret[0] = 0) Then Return SetError(1, 0, 0) EndIf $hIcon = DllStructGetData($tIcon, 1) If ($hIcon = Ptr(0)) Or (Not IsPtr($hIcon)) Then Return SetError(1, 0, 0) EndIf Return $hIcon EndFunc ;==>_WinAPI_PrivateExtractIcon Ok, i noticed that is a pain create submenu with _GUICtrlMenu_CreatePopup to do like in Tray, and Tray better located, then i need images/icon with Tray functions, some workaround?? 
    • thoms
      By thoms
      Hello Forum,
      As said in the title, I'm searching a way to disable all tabstops in a GUI. My GUI includes 15 buttons and 3 edit controls.
      My questions:
      - is there a way to disable all tabstops at a time
      - is there a way to list all controls of a GUI and then disable tabstops one by one
      - or should I use the following line after each button creation:
      _WinAPI_SetWindowLong(GUICtrlGetHandle(-1), $GWL_STYLE, BitAND(_WinAPI_GetWindowLong(GUICtrlGetHandle(-1), $GWL_STYLE), BitNOT($WS_TABSTOP))) Thanks in advance for your valuable help!
      Thoms
      Edit: or maybe disable TAB key? I don't remember how to do!
    • WoodGrain
      By WoodGrain
      Hi All,
      I'm using UseTraySetIcon("shell32.dll", xx) to set my tray icon to a specific icon while running, is there a way I can specify this icon when I compile my script into an exe so my exe icon is the same?
      Thanks!
    • AppSoftwareVld
      By AppSoftwareVld
      Hello,
       
      I need this for a project and I don't find a method for the next problem.
      I want when I click a button to create a variable ("$variable1") so if I press one more time to create one more ("$variable2") and create more and more how many times you press the button.
       
      Do you have an idea ? 
      Thank you for your attention !
    • nacerbaaziz
      By nacerbaaziz
      Hi guys
      I have an inquiry please
      I want an example of how to add an icon file to the compiled autoit file and how to use it in GUICtrlCreateIcon
      Preferably in a separate list within the resourceFor example myIcons
      I hope my request is clear and I hope you will help me solve this problem
      Because I found an example in the help files but I did not understand the method well