Sets the icon for a part
#include <GuiStatusBar.au3>
_GUICtrlStatusBar_SetIcon ( $hWnd, $iPart [, $hIcon = -1 [, $sIconFile = ""]] )
$hWnd | Handle to the control |
$iPart | 0-based part index. If the control is in simple mode, this field is ignored. |
$hIcon | [optional] Handle to the icon. If this value is -1, the icon is removed. |
$sIconFile | [optional] Icon filename to be used. |
Success: | True Or Icon Handle if $sIconFile is selected (see remark). |
Failure: | False. |
@error: | 11 if the hIcon cannot be created for the $sIconFile. @extended contain the _WinAPI_GetLastError(). 12 the $sIconFile cannot be set. |
In case of the creation of an icon with $sIconFile the icon must be destroyed when the control is not used anymore.
This is a fix as during the display of the status bar the handle must be valid.
The previous example 2 was just working once because the GuiState() was issued before the _GUICtrlStatusBar_SetIcon().
But the icon was disappearing after a minimise and restore of the gui.
#include "Extras\HelpFileInternals.au3" #include <GUIConstantsEx.au3> #include <GuiStatusBar.au3> #include <WinAPIIcons.au3> Example() Func Example() ; Create GUI Local $hGUI = GUICreate("StatusBar Get/Set Icon (v" & @AutoItVersion & ")", 450, 320, 100, 100) Local $hStatus = _GUICtrlStatusBar_Create($hGUI) ; Create memo control _MemoCreate(2, 8, 444, 259) GUISetState(@SW_SHOW) ; Set parts Local $aParts[4] = [75, 150, 300, 400] _GUICtrlStatusBar_SetParts($hStatus, $aParts) _GUICtrlStatusBar_SetText($hStatus, "Part 1") _GUICtrlStatusBar_SetText($hStatus, "Part 2", 1) ; Set icons Local $ahIcons[2] $ahIcons[0] = _WinAPI_LoadShell32Icon(23) $ahIcons[1] = _WinAPI_LoadShell32Icon(40) _GUICtrlStatusBar_SetIcon($hStatus, 0, $ahIcons[0]) _GUICtrlStatusBar_SetIcon($hStatus, 1, $ahIcons[1]) ; Show icon handles _MemoWrite("Part 0 icon handle .: 0x" & Hex(_GUICtrlStatusBar_GetIcon($hStatus, 0))) _MemoWrite("IsPtr = " & IsPtr(_GUICtrlStatusBar_GetIcon($hStatus, 0)) & " IsHWnd = " & IsHWnd(_GUICtrlStatusBar_GetIcon($hStatus, 0))) _MemoWrite("Part 1 icon handle .: 0x" & Hex(_GUICtrlStatusBar_GetIcon($hStatus, 1))) _MemoMsgBoxStatus("", -1, $hGUI) ; no more action, wait GUI for closing ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE ; Free icons _WinAPI_DestroyIcon($ahIcons[0]) _WinAPI_DestroyIcon($ahIcons[1]) GUIDelete() EndFunc ;==>Example
#include "Extras\HelpFileInternals.au3" #include <GUIConstantsEx.au3> #include <GuiStatusBar.au3> #include <WinAPIIcons.au3> Example() Func Example() ; Create GUI Local $hGUI = GUICreate("StatusBar Get/Set Icon (v" & @AutoItVersion & ")", 450, 320) Local $hStatus = _GUICtrlStatusBar_Create($hGUI) ; Create memo control _MemoCreate(2, 8, 444, 259) ; Set parts Local $aParts[3] = [75, 150, 300] ;, 400] _GUICtrlStatusBar_SetParts($hStatus, $aParts) _GUICtrlStatusBar_SetText($hStatus, "Part 0") _GUICtrlStatusBar_SetText($hStatus, "Part 1", 1) ; Set icons Local $hIcon1 = _GUICtrlStatusBar_SetIcon($hStatus, 0, 23, "shell32.dll") Local $hIcon2 = _GUICtrlStatusBar_SetIcon($hStatus, 1, 23, "shell32.dll") GUISetState(@SW_SHOW) ; Show icon handles _MemoWrite("Part 0 icon handle .: 0x" & Hex(_GUICtrlStatusBar_GetIcon($hStatus, 0))) _MemoWrite("Part 1 icon handle .: 0x" & Hex(_GUICtrlStatusBar_GetIcon($hStatus, 1))) _MemoMsgBoxStatus("", -1, $hGUI) ; no more action, wait GUI for closing ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE ; Free icons _WinAPI_DestroyIcon($hIcon1) _WinAPI_DestroyIcon($hIcon2) GUIDelete() EndFunc ;==>Example