; #UDF# ======================================================================================================================= ; Name ..........: MetroGUI UDF ; Description ...: Create borderless GUIs with modern buttons, checkboxes, toggles, radios MsgBoxes and progressbars. ; Version .......: v5.1.0.0 ; Author ........: BB_19 ; =============================================================================================================================== #include-once #include "MetroThemes.au3" #include "MetroUDF-Required\StringSize.au3" #include #include #include #include #include "MetroUDF-Required\SSCtrlHover.au3" #include "GUICtrlOnHover.au3" _GDIPlus_Startup() Opt("WinWaitDelay", 0) ;Required for faster WinActivate when using the fullscreen mode ;Global Variables Global $Font_DPI_Ratio = _GetFontDPI_Ratio()[2], $gDPI = _GDIPlus_GraphicsGetDPIRatio() Global $iHoverReg[0], $iGUI_LIST[0] Global $iMsgBoxTimeout = 0 ;internal msgbox counter Global $GUI_TOP_MARGIN = Number(29 * $gDPI, 1) + Number(10 * $gDPI, 1) Global Const $m_hDll = DllCallbackRegister('_iEffectControl', 'lresult', 'hwnd;uint;wparam;lparam;uint_ptr;dword_ptr') Global Const $m_pDll = DllCallbackGetPtr($m_hDll) OnAutoItExitRegister('_iMExit') Global Const $bMarg = 4 * $gDPI ;Border margin Global Const $tObjTabEx = "hwnd hwnd;byte ctrl;byte ctab;" & _ "byte count;byte current;int next;" & _ "int width;int x;int y;" Global Const $tObjTabBtnEx = "byte ctrl;byte ctab;byte idtab;" & _ "wchar text[255];" Global $____aTabList[1] = [0] Global $____aTabBtnList[1] = [0] ;Options Global $HIGHDPI_SUPPORT = False ;Enables HighDPI support Global $ControlBtnsAutoMode = True ;Enables the automated fullscreen toggle on button click Global $mOnEventMode = False ;Check OnEventMode If Opt("GUIOnEventMode", 0) Then Opt("GUIOnEventMode", 1) $mOnEventMode = True EndIf #Region Metro Functions Overview ;========================================MAIN GUI================================================== ;_Metro_CreateGUI - Creates a borderless Metro-Style GUI ;_SetTheme - Sets the GUI color scheme from the included MetroThemes.au3 ;_Metro_AddControlButtons - Adds the selected control buttons to the gui. (Close,Maximize,Minimize,Fullscreen Toogle, Menu button) ;_Metro_GUIDelete - Destroys all created metro buttons,checkboxes,radios etc., deletes the GUI and reduces memory usage. ;_Metro_EnableHighDPIScaling - Enables high DPI support: Detects the users DPI settings and resizes GUI and all controls to look perfectly sharp. ;_Metro_EnableOnEventMode - Allows using the MetroUDF with OnEventMode enabled ;_Metro_SetGUIOption - Allows to set different options like dragmove, resize and min. resize width/height. ;_Metro_FullscreenToggle - Toggles between fullscreen and normal window. NOTE: $AllowResize has to be set True when creating a gui and this also requires the creation of a fullscreen control button. ;_Metro_AddControlButton_Back - Creates a back button on the left+top side of the gui. ;_Metro_MenuStart - Shows/creates a menu window that slides in from the right side of the gui. (Similar to Android menus or Windows 10 calculator app) ;_Metro_RightClickMenu - Shows/creates a rightclick menu window with the provided button names. ;==========================================Buttons================================================= ;_Metro_CreateButton - Creates metro style buttons. Hovering creates a frame around the buttons. ;_Metro_CreateButtonEx - Creates Windows 10 style buttons with a frame around. Hovering changes the button color to a lighter color. ;_Metro_CreateButtonEx2 - Creates a button with slightly rounded corners and no frame. Hovering changes the button color to a lighter color. ;_Metro_DisableButton - Disables a metro button and adds a grayed out look to it. ;_Metro_EnableButton - Enables a metro button and removes grayed out look of it. ;==========================================Toggles================================================= ;_Metro_CreateToggle - Creates a Windows 10 style toggle with a text on the right side.(NEW Style) ;_Metro_CreateToggleEx - Creates a Windows 8 style toggle with a text on the right side. ;_Metro_ToggleIsChecked - Checks if a toggle is checked or not. Returns True or False. ;_Metro_ToggleCheck - Checks/Enables a toggle. ;_Metro_ToggleUnCheck - Unchecks/Disables a toggle. ;_Metro_ToggleSwitch - Toggles between checked/unchecked state and then returns the current state. -> Should only be used to handle user clicks ;===========================================Radios================================================= ;_Metro_CreateRadio - Creates a metro style radio. ;_Metro_CreateRadioEx - Creates a metro style radio with colored checkmark. ;_Metro_RadioCheck - Checks the selected radio and unchecks all other radios in the selected group. ;_Metro_RadioIsChecked - Checks if the radio in a specific group is selected. ;==========================================Checkboxes============================================== ;_Metro_CreateCheckbox - Creates a modern looking checkbox. ;_Metro_CreateCheckboxEx - Creates a classic-style checkbox with the default black white colors. ;_Metro_CreateCheckboxEx2 - Creates a modern rounded checkbox. ;_Metro_CheckboxIsChecked - Checks if a checkbox is checked. Returns True or False. ;_Metro_CheckboxCheck - Checks a checkbox. ;_Metro_CheckboxUncheck - Unchecks a checkbox. ; Metro_CheckboxSwitch - Toggles between checked/unchecked state and then returns the current state. -> Should only be used to handle user clicks ;=============================================MsgBox=============================================== ;_Metro_MsgBox - Creates a MsgBox with a OK button and displays the text. _GUIDisable($GUI, 0, 30) should be used before, so the MsgBox is better visible and afterwards _GUIDisable($GUI). ;=============================================Progress============================================= ;_Metro_CreateProgress - Creates a simple progressbar. ;_Metro_SetProgress - Sets the progress in % of a progressbar. ;=============================================Other============================================= ; _Metro_InputBox - Creates a simple modern input box ; _Metro_AddHSeperator - Adds a horizontal seperator line to the GUI ; _Metro_AddVSeperator - Adds a vertical seperator line to the GUI #EndRegion Metro Functions Overview #Region MetroGUI=========================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateGUI ; Description ...: Creates a modern borderless GUI with the colors of the selected theme. ; Syntax ........: _Metro_CreateGUI($Title, $Width, $Height[, $Left = -1[, $Top = -1[, $AllowResize = False[, $ParentGUI = ""]]]]) ; Parameters ....: $Title - Title of the window ; $Width - Width ; $Height - Height ; $Left - [optional] Window pos X. Default is -1. ; $Top - [optional] Window pos Y. Default is -1. ; $AllowResize - [optional] True/False. Default is False. ;Enables resizing + drag move for the gui. ; $ParentGUI - [optional] Handle to the parent gui. Default is "". ; Return values .: Handle to the created gui ; Example .......: _Metro_CreateGUI("Example", 500, 300, -1, -1, True) ; =============================================================================================================================== Func _Metro_CreateGUI($Title, $Width, $Height, $Left = -1, $Top = -1, $AllowResize = False, $ParentGUI = "") Local $GUI_Return ;HighDPI Support If $HIGHDPI_SUPPORT Then $Width = Round($Width * $gDPI) $Height = Round($Height * $gDPI) EndIf Local $gID If $AllowResize Then DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0) ;Adds compatibility for Windows 7 Basic theme $GUI_Return = GUICreate($Title, $Width, $Height, $Left, $Top, BitOR($WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX), -1, $ParentGUI) $gID = _Metro_SetGUIOption($GUI_Return, True, True, $Width, $Height) DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", BitOR(1, 2, 4)) Else DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0) ;Adds compatibility for Windows 7 Basic theme $GUI_Return = GUICreate($Title, $Width, $Height, $Left, $Top, -1, -1, $ParentGUI) $gID = _Metro_SetGUIOption($GUI_Return, False, False, $Width, $Height) DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", BitOR(1, 2, 4)) EndIf _WinAPI_SetWindowSubclass($GUI_Return, $m_pDll, 1010, $gID) WinMove($GUI_Return, "", Default, Default, $Width, $Height) If Not $ParentGUI Then Local $Center_GUI = _GetDesktopWorkArea($GUI_Return) If ($Left = -1) And ($Top = -1) Then WinMove($GUI_Return, "", ($Center_GUI[2] - $Width) / 2, ($Center_GUI[3] - $Height) / 2, $Width, $Height) EndIf Else If ($Left = -1) And ($Top = -1) Then Local $GUI_NewPos = _WinPos($ParentGUI, $Width, $Height) WinMove($GUI_Return, "", $GUI_NewPos[0], $GUI_NewPos[1], $Width, $Height) EndIf EndIf GUISetBkColor($GUIThemeColor) _CreateBorder($GUI_Return, $Width, $Height, $GUIBorderColor) Return ($GUI_Return) EndFunc ;==>_Metro_CreateGUI ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_SetGUIOption ; Description ...: Allows to set different options like dragmove, resize and min. resize width/height. ; Syntax ........: _Metro_SetGUIOption($mGUI[, $AllowDragMove = False[, $AllowResize = False[, $Win_MinWidth = ""[, ; $Win_MinHeight = ""]]]]) ; Parameters ....: $mGUI - a map. ; $AllowDragMove - [optional] Allow dragmove (Moving GUI by holding leftclick). Default is False. ; $AllowResize - [optional] Allow resizing of the GUI. Default is False. ; $Win_MinWidth - [optional] Min. width of the GUI in px (For resizing). Default is "". ; $Win_MinHeight - [optional] Min. height of the GUI in px(For resizing). Default is "". ; Example .......: _Metro_SetGUIOption($Form1, True, True, 400, 300) ; =============================================================================================================================== Func _Metro_SetGUIOption($mGUI, $AllowDragMove = False, $AllowResize = False, $Win_MinWidth = "", $Win_MinHeight = "") Local $iGui_Count ;Check if Gui is already registered For $iGUIs = 0 To UBound($iGUI_LIST) - 1 Step +1 If $iGUI_LIST[$iGUIs][0] = $mGUI Then $iGui_Count = $iGUIs ExitLoop EndIf Next If ($iGui_Count == "") Then $iGui_Count = UBound($iGUI_LIST) ReDim $iGUI_LIST[$iGui_Count + 1][16] EndIf $iGUI_LIST[$iGui_Count][0] = $mGUI $iGUI_LIST[$iGui_Count][1] = $AllowDragMove ;Drag $iGUI_LIST[$iGui_Count][2] = $AllowResize ;Resize If $AllowResize Then If $Win_MinWidth = "" Then $Win_MinWidth = WinGetPos($mGUI, "") If @error Then $Win_MinWidth = 80 * $gDPI Else $Win_MinWidth = $Win_MinWidth[2] EndIf EndIf If $Win_MinHeight = "" Then $Win_MinHeight = WinGetPos($mGUI, "") If @error Then $Win_MinHeight = 50 * $gDPI Else $Win_MinHeight = $Win_MinHeight[3] EndIf EndIf $iGUI_LIST[$iGui_Count][3] = $Win_MinWidth ;Set Min Width of the Window $iGUI_LIST[$iGui_Count][4] = $Win_MinHeight ;Set Min Height of the Window EndIf Return $iGui_Count EndFunc ;==>_Metro_SetGUIOption ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_GUIDelete ; Description ...: Destroys all created metro buttons,checkboxes,radios etc., deletes the GUI and reduces memory usage. ; Syntax ........: _Metro_GUIDelete($GUI) ; Parameters ....: $GUI - Handle to the gui to be deleted ; =============================================================================================================================== Func _Metro_GUIDelete($GUI) GUISetState(@SW_HIDE, $GUI) ;To prevent visible delay when the gui is being deleted _WinAPI_RemoveWindowSubclass($GUI, $m_pDll, 1010) GUIDelete($GUI) ;Remove from Global GUI List Local $CLEANED_GUI_LIST[0] For $i_HR = 0 To UBound($iGUI_LIST) - 1 Step +1 If $iGUI_LIST[$i_HR][0] <> $GUI Then ReDim $CLEANED_GUI_LIST[UBound($CLEANED_GUI_LIST) + 1][16] For $i_Hx = 0 To 11 Step +1 $CLEANED_GUI_LIST[UBound($CLEANED_GUI_LIST) - 1][$i_Hx] = $iGUI_LIST[$i_HR][$i_Hx] Next EndIf Next $iGUI_LIST = $CLEANED_GUI_LIST ;~ _ReduceMemory() EndFunc ;==>_Metro_GUIDelete ; #FUNCTION# ==================================================================================================================== ; Name ..........: _iControlDelete ; Description ...: Internal function that will free resources and remove the control from the Hover REG ; Syntax ........: _iControlDelete($hControl) ; Parameters ....: $hControl - a handle value. ; =============================================================================================================================== Func _iControlDelete($hControl) For $i = 0 To UBound($iHoverReg) - 1 If $iHoverReg[$i][0] = $hControl Then Switch ($iHoverReg[$i][3]) Case "5", "7" _WinAPI_DeleteObject($iHoverReg[$i][5]) _WinAPI_DeleteObject($iHoverReg[$i][6]) _WinAPI_DeleteObject($iHoverReg[$i][7]) _WinAPI_DeleteObject($iHoverReg[$i][8]) Case "6" _WinAPI_DeleteObject($iHoverReg[$i][5]) _WinAPI_DeleteObject($iHoverReg[$i][6]) _WinAPI_DeleteObject($iHoverReg[$i][7]) _WinAPI_DeleteObject($iHoverReg[$i][8]) _WinAPI_DeleteObject($iHoverReg[$i][9]) _WinAPI_DeleteObject($iHoverReg[$i][10]) _WinAPI_DeleteObject($iHoverReg[$i][11]) _WinAPI_DeleteObject($iHoverReg[$i][12]) _WinAPI_DeleteObject($iHoverReg[$i][13]) _WinAPI_DeleteObject($iHoverReg[$i][14]) Case Else _WinAPI_DeleteObject($iHoverReg[$i][5]) _WinAPI_DeleteObject($iHoverReg[$i][6]) EndSwitch ;Empty array index For $i2 = 0 To UBound($iHoverReg, 2) - 1 $iHoverReg[$i][$i2] = "" Next ExitLoop EndIf Next EndFunc ;==>_iControlDelete ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_AddControlButtons ; Description ...: Creates the selected control buttons for a metro style gui. ; Syntax ........: _Metro_AddControlButtons([$CloseBtn = True[, $MaximizeBtn = True[, $MinimizeBtn = True[, $FullScreenBtn = True[, ; $MenuBtn = False]]]]]) ; Parameters ....: $CloseBtn - [optional] True/False. Default is True. ;Adds a close button ; $MaximizeBtn - [optional] True/False. Default is True. ;Adds a maximize/restore button ; $MinimizeBtn - [optional] True/False. Default is True. ;Adds a minimize button ; $FullScreenBtn - [optional] True/False. Default is True. ;Adds a fullscreen toggle button ; $MenuBtn - [optional] True/False. Default is False.;Adds a Menu Button that can be used with _Metro_MenuStart ; $GUI_BG_Color - [optional] Custom color for the background of the buttons. Example: "0x000000", Default is $GUIThemeColor of the selected theme ; $GUI_Font_Color - [optional] Custom color for the text color of the buttons. Example: "0xFFFFFF", Default is $FontThemeColor of the selected theme ; Return values .: Array with size 7 that contains all handles of the created control buttons. Note: Array size is always the same and so is the order of the handles even if not all buttons are created. See below: ; Array[0] = Close button ; Array[1] = Maximize button ; Array[2] = Restore button ; Array[3] = Minimize button ; Array[4] = Fullscreen ON button ; Array[5] = Fullscreen OFF button ; Array[6] = Menu button ; Example .......: _Metro_AddControlButtons(True, True, True, True, True) ; =============================================================================================================================== Func _Metro_AddControlButtons($CloseBtn = True, $MaximizeBtn = True, $MinimizeBtn = True, $FullScreenBtn = False, $MenuBtn = False, $GUI_BG_Color = $GUIThemeColor, $GUI_Font_Color = $FontThemeColor, $tMargin = 2) Local $ButtonsToCreate_Array[5] $ButtonsToCreate_Array[0] = $CloseBtn $ButtonsToCreate_Array[1] = $MaximizeBtn $ButtonsToCreate_Array[2] = $MinimizeBtn $ButtonsToCreate_Array[3] = $FullScreenBtn $ButtonsToCreate_Array[4] = $MenuBtn $GUI_BG_Color = "0xFF" & Hex($GUI_BG_Color, 6) $GUI_Font_Color = "0xFF" & Hex($GUI_Font_Color, 6) Return _iCreateControlButtons($ButtonsToCreate_Array, $GUI_BG_Color, $GUI_Font_Color, False, $tMargin) EndFunc ;==>_Metro_AddControlButtons ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_EnableHighDPIScaling ; Description ...: Enables high DPI support: Detects the users DPI settings and resizes GUI and all controls to look perfectly sharp ; Syntax ........: _Metro_EnableHighDPIScaling() ; =============================================================================================================================== Func _Metro_EnableHighDPIScaling($Enable = True) $HIGHDPI_SUPPORT = $Enable EndFunc ;==>_Metro_EnableHighDPIScaling ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_EnableOnEventMode ; Description ...: Allows using the UDF with OnEventMode enabled. ; Syntax ........: _Metro_EnableOnEventMode([$Enable = True]) ; =============================================================================================================================== Func _Metro_EnableOnEventMode($Enable = True) $mOnEventMode = $Enable EndFunc ;==>_Metro_EnableOnEventMode ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_FullscreenToggle ; Description ...: Toggles between fullscreen and normal window. NOTE: $AllowResize has to be set True when creating a gui and this also requires the creation of a fullscreen control button. ; Syntax ........: _Metro_FullscreenToggle($mGUI, $Control_Buttons_Array) ; Parameters ....: $mGUI - Handle to the GUI. ; $Control_Buttons_Array - Array containing the control button handles as returned from _Metro_AddControlButtons. ; Note2 .........: Fullscreen toggle only works with ONE gui at the same time. You can't create 2 Guis which are toggled to fullscreen at the same time. They will interfere with each other. ; =============================================================================================================================== Func _Metro_FullscreenToggle($mGUI) GUISetState(@SW_SHOW, $mGUI) ;Fixes a bug that occurs when using multiple child windows Local $iGui_Count = _iGetGUIID($mGUI) If ($iGui_Count == "") Then ConsoleWrite("Fullscreen-Toggle failed: GUI not registered. Not created with _Metro_CreateGUI ?" & @CRLF) Return SetError(1) ; EndIf If Not $iGUI_LIST[$iGui_Count][2] Then ConsoleWrite("Fullscreen-Toggle failed: GUI is not registered for resizing. Please use _Metro_SetGUIOption to enable resizing." & @CRLF) Return SetError(2) ; EndIf Local $mWin_State = WinGetState($mGUI) Local $tRET = _WinAPI_GetWindowPlacement($mGUI) Local $FullScreenPOS = _GetDesktopWorkArea($mGUI, True) Local $CurrentPos = WinGetPos($mGUI) Local $MaxBtn = _iGetCtrlHandlebyType("3", $mGUI) Local $RestoreBtn = _iGetCtrlHandlebyType("4", $mGUI) Local $FullScreenBtn = _iGetCtrlHandlebyType("9", $mGUI) Local $FullscreenRsBtn = _iGetCtrlHandlebyType("10", $mGUI) If $iGUI_LIST[$iGui_Count][11] Then ;Already in fullscreen -> Restore $iGUI_LIST[$iGui_Count][11] = False ;Remove fullscreen state If (BitAND($iGUI_LIST[$iGui_Count][9], 32) = 32) Then ; If previous state was maximized GUISetState(@SW_MAXIMIZE) $tRET = $iGUI_LIST[$iGui_Count][10] DllStructSetData($tRET, "rcNormalPosition", $iGUI_LIST[$iGui_Count][5], 1) ; left DllStructSetData($tRET, "rcNormalPosition", $iGUI_LIST[$iGui_Count][6], 2) ; top DllStructSetData($tRET, "rcNormalPosition", $iGUI_LIST[$iGui_Count][7], 3) ; right DllStructSetData($tRET, "rcNormalPosition", $iGUI_LIST[$iGui_Count][8], 4) ; bottom _WinAPI_SetWindowPlacement($mGUI, $tRET) If $MaxBtn Then GUICtrlSetState($MaxBtn, 32) GUICtrlSetState($RestoreBtn, 16) EndIf Else WinMove($mGUI, "", $iGUI_LIST[$iGui_Count][5], $iGUI_LIST[$iGui_Count][6], $iGUI_LIST[$iGui_Count][7], $iGUI_LIST[$iGui_Count][8]) If $MaxBtn Then GUICtrlSetState($RestoreBtn, 32) GUICtrlSetState($MaxBtn, 16) EndIf EndIf GUICtrlSetState($FullscreenRsBtn, 32) GUICtrlSetState($FullScreenBtn, 16) Else ;Not in fullscreen mode -> Enter fullscreen mode If (BitAND($mWin_State, 32) = 32) Then ; If window is maximized ;Replace array with current window position with the currently saved restore/normal position $CurrentPos[0] = DllStructGetData($tRET, "rcNormalPosition", 1) $CurrentPos[1] = DllStructGetData($tRET, "rcNormalPosition", 2) $CurrentPos[2] = DllStructGetData($tRET, "rcNormalPosition", 3) $CurrentPos[3] = DllStructGetData($tRET, "rcNormalPosition", 4) ;Set new fullscreen position DllStructSetData($tRET, "rcNormalPosition", $FullScreenPOS[0], 1) ; left DllStructSetData($tRET, "rcNormalPosition", $FullScreenPOS[1], 2) ; top DllStructSetData($tRET, "rcNormalPosition", $FullScreenPOS[0] + $FullScreenPOS[2], 3) ; right DllStructSetData($tRET, "rcNormalPosition", $FullScreenPOS[1] + $FullScreenPOS[3], 4) ; bottom _WinAPI_SetWindowPlacement($mGUI, $tRET) Sleep(50) $iGUI_LIST[$iGui_Count][10] = $tRET GUISetState(@SW_RESTORE) Else Sleep(50) WinMove($mGUI, "", $FullScreenPOS[0], $FullScreenPOS[1], $FullScreenPOS[2], $FullScreenPOS[3]) EndIf $iGUI_LIST[$iGui_Count][11] = True ;Fullscreen state GUICtrlSetState($FullScreenBtn, 32) If $MaxBtn Then GUICtrlSetState($MaxBtn, 32) GUICtrlSetState($RestoreBtn, 32) EndIf GUICtrlSetState($FullscreenRsBtn, 16) $iGUI_LIST[$iGui_Count][5] = $CurrentPos[0] $iGUI_LIST[$iGui_Count][6] = $CurrentPos[1] $iGUI_LIST[$iGui_Count][7] = $CurrentPos[2] $iGUI_LIST[$iGui_Count][8] = $CurrentPos[3] $iGUI_LIST[$iGui_Count][9] = $mWin_State ;Workaround for the Windows 10 bug(or feature as MS would call it) that causes the taskbar to be on top of the GUI even when it is in fullscreen mode (Thx @MS for breaking stuff with every update) WinActivate("[CLASS:Shell_TrayWnd]") WinActivate($mGUI) EndIf EndFunc ;==>_Metro_FullscreenToggle ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_AddControlButton_Back ; Description ...: Creates a back button on the left+top side of the gui. ; Syntax ........: _Metro_AddControlButton_Back([, $GUI_BG_Color = $GUIThemeColor[, $GUI_Font_Color = $FontThemeColor]]) ; Parameters ....: $GUI_BG_Color - [optional] Background color. Default is $GUIThemeColor. ; $GUI_Font_Color - [optional] Text color. Default is $FontThemeColor. ; Return values .: Handle to the button ; Remarks .......: If a menu control button is visible, then it has to be hidden first before showing this button, as they are on the same position. ; Example .......: _Metro_AddControlButton_Back() ; =============================================================================================================================== Func _Metro_AddControlButton_Back($GUI_BG_Color = $GUIThemeColor, $GUI_Font_Color = $FontThemeColor, $tMargin = 2) Local $cbDPI = _HighDPICheck() Local $CurrentGUI = GetCurrentGUI() ;Set Colors $GUI_BG_Color = "0xFF" & Hex($GUI_BG_Color, 6) $GUI_Font_Color = "0xFF" & Hex($GUI_Font_Color, 6) If StringInStr($GUI_Theme_Name, "Light") Then Local $Hover_BK_Color = StringReplace(_AlterBrightness($GUI_BG_Color, -20), "0x", "0xFF") Else Local $Hover_BK_Color = StringReplace(_AlterBrightness($GUI_BG_Color, +20), "0x", "0xFF") EndIf Local $FrameSize = Round(1 * $cbDPI) Local $hPen = _GDIPlus_PenCreate($GUI_Font_Color, Round(1 * $cbDPI)) If StringInStr($GUI_Theme_Name, "Light") Then Local $hPen1 = _GDIPlus_PenCreate(StringReplace(_AlterBrightness($GUI_Font_Color, +60), "0x", "0xFF"), Round(1 * $cbDPI)) ;inactive Else Local $hPen1 = _GDIPlus_PenCreate(StringReplace(_AlterBrightness($GUI_Font_Color, -80), "0x", "0xFF"), Round(1 * $cbDPI)) ;inactive EndIf _GDIPlus_PenSetStartCap($hPen, 0x03) _GDIPlus_PenSetStartCap($hPen1, 0x03) ;Create Button Array Local $Control_Button_Array[16] ;Calc Sizes Local $CBw = Number(45 * $cbDPI, 1) Local $CBh = Number(29 * $cbDPI, 1) Local $cMarginR = Number($tMargin * $cbDPI, 1) ;Create GuiPics and set hover states $Control_Button_Array[1] = False ; Hover state $Control_Button_Array[2] = False ; Set inactive state $Control_Button_Array[3] = "0" ; Type $Control_Button_Array[15] = GetCurrentGUI() ;Create Graphics Local $Control_Button_Graphic1 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4) Local $Control_Button_Graphic2 = _iGraphicCreate($CBw, $CBh, $Hover_BK_Color, 0, 4) Local $Control_Button_Graphic3 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4) ;Create Back Button ;Calc size+pos Local $mpX = $CBw / 2.95, $mpY = $CBh / 2.1 Local $apos1 = cAngle($mpX, $mpY, 135, 12 * $cbDPI) Local $apos2 = cAngle($mpX, $mpY, 45, 12 * $cbDPI) ;Add arrow _GDIPlus_GraphicsDrawLine($Control_Button_Graphic1[0], $mpX, $mpY, $apos1[0], $apos1[1], $hPen) ;r _GDIPlus_GraphicsDrawLine($Control_Button_Graphic1[0], $mpX, $mpY, $apos2[0], $apos2[1], $hPen) ;l _GDIPlus_GraphicsDrawLine($Control_Button_Graphic2[0], $mpX, $mpY, $apos1[0], $apos1[1], $hPen) ;r _GDIPlus_GraphicsDrawLine($Control_Button_Graphic2[0], $mpX, $mpY, $apos2[0], $apos2[1], $hPen) ;l _GDIPlus_GraphicsDrawLine($Control_Button_Graphic3[0], $mpX, $mpY, $apos1[0], $apos1[1], $hPen1) ;r _GDIPlus_GraphicsDrawLine($Control_Button_Graphic3[0], $mpX, $mpY, $apos2[0], $apos2[1], $hPen1) ;l ;Release resources _GDIPlus_PenDispose($hPen) _GDIPlus_PenDispose($hPen1) ;Create bitmap handles and set graphic $Control_Button_Array[0] = GUICtrlCreatePic("", $cMarginR, $cMarginR, $CBw, $CBh) $Control_Button_Array[5] = _iGraphicCreateBitmapHandle($Control_Button_Array[0], $Control_Button_Graphic1) $Control_Button_Array[6] = _iGraphicCreateBitmapHandle($Control_Button_Array[0], $Control_Button_Graphic2, False) $Control_Button_Array[7] = _iGraphicCreateBitmapHandle($Control_Button_Array[0], $Control_Button_Graphic3, False) ;Set GUI Resizing GUICtrlSetResizing($Control_Button_Array[0], 768 + 32 + 2) _cHvr_Register($Control_Button_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Control_Button_Array), $CurrentGUI) Return $Control_Button_Array[0] EndFunc ;==>_Metro_AddControlButton_Back ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_MenuStart ; Description ...: Shows/creates a menu window that slides in from the right side of the gui. (Similar to Android menus or Windows 10 calculator app) ; Syntax ........: _Metro_MenuStart($mGUI, $Metro_MenuBtn, $mWidth, $ButtonsArray) ; Parameters ....: $mGUI - Handle to the gui. ; $Metro_MenuBtn - Handle to the menu button that is returned by _Metro_AddControlButtons. (this would be $Array[6] returned by _Metro_AddControlButtons function) ; $mWidth - Width of the Menu ; $ButtonsArray - An array containing button names to be created. ; Example: Local $MenuButtonsArray[4] = ["Settings","About","Contact","Exit"] ; id 0 = Settings, 1 = About, 2 = Contact, 3 = Exit ; $bFont - [optional] Custom font for the buttons. Default "Arial" ; $bFontSize - [optional] Custom font size for the buttons. Default 9 ; $bFontStyle - [optional] Custom font style for the buttons. Default 1 ; Return values .: index of the clicked button from $ButtonsArray or @error and value "none" if nothing is clicked. Example: Users selects "Exit" button in the menu, so this function would return "3". ; =============================================================================================================================== Func _Metro_MenuStart($mGUI, $mWidth, $ButtonsArray, $bFont = "Segoe UI", $bFontSize = 9, $bFontStyle = 0) Local $Metro_MenuBtn = _iGetCtrlHandlebyType("8", $mGUI) If Not $Metro_MenuBtn Then Return SetError(1) GUICtrlSetState($Metro_MenuBtn, 128) Local $iButtonsArray[UBound($ButtonsArray)] Local $cbDPI = _HighDPICheck() Local $blockclose = True Local $mPos = WinGetPos($mGUI) Local $cMarginR = Number(2 * $cbDPI, 1) Local $CBh = Number(29 * $cbDPI, 1) Local $mGuiHeight = $mPos[3] - ($cMarginR * 2) - $CBh Local $mGuiWidth = $mWidth * $cbDPI Local $mGuiX = $mPos[0] + $cMarginR, $mGuiY = $mPos[1] + $cMarginR + $CBh Local $AnimStep = $mGuiWidth / 10, $mGuiWidthAnim = $AnimStep Local $MenuForm = GUICreate("", $mGuiWidthAnim, $mGuiHeight, $mGuiX, $mGuiY, $WS_POPUP, $WS_EX_MDICHILD, $mGUI) Local $ButtonStep = (30 * $cbDPI) If StringInStr($GUI_Theme_Name, "Light") Then GUISetBkColor(_AlterBrightness($GUIThemeColor, -10), $MenuForm) Else GUISetBkColor(_AlterBrightness($GUIThemeColor, +10), $MenuForm) EndIf For $iB = 0 To UBound($ButtonsArray) - 1 Step +1 $iButtonsArray[$iB] = _iCreateMButton($ButtonsArray[$iB], 0, $ButtonStep * $iB + ($iB * 2), $mGuiWidth - $cMarginR, 30 * $cbDPI, $GUIThemeColor, $FontThemeColor, $bFont, $bFontSize, $bFontStyle) Next GUISetState(@SW_SHOW, $MenuForm) For $i = 0 To 8 Step +1 $mGuiWidthAnim = $mGuiWidthAnim + $AnimStep WinMove($MenuForm, "", $mGuiX, $mGuiY, $mGuiWidthAnim, $mGuiHeight) Sleep(1) Next If $mOnEventMode Then Opt("GUIOnEventMode", 0) ;Temporarily deactivate oneventmode While 1 If Not $blockclose Then If Not WinActive($MenuForm) Then $mPos = WinGetPos($mGUI) $mGuiX = $mPos[0] + $cMarginR $mGuiY = $mPos[1] + $cMarginR + $CBh For $i = 0 To 8 Step +1 $mGuiWidthAnim = $mGuiWidthAnim - $AnimStep WinMove($MenuForm, "", $mGuiX, $mGuiY, $mGuiWidthAnim, $mGuiHeight) Sleep(1) Next GUIDelete($MenuForm) If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;reactivate oneventmode GUICtrlSetState($Metro_MenuBtn, 64) Return SetError(1, 0, "none") EndIf Else $blockclose = False EndIf Local $imsg = GUIGetMsg() For $iB = 0 To UBound($iButtonsArray) - 1 Step +1 If $imsg = $iButtonsArray[$iB] Then $mPos = WinGetPos($mGUI) $mGuiX = $mPos[0] + $cMarginR $mGuiY = $mPos[1] + $cMarginR + $CBh For $if = 0 To 8 Step +2 $mGuiWidthAnim = $mGuiWidthAnim - $AnimStep WinMove($MenuForm, "", $mGuiX, $mGuiY, $mGuiWidthAnim, $mGuiHeight) Sleep(1) Next GUIDelete($MenuForm) If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;reactivate oneventmode GUICtrlSetState($Metro_MenuBtn, 64) Return $iB EndIf Next WEnd EndFunc ;==>_Metro_MenuStart Func _iCreateMButton($Text, $Left, $Top, $Width, $Height, $BG_Color = $GUIThemeColor, $Font_Color = $FontThemeColor, $Font = "Arial", $Fontsize = 9, $FontStyle = 1) Local $Button_Array[16] If Not $HIGHDPI_SUPPORT Then $Fontsize = ($Fontsize / $Font_DPI_Ratio) EndIf $Button_Array[1] = False ; Set hover OFF $Button_Array[3] = "2" ; Type $Button_Array[15] = GetCurrentGUI() ;Set Colors $BG_Color = StringReplace($BG_Color, "0x", "0xFF") $Font_Color = StringReplace($Font_Color, "0x", "0xFF") Local $Brush_BTN_FontColor = _GDIPlus_BrushCreateSolid($Font_Color) If StringInStr($GUI_Theme_Name, "Light") Then Local $BG_ColorD = StringReplace(_AlterBrightness($GUIThemeColor, -12), "0x", "0xFF") $BG_Color = StringReplace(_AlterBrightness($GUIThemeColor, -25), "0x", "0xFF") Else Local $BG_ColorD = StringReplace(_AlterBrightness($GUIThemeColor, +12), "0x", "0xFF") $BG_Color = StringReplace(_AlterBrightness($GUIThemeColor, +25), "0x", "0xFF") EndIf ;Create Button graphics Local $Button_Graphic1 = _iGraphicCreate($Width, $Height, $BG_ColorD, 0, 5) ;Default Local $Button_Graphic2 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5) ;Hover ;Create font, Set font options Local $hFormat = _GDIPlus_StringFormatCreate(), $hFamily = _GDIPlus_FontFamilyCreate($Font), $hFont = _GDIPlus_FontCreate($hFamily, $Fontsize, $FontStyle) Local $tLayout = _GDIPlus_RectFCreate(0, 0, $Width, $Height) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) ;Draw button text _GDIPlus_GraphicsDrawStringEx($Button_Graphic1[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Button_Graphic2[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) ;Release created objects _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($Brush_BTN_FontColor) ;Set graphic and return Bitmap handle $Button_Array[0] = GUICtrlCreatePic("", $Left, $Top, $Width, $Height) $Button_Array[5] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic1) $Button_Array[6] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic2, False) ;For GUI Resizing GUICtrlSetResizing($Button_Array[0], 802) _cHvr_Register($Button_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Button_Array)) Return $Button_Array[0] EndFunc ;==>_iCreateMButton Func _Metro_RightClickMenu($mGUI, $mWidth, $ButtonsArray, $bFont = "Segoe UI", $bFontSize = 9, $bFontStyle = 0) Local $mPos = MouseGetPos() Local $iButtonsArray[UBound($ButtonsArray)] Local $cbDPI = _HighDPICheck() Local $ButtonStep = (25 * $cbDPI) Local $cMarginR = Number(2 * $cbDPI, 1) Local $DesktopSize = _GetDesktopWorkArea($mGUI, False) If @error Then Return ;Fix position if it is offscreen Local $mHeight = UBound($ButtonsArray) * $ButtonStep + (2 * UBound($ButtonsArray)) If $mPos[0] + $mWidth > $DesktopSize[2] Then $mPos[0] = $mPos[0] - ($mPos[0] + $mWidth - $DesktopSize[2] + 2) EndIf If $mPos[1] + $mHeight > $DesktopSize[3] Then $mPos[1] = $mPos[1] - ($mPos[1] + $mHeight - $DesktopSize[3] + 2) EndIf Local $MenuForm = GUICreate("", $mWidth, $mHeight, $mPos[0], $mPos[1], $WS_POPUP, 0, $mGUI) If StringInStr($GUI_Theme_Name, "Light") Then GUISetBkColor(_AlterBrightness($GUIThemeColor, -10), $MenuForm) Else GUISetBkColor(_AlterBrightness($GUIThemeColor, +10), $MenuForm) EndIf For $iB = 0 To UBound($ButtonsArray) - 1 Step +1 $iButtonsArray[$iB] = _iCreateMButton($ButtonsArray[$iB], $cMarginR / 2, $ButtonStep * $iB + ($iB * 2), $mWidth - $cMarginR, $ButtonStep, $GUIThemeColor, $FontThemeColor, $bFont, $bFontSize, $bFontStyle) Next GUISetState(@SW_SHOW, $MenuForm) If $mOnEventMode Then Opt("GUIOnEventMode", 0) ;Temporarily disable oneventmode While 1 If Not WinActive($MenuForm) Then GUIDelete($MenuForm) If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;reactivate oneventmode Return SetError(1, 0, "none") EndIf Local $imsg = GUIGetMsg() For $iB = 0 To UBound($iButtonsArray) - 1 Step +1 If $imsg = $iButtonsArray[$iB] Then GUIDelete($MenuForm) If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;reactivate oneventmode Return $iB EndIf Next WEnd EndFunc ;==>_Metro_RightClickMenu Func _iCreateControlButtons($ButtonsToCreate_Array, $GUI_BG_Color = $GUIThemeColor, $GUI_Font_Color = "0xFFFFFF", $CloseButtonOnStyle = False, $tMargin = 2) ;HighDPI Support Local $cbDPI = _HighDPICheck() ;Set Colors ;========================================================================= Local $FrameSize = Round(1 * $cbDPI), $Hover_BK_Color If StringInStr($GUI_Theme_Name, "Light") Then $Hover_BK_Color = StringReplace(_AlterBrightness($GUI_BG_Color, -20), "0x", "0xFF") Else $Hover_BK_Color = StringReplace(_AlterBrightness($GUI_BG_Color, +20), "0x", "0xFF") EndIf Local $hPen = _GDIPlus_PenCreate($GUI_Font_Color, Round(1 * $cbDPI)) Local $hPen2 = _GDIPlus_PenCreate($GUI_Font_Color, Round(1 * $cbDPI)) Local $hPen3 = _GDIPlus_PenCreate("0xFFFFFFFF", Round(1 * $cbDPI)) If StringInStr($GUI_Theme_Name, "Light") Then Local $hPen4 = _GDIPlus_PenCreate(StringReplace(_AlterBrightness($GUI_Font_Color, +90), "0x", "0xFF"), $FrameSize) ;inactive Else Local $hPen4 = _GDIPlus_PenCreate(StringReplace(_AlterBrightness($GUI_Font_Color, -80), "0x", "0xFF"), $FrameSize) ;inactive EndIf Local $hPen5 = _GDIPlus_PenCreate(StringReplace(_AlterBrightness("0xFFFFFF", -80), "0x", "0xFF"), $FrameSize) ;inactive style 2 If $GUI_BG_Color <> 0 Then $GUI_BG_Color = "0xFF" & Hex($GUI_BG_Color, 6) EndIf Local $hBrush = _GDIPlus_BrushCreateSolid($GUI_BG_Color), $hBrush2 = _GDIPlus_BrushCreateSolid($Hover_BK_Color) ;========================================================================= ;Create Button Arrays Local $Control_Buttons[16] Local $Button_Close_Array[16] Local $Button_Minimize_Array[16] Local $Button_Maximize_Array[16] Local $Button_Restore_Array[16] Local $Button_Menu_Array[16] Local $Button_FullScreen_Array[16] Local $Button_FSRestore_Array[16] ;Calc Sizes Local $CBw = Number(45 * $cbDPI, 1) Local $CBh = Number(29 * $cbDPI, 1) Local $cMarginR = Number($tMargin * $cbDPI, 1) Local $CurrentGUI = GetCurrentGUI() Local $Win_POS = WinGetPos($CurrentGUI) Local $PosCount = 0 ;Create GuiPics and set hover states If $ButtonsToCreate_Array[0] Then $PosCount = $PosCount + 1 $Button_Close_Array[0] = GUICtrlCreatePic("", $Win_POS[2] - $cMarginR - ($CBw * $PosCount), $cMarginR, $CBw, $CBh) $Button_Close_Array[1] = False ; Hover state $Button_Close_Array[2] = False ; Inactive Color state $Button_Close_Array[3] = "0" ; Type $Button_Close_Array[15] = $CurrentGUI EndIf If $ButtonsToCreate_Array[1] Then $PosCount = $PosCount + 1 $Button_Maximize_Array[0] = GUICtrlCreatePic("", $Win_POS[2] - $cMarginR - ($CBw * $PosCount), $cMarginR, $CBw, $CBh) $Button_Maximize_Array[1] = False $Button_Maximize_Array[2] = False ; Inactive Color state $Button_Maximize_Array[3] = "3" $Button_Maximize_Array[8] = True ;Visible state $Button_Maximize_Array[15] = $CurrentGUI $Button_Restore_Array[0] = GUICtrlCreatePic("", $Win_POS[2] - $cMarginR - ($CBw * $PosCount), $cMarginR, $CBw, $CBh) $Button_Restore_Array[1] = False $Button_Restore_Array[2] = False ;Inactive Color state $Button_Restore_Array[3] = "4" $Button_Restore_Array[8] = True ;Visible state $Button_Restore_Array[15] = $CurrentGUI If $ButtonsToCreate_Array[3] Then $Button_FSRestore_Array[0] = GUICtrlCreatePic("", $Win_POS[2] - $cMarginR - ($CBw * $PosCount), $cMarginR, $CBw, $CBh) $Button_FSRestore_Array[1] = False $Button_FSRestore_Array[2] = False ; Inactive Color state $Button_FSRestore_Array[3] = "10" $Button_FSRestore_Array[15] = $CurrentGUI EndIf EndIf If $ButtonsToCreate_Array[2] Then $PosCount = $PosCount + 1 $Button_Minimize_Array[0] = GUICtrlCreatePic("", $Win_POS[2] - $cMarginR - ($CBw * $PosCount), $cMarginR, $CBw, $CBh) $Button_Minimize_Array[1] = False $Button_Minimize_Array[2] = False ; Inactive Color state $Button_Minimize_Array[3] = "0" $Button_Minimize_Array[15] = $CurrentGUI EndIf If $ButtonsToCreate_Array[3] Then $PosCount = $PosCount + 1 $Button_FullScreen_Array[0] = GUICtrlCreatePic("", $Win_POS[2] - $cMarginR - ($CBw * $PosCount), $cMarginR, $CBw, $CBh) $Button_FullScreen_Array[1] = False $Button_FullScreen_Array[2] = False ; Inactive Color state $Button_FullScreen_Array[3] = "9" $Button_FullScreen_Array[15] = $CurrentGUI If $Button_FSRestore_Array[15] <> $CurrentGUI Then $Button_FSRestore_Array[0] = GUICtrlCreatePic("", $Win_POS[2] - $cMarginR - ($CBw * $PosCount), $cMarginR, $CBw, $CBh) $Button_FSRestore_Array[1] = False $Button_FSRestore_Array[2] = False ; Inactive Color state $Button_FSRestore_Array[3] = "10" $Button_FSRestore_Array[15] = $CurrentGUI EndIf EndIf If $ButtonsToCreate_Array[4] Then $Button_Menu_Array[0] = GUICtrlCreatePic("", $cMarginR, $cMarginR, $CBw, $CBh) $Button_Menu_Array[1] = False $Button_Menu_Array[2] = False ; Inactive Color state $Button_Menu_Array[3] = "8" $Button_Menu_Array[15] = $CurrentGUI EndIf ;Create Graphics If $ButtonsToCreate_Array[0] Then Local $Button_Close_Graphic1 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 4, 4), $Button_Close_Graphic2 = _iGraphicCreate($CBw, $CBh, "0xFFE81123", 4, 4), $Button_Close_Graphic3 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 4, 4) EndIf If $ButtonsToCreate_Array[1] Then Local $Button_Maximize_Graphic1 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4), $Button_Maximize_Graphic2 = _iGraphicCreate($CBw, $CBh, $Hover_BK_Color, 0, 4), $Button_Maximize_Graphic3 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4) Local $Button_Restore_Graphic1 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4), $Button_Restore_Graphic2 = _iGraphicCreate($CBw, $CBh, $Hover_BK_Color, 0, 4), $Button_Restore_Graphic3 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4) EndIf If $ButtonsToCreate_Array[2] Then Local $Button_Minimize_Graphic1 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4), $Button_Minimize_Graphic2 = _iGraphicCreate($CBw, $CBh, $Hover_BK_Color, 0, 4), $Button_Minimize_Graphic3 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4) EndIf If $ButtonsToCreate_Array[3] Then Local $Button_FullScreen_Graphic1 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4), $Button_FullScreen_Graphic2 = _iGraphicCreate($CBw, $CBh, $Hover_BK_Color, 0, 4), $Button_FullScreen_Graphic3 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4) Local $Button_FSRestore_Graphic1 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4), $Button_FSRestore_Graphic2 = _iGraphicCreate($CBw, $CBh, $Hover_BK_Color, 0, 4), $Button_FSRestore_Graphic3 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4) EndIf If $ButtonsToCreate_Array[4] Then Local $Button_Menu_Graphic1 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4), $Button_Menu_Graphic2 = _iGraphicCreate($CBw, $CBh, $Hover_BK_Color, 0, 4), $Button_Menu_Graphic3 = _iGraphicCreate($CBw, $CBh, $GUI_BG_Color, 0, 4) EndIf ;Set close button BG color style If $CloseButtonOnStyle Then _GDIPlus_GraphicsClear($Button_Close_Graphic1[0], "0xFFB52231") ; _GDIPlus_GraphicsClear($Button_Close_Graphic3[0], "0xFFB52231") ; EndIf ;Create Close Button========================================================================================================== If $ButtonsToCreate_Array[0] Then If $CloseButtonOnStyle Then _GDIPlus_GraphicsDrawLine($Button_Close_Graphic1[0], 17 * $cbDPI, 9 * $cbDPI, 27 * $cbDPI, 19 * $cbDPI, $hPen3) _GDIPlus_GraphicsDrawLine($Button_Close_Graphic1[0], 27 * $cbDPI, 9 * $cbDPI, 17 * $cbDPI, 19 * $cbDPI, $hPen3) _GDIPlus_GraphicsDrawLine($Button_Close_Graphic3[0], 17 * $cbDPI, 9 * $cbDPI, 27 * $cbDPI, 19 * $cbDPI, $hPen5) _GDIPlus_GraphicsDrawLine($Button_Close_Graphic3[0], 27 * $cbDPI, 9 * $cbDPI, 17 * $cbDPI, 19 * $cbDPI, $hPen5) Else _GDIPlus_GraphicsDrawLine($Button_Close_Graphic1[0], 17 * $cbDPI, 9 * $cbDPI, 27 * $cbDPI, 19 * $cbDPI, $hPen) _GDIPlus_GraphicsDrawLine($Button_Close_Graphic1[0], 27 * $cbDPI, 9 * $cbDPI, 17 * $cbDPI, 19 * $cbDPI, $hPen) _GDIPlus_GraphicsDrawLine($Button_Close_Graphic3[0], 17 * $cbDPI, 9 * $cbDPI, 27 * $cbDPI, 19 * $cbDPI, $hPen4) _GDIPlus_GraphicsDrawLine($Button_Close_Graphic3[0], 27 * $cbDPI, 9 * $cbDPI, 17 * $cbDPI, 19 * $cbDPI, $hPen4) EndIf _GDIPlus_GraphicsDrawLine($Button_Close_Graphic2[0], 17 * $cbDPI, 9 * $cbDPI, 27 * $cbDPI, 19 * $cbDPI, $hPen3) _GDIPlus_GraphicsDrawLine($Button_Close_Graphic2[0], 27 * $cbDPI, 9 * $cbDPI, 17 * $cbDPI, 19 * $cbDPI, $hPen3) EndIf ;============================================================================================================================= ;Create Maximize & Restore Button============================================================================================= If $ButtonsToCreate_Array[1] Then _GDIPlus_GraphicsDrawRect($Button_Maximize_Graphic1[0], Round(17 * $cbDPI), 9 * $cbDPI, 9 * $cbDPI, 9 * $cbDPI, $hPen) _GDIPlus_GraphicsDrawRect($Button_Maximize_Graphic2[0], Round(17 * $cbDPI), 9 * $cbDPI, 9 * $cbDPI, 9 * $cbDPI, $hPen2) _GDIPlus_GraphicsDrawRect($Button_Maximize_Graphic3[0], Round(17 * $cbDPI), 9 * $cbDPI, 9 * $cbDPI, 9 * $cbDPI, $hPen4) Local $kWH = Round(7 * $cbDPI), $resmargin = Round(2 * $cbDPI) _GDIPlus_GraphicsDrawRect($Button_Restore_Graphic1[0], Round(17 * $cbDPI) + $resmargin, (11 * $cbDPI) - $resmargin, $kWH, $kWH, $hPen) _GDIPlus_GraphicsFillRect($Button_Restore_Graphic1[0], Round(17 * $cbDPI), 11 * $cbDPI, $kWH, $kWH, $hBrush) _GDIPlus_GraphicsDrawRect($Button_Restore_Graphic1[0], Round(17 * $cbDPI), 11 * $cbDPI, $kWH, $kWH, $hPen) _GDIPlus_GraphicsDrawRect($Button_Restore_Graphic2[0], Round(17 * $cbDPI) + $resmargin, (11 * $cbDPI) - $resmargin, $kWH, $kWH, $hPen2) _GDIPlus_GraphicsFillRect($Button_Restore_Graphic2[0], Round(17 * $cbDPI), 11 * $cbDPI, $kWH, $kWH, $hBrush2) _GDIPlus_GraphicsDrawRect($Button_Restore_Graphic2[0], Round(17 * $cbDPI), 11 * $cbDPI, $kWH, $kWH, $hPen2) _GDIPlus_GraphicsDrawRect($Button_Restore_Graphic3[0], Round(17 * $cbDPI) + $resmargin, (11 * $cbDPI) - $resmargin, $kWH, $kWH, $hPen4) _GDIPlus_GraphicsFillRect($Button_Restore_Graphic3[0], Round(17 * $cbDPI), 11 * $cbDPI, $kWH, $kWH, $hBrush) _GDIPlus_GraphicsDrawRect($Button_Restore_Graphic3[0], Round(17 * $cbDPI), 11 * $cbDPI, $kWH, $kWH, $hPen4) EndIf ;============================================================================================================================= ;Create Minimize Button======================================================================================================= If $ButtonsToCreate_Array[2] Then _GDIPlus_GraphicsDrawLine($Button_Minimize_Graphic1[0], 18 * $cbDPI, 14 * $cbDPI, 27 * $cbDPI, 14 * $cbDPI, $hPen) _GDIPlus_GraphicsDrawLine($Button_Minimize_Graphic2[0], 18 * $cbDPI, 14 * $cbDPI, 27 * $cbDPI, 14 * $cbDPI, $hPen2) _GDIPlus_GraphicsDrawLine($Button_Minimize_Graphic3[0], 18 * $cbDPI, 14 * $cbDPI, 27 * $cbDPI, 14 * $cbDPI, $hPen4) EndIf ;============================================================================================================================= ;Create FullScreen / Fullscreen Restore Button================================================================================ If $ButtonsToCreate_Array[3] Then ;Calc size+pos Local $Cutpoint = ($FrameSize * 0.3) Local $LowerLinePos[2], $UpperLinePos $LowerLinePos[0] = Round($CBw / 2.9) $LowerLinePos[1] = Round($CBh / 1.5) $UpperLinePos = cAngle($LowerLinePos[0], $LowerLinePos[1], 135, $CBw / 2.5) $UpperLinePos[0] = Round($UpperLinePos[0]) $UpperLinePos[1] = Round($UpperLinePos[1]) ;Add arrow1 Local $apos1 = cAngle($LowerLinePos[0] + $Cutpoint, $LowerLinePos[1] + $Cutpoint, 180, 5 * $cbDPI) Local $apos2 = cAngle($LowerLinePos[0] - $Cutpoint, $LowerLinePos[1] - $Cutpoint, 90, 5 * $cbDPI) _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic1[0], $LowerLinePos[0] + $Cutpoint, $LowerLinePos[1] + $Cutpoint, $apos1[0], $apos1[1], $hPen) ;r _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic1[0], $LowerLinePos[0] - $Cutpoint, $LowerLinePos[1] - $Cutpoint, $apos2[0], $apos2[1], $hPen) ;l _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic2[0], $LowerLinePos[0] + $Cutpoint, $LowerLinePos[1] + $Cutpoint, $apos1[0], $apos1[1], $hPen) ;r _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic2[0], $LowerLinePos[0] - $Cutpoint, $LowerLinePos[1] - $Cutpoint, $apos2[0], $apos2[1], $hPen) ;l _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic3[0], $LowerLinePos[0] + $Cutpoint, $LowerLinePos[1] + $Cutpoint, $apos1[0], $apos1[1], $hPen4) ;r _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic3[0], $LowerLinePos[0] - $Cutpoint, $LowerLinePos[1] - $Cutpoint, $apos2[0], $apos2[1], $hPen4) ;l ;Add arrow2 $apos1 = cAngle($UpperLinePos[0] + $Cutpoint, $UpperLinePos[1] + $Cutpoint, 270, 5 * $cbDPI) $apos2 = cAngle($UpperLinePos[0] - $Cutpoint, $UpperLinePos[1] - $Cutpoint, 0, 5 * $cbDPI) _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic1[0], $UpperLinePos[0] + $Cutpoint, $UpperLinePos[1] + $Cutpoint, $apos1[0], $apos1[1], $hPen) ;r _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic1[0], $UpperLinePos[0] - $Cutpoint, $UpperLinePos[1] - $Cutpoint, $apos2[0], $apos2[1], $hPen) ;l _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic2[0], $UpperLinePos[0] + $Cutpoint, $UpperLinePos[1] + $Cutpoint, $apos1[0], $apos1[1], $hPen) ;r _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic2[0], $UpperLinePos[0] - $Cutpoint, $UpperLinePos[1] - $Cutpoint, $apos2[0], $apos2[1], $hPen) ;l _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic3[0], $UpperLinePos[0] + $Cutpoint, $UpperLinePos[1] + $Cutpoint, $apos1[0], $apos1[1], $hPen4) ;r _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic3[0], $UpperLinePos[0] - $Cutpoint, $UpperLinePos[1] - $Cutpoint, $apos2[0], $apos2[1], $hPen4) ;l ;Add line _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic1[0], $LowerLinePos[0] + $Cutpoint, $LowerLinePos[1] - $Cutpoint, $UpperLinePos[0], $UpperLinePos[1], $hPen) ;r _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic2[0], $LowerLinePos[0] + $Cutpoint, $LowerLinePos[1] - $Cutpoint, $UpperLinePos[0], $UpperLinePos[1], $hPen) ;r _GDIPlus_GraphicsDrawLine($Button_FullScreen_Graphic3[0], $LowerLinePos[0] + $Cutpoint, $LowerLinePos[1] - $Cutpoint, $UpperLinePos[0], $UpperLinePos[1], $hPen4) ;r ;============================================================================================================================= ;Calc size+pos arrow 1 $Cutpoint = ($FrameSize * 0.3) Local $mpX = Round($CBw / 2, 0), $mpY = Round($CBh / 2.35, 0) $apos1 = cAngle($mpX - $Cutpoint, $mpY - $Cutpoint, 90, 4 * $cbDPI) $apos2 = cAngle($mpX + $Cutpoint, $mpY + $Cutpoint, 180, 4 * $cbDPI) Local $apos4 = cAngle($mpX + $Cutpoint, $mpY - $Cutpoint, 135, 8 * $cbDPI) ;Add arrow1 _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic1[0], $mpX - $Cutpoint, $mpY - $Cutpoint, $apos1[0], $apos1[1], $hPen) ;h _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic1[0], $mpX + $Cutpoint, $mpY + $Cutpoint, $apos2[0], $apos2[1], $hPen) ;v _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic2[0], $mpX - $Cutpoint, $mpY - $Cutpoint, $apos1[0], $apos1[1], $hPen) ;h _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic2[0], $mpX + $Cutpoint, $mpY + $Cutpoint, $apos2[0], $apos2[1], $hPen) ;v _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic3[0], $mpX - $Cutpoint, $mpY - $Cutpoint, $apos1[0], $apos1[1], $hPen4) ;h _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic3[0], $mpX + $Cutpoint, $mpY + $Cutpoint, $apos2[0], $apos2[1], $hPen4) ;v ;Calc size+pos arrow2 $Cutpoint = ($FrameSize * 0.3) Local $mpX1 = Round($CBw / 2.2, 0), $mpY1 = Round($CBh / 2, 0) $apos1 = cAngle($mpX1 - $Cutpoint, $mpY1 - $Cutpoint, 360, 4 * $cbDPI) $apos2 = cAngle($mpX1 + $Cutpoint, $mpY1 + $Cutpoint, 270, 4 * $cbDPI) Local $apos3 = cAngle($mpX1 - $Cutpoint, $mpY1 + $Cutpoint, 315, 8 * $cbDPI) ;Add arrow2 _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic1[0], $mpX1 - $Cutpoint, $mpY1 - $Cutpoint, $apos1[0], $apos1[1], $hPen) ;v _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic1[0], $mpX1 + $Cutpoint, $mpY1 + $Cutpoint, $apos2[0], $apos2[1], $hPen) ;h _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic2[0], $mpX1 - $Cutpoint, $mpY1 - $Cutpoint, $apos1[0], $apos1[1], $hPen) ;v _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic2[0], $mpX1 + $Cutpoint, $mpY1 + $Cutpoint, $apos2[0], $apos2[1], $hPen) ;h _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic3[0], $mpX1 - $Cutpoint, $mpY1 - $Cutpoint, $apos1[0], $apos1[1], $hPen4) ;v _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic3[0], $mpX1 + $Cutpoint, $mpY1 + $Cutpoint, $apos2[0], $apos2[1], $hPen4) ;h ;Add lines _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic1[0], $mpX1 - $Cutpoint, $mpY1 + $Cutpoint, $apos3[0] + $Cutpoint, $apos3[1] - $Cutpoint, $hPen) _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic1[0], $mpX + $Cutpoint, $mpY - $Cutpoint, $apos4[0] - $Cutpoint, $apos4[1] + $Cutpoint, $hPen) _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic2[0], $mpX1 - $Cutpoint, $mpY1 + $Cutpoint, $apos3[0] + $Cutpoint, $apos3[1] - $Cutpoint, $hPen) _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic2[0], $mpX + $Cutpoint, $mpY - $Cutpoint, $apos4[0] - $Cutpoint, $apos4[1] + $Cutpoint, $hPen) _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic3[0], $mpX1 - $Cutpoint, $mpY1 + $Cutpoint, $apos3[0] + $Cutpoint, $apos3[1] - $Cutpoint, $hPen4) _GDIPlus_GraphicsDrawLine($Button_FSRestore_Graphic3[0], $mpX + $Cutpoint, $mpY - $Cutpoint, $apos4[0] - $Cutpoint, $apos4[1] + $Cutpoint, $hPen4) EndIf ;============================================================================================================================= ;Create Menu Button=========================================================================================================== If $ButtonsToCreate_Array[4] Then _GDIPlus_GraphicsDrawLine($Button_Menu_Graphic1[0], $CBw / 3, $CBh / 2.9, ($CBw / 3) * 2, $CBh / 2.9, $hPen) ;r _GDIPlus_GraphicsDrawLine($Button_Menu_Graphic1[0], $CBw / 3, $CBh / 2.9 + ($FrameSize * 4), ($CBw / 3) * 2, $CBh / 2.9 + ($FrameSize * 4), $hPen) ;r _GDIPlus_GraphicsDrawLine($Button_Menu_Graphic1[0], $CBw / 3, $CBh / 2.9 + ($FrameSize * 8), ($CBw / 3) * 2, $CBh / 2.9 + ($FrameSize * 8), $hPen) ;r _GDIPlus_GraphicsDrawLine($Button_Menu_Graphic2[0], $CBw / 3, $CBh / 2.9, ($CBw / 3) * 2, $CBh / 2.9, $hPen) _GDIPlus_GraphicsDrawLine($Button_Menu_Graphic2[0], $CBw / 3, $CBh / 2.9 + ($FrameSize * 4), ($CBw / 3) * 2, $CBh / 2.9 + ($FrameSize * 4), $hPen) _GDIPlus_GraphicsDrawLine($Button_Menu_Graphic2[0], $CBw / 3, $CBh / 2.9 + ($FrameSize * 8), ($CBw / 3) * 2, $CBh / 2.9 + ($FrameSize * 8), $hPen) _GDIPlus_GraphicsDrawLine($Button_Menu_Graphic3[0], $CBw / 3, $CBh / 2.9, ($CBw / 3) * 2, $CBh / 2.9, $hPen4) _GDIPlus_GraphicsDrawLine($Button_Menu_Graphic3[0], $CBw / 3, $CBh / 2.9 + ($FrameSize * 4), ($CBw / 3) * 2, $CBh / 2.9 + ($FrameSize * 4), $hPen4) _GDIPlus_GraphicsDrawLine($Button_Menu_Graphic3[0], $CBw / 3, $CBh / 2.9 + ($FrameSize * 8), ($CBw / 3) * 2, $CBh / 2.9 + ($FrameSize * 8), $hPen4) EndIf ;============================================================================================================================= ;Release resources _GDIPlus_PenDispose($hPen) _GDIPlus_PenDispose($hPen2) _GDIPlus_PenDispose($hPen3) _GDIPlus_PenDispose($hPen4) _GDIPlus_PenDispose($hPen5) _GDIPlus_BrushDispose($hBrush) _GDIPlus_BrushDispose($hBrush2) ;Create bitmap handles If $ButtonsToCreate_Array[0] Then $Button_Close_Array[5] = _iGraphicCreateBitmapHandle($Button_Close_Array[0], $Button_Close_Graphic1) $Button_Close_Array[6] = _iGraphicCreateBitmapHandle($Button_Close_Array[0], $Button_Close_Graphic2, False) $Button_Close_Array[7] = _iGraphicCreateBitmapHandle($Button_Close_Array[0], $Button_Close_Graphic3, False) GUICtrlSetResizing($Button_Close_Array[0], 768 + 32 + 4) $Control_Buttons[0] = $Button_Close_Array[0] _cHvr_Register($Button_Close_Array[0], "_iHoverOff", "_iHoverOn", '', "", _iAddHover($Button_Close_Array), $CurrentGUI) EndIf If $ButtonsToCreate_Array[1] Then $Button_Maximize_Array[5] = _iGraphicCreateBitmapHandle($Button_Maximize_Array[0], $Button_Maximize_Graphic1) $Button_Maximize_Array[6] = _iGraphicCreateBitmapHandle($Button_Maximize_Array[0], $Button_Maximize_Graphic2, False) $Button_Maximize_Array[7] = _iGraphicCreateBitmapHandle($Button_Maximize_Array[0], $Button_Maximize_Graphic3, False) $Button_Restore_Array[5] = _iGraphicCreateBitmapHandle($Button_Restore_Array[0], $Button_Restore_Graphic1) $Button_Restore_Array[6] = _iGraphicCreateBitmapHandle($Button_Restore_Array[0], $Button_Restore_Graphic2, False) $Button_Restore_Array[7] = _iGraphicCreateBitmapHandle($Button_Restore_Array[0], $Button_Restore_Graphic3, False) GUICtrlSetResizing($Button_Maximize_Array[0], 768 + 32 + 4) GUICtrlSetResizing($Button_Restore_Array[0], 768 + 32 + 4) $Control_Buttons[1] = $Button_Maximize_Array[0] $Control_Buttons[2] = $Button_Restore_Array[0] GUICtrlSetState($Button_Restore_Array[0], 32) _cHvr_Register($Button_Maximize_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Button_Maximize_Array), $CurrentGUI) _cHvr_Register($Button_Restore_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Button_Restore_Array), $CurrentGUI) EndIf If $ButtonsToCreate_Array[2] Then $Button_Minimize_Array[5] = _iGraphicCreateBitmapHandle($Button_Minimize_Array[0], $Button_Minimize_Graphic1) $Button_Minimize_Array[6] = _iGraphicCreateBitmapHandle($Button_Minimize_Array[0], $Button_Minimize_Graphic2, False) $Button_Minimize_Array[7] = _iGraphicCreateBitmapHandle($Button_Minimize_Array[0], $Button_Minimize_Graphic3, False) GUICtrlSetResizing($Button_Minimize_Array[0], 768 + 32 + 4) $Control_Buttons[3] = $Button_Minimize_Array[0] _cHvr_Register($Button_Minimize_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Button_Minimize_Array), $CurrentGUI) EndIf If $ButtonsToCreate_Array[3] Then $Button_FullScreen_Array[5] = _iGraphicCreateBitmapHandle($Button_FullScreen_Array[0], $Button_FullScreen_Graphic1) $Button_FullScreen_Array[6] = _iGraphicCreateBitmapHandle($Button_FullScreen_Array[0], $Button_FullScreen_Graphic2, False) $Button_FullScreen_Array[7] = _iGraphicCreateBitmapHandle($Button_FullScreen_Array[0], $Button_FullScreen_Graphic3, False) $Button_FSRestore_Array[5] = _iGraphicCreateBitmapHandle($Button_FSRestore_Array[0], $Button_FSRestore_Graphic1) $Button_FSRestore_Array[6] = _iGraphicCreateBitmapHandle($Button_FSRestore_Array[0], $Button_FSRestore_Graphic2, False) $Button_FSRestore_Array[7] = _iGraphicCreateBitmapHandle($Button_FSRestore_Array[0], $Button_FSRestore_Graphic3, False) GUICtrlSetResizing($Button_FullScreen_Array[0], 768 + 32 + 4) GUICtrlSetResizing($Button_FSRestore_Array[0], 768 + 32 + 4) GUICtrlSetState($Button_FSRestore_Array[0], 32) $Control_Buttons[4] = $Button_FullScreen_Array[0] $Control_Buttons[5] = $Button_FSRestore_Array[0] _cHvr_Register($Button_FullScreen_Array[0], "_iHoverOff", "_iHoverOn", "_iFullscreenToggleBtn", "", _iAddHover($Button_FullScreen_Array), $CurrentGUI) _cHvr_Register($Button_FSRestore_Array[0], "_iHoverOff", "_iHoverOn", "_iFullscreenToggleBtn", "", _iAddHover($Button_FSRestore_Array), $CurrentGUI) EndIf If $ButtonsToCreate_Array[4] Then $Button_Menu_Array[5] = _iGraphicCreateBitmapHandle($Button_Menu_Array[0], $Button_Menu_Graphic1) $Button_Menu_Array[6] = _iGraphicCreateBitmapHandle($Button_Menu_Array[0], $Button_Menu_Graphic2, False) $Button_Menu_Array[7] = _iGraphicCreateBitmapHandle($Button_Menu_Array[0], $Button_Menu_Graphic3, False) GUICtrlSetResizing($Button_Menu_Array[0], 768 + 32 + 2) $Control_Buttons[6] = $Button_Menu_Array[0] _cHvr_Register($Button_Menu_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Button_Menu_Array), $CurrentGUI) EndIf Return $Control_Buttons EndFunc ;==>_iCreateControlButtons #EndRegion MetroGUI=========================================================================================== #Region MetroButtons=========================================================================================== ; =============================================================================================================================== ; Name ..........: _Metro_CreateButton ; Description ...: Creates metro style buttons. Hovering creates a frame around the buttons. ; Syntax ........: _Metro_CreateButton($Text, $Left, $Top, $Width, $Height[, $BGColor = $ButtonBKColor[, ; $FontColor = $ButtonTextColor[, $Font = "Arial"[, $Fontsize = 12.5[, $FontStyle = 1 $FrameColor = "0xFFFFFF"]]]]]) ; Parameters ....: $Text - Text of the button. ; $Left - Left pos. ; $Top - Top pos. ; $Width - Width. ; $Height - Height. ; $BGColor - [optional] Button background color. Default is $ButtonBKColor. ; $FontColor - [optional] Font colore. Default is $ButtonTextColor. ; $Font - [optional] Font. Default is "Arial". ; $Fontsize - [optional] Fontsize. Default is 12.5. ; $FontStyle - [optional] Fontstyle. Default is 1. ; $FrameColor - [optional] Button frame color. Default is "0xFFFFFF". ; Return values .: Handle to the button. ; Example .......: _Metro_CreateButton("Button 1",50,50,120,34) ; =============================================================================================================================== Func _Metro_CreateButton($Text, $Left, $Top, $Width, $Height, $BG_Color = $ButtonBKColor, $Font_Color = $ButtonTextColor, $Font = "Arial", $Fontsize = 10, $FontStyle = 1, $FrameColor = "0xFFFFFF") Local $Button_Array[16] Local $btnDPI = _HighDPICheck() ;HighDPI Support If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Width = Round($Width * $gDPI) $Height = Round($Height * $gDPI) Else $Fontsize = ($Fontsize / $Font_DPI_Ratio) EndIf $Button_Array[1] = False ; Set hover OFF $Button_Array[3] = "2" ; Type $Button_Array[15] = GetCurrentGUI() ;Calculate Framesize Local $FrameSize = Round(4 * $btnDPI) If Not (Mod($FrameSize, 2) = 0) Then $FrameSize = $FrameSize - 1 ;Set Colors $BG_Color = "0xFF" & Hex($BG_Color, 6) $Font_Color = "0xFF" & Hex($Font_Color, 6) $FrameColor = "0xFF" & Hex($FrameColor, 6) Local $Brush_BTN_FontColor = _GDIPlus_BrushCreateSolid($Font_Color) Local $Brush_BTN_FontColorDis = _GDIPlus_BrushCreateSolid(StringReplace(_AlterBrightness($Font_Color, -30), "0x", "0xFF")) Local $Pen_BTN_FrameHoverColor = _GDIPlus_PenCreate($FrameColor, $FrameSize) ;Create Button graphics Local $Button_Graphic1 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5) ;Default Local $Button_Graphic2 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5) ;Hover Local $Button_Graphic3 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5) ;Disabled ;Create font, Set font options Local $hFormat = _GDIPlus_StringFormatCreate(), $hFamily = _GDIPlus_FontFamilyCreate($Font), $hFont = _GDIPlus_FontCreate($hFamily, $Fontsize, $FontStyle) Local $tLayout = _GDIPlus_RectFCreate(0, 0, $Width, $Height) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) ;Draw button text _GDIPlus_GraphicsDrawStringEx($Button_Graphic1[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Button_Graphic2[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Button_Graphic3[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColorDis) ;Add frame _GDIPlus_GraphicsDrawRect($Button_Graphic2[0], 0, 0, $Width, $Height, $Pen_BTN_FrameHoverColor) ;Release created objects _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($Brush_BTN_FontColor) _GDIPlus_BrushDispose($Brush_BTN_FontColorDis) _GDIPlus_PenDispose($Pen_BTN_FrameHoverColor) ;Set graphic and return Bitmap handle $Button_Array[0] = GUICtrlCreatePic("", $Left, $Top, $Width, $Height) $Button_Array[5] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic1) $Button_Array[6] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic2, False) $Button_Array[7] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic3, False) ;For GUI Resizing GUICtrlSetResizing($Button_Array[0], 768) _cHvr_Register($Button_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Button_Array)) Return $Button_Array[0] EndFunc ;==>_Metro_CreateButton ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateButtonEx ; Description ...: Creates Windows 10 style buttons with a frame around. Hovering changes the button color to a lighter color. ; Syntax ........: _Metro_CreateButtonEx($Text, $Left, $Top, $Width, $Height[, $BG_Color = $ButtonBKColor[, ; $Font_Color = $ButtonTextColor[, $Font = "Arial"[, $Fontsize = 12.5[, $FontStyle = 1[, ; $FrameColor = "0xFFFFFF"]]]]]]) ; Parameters ....: $Text - Text of the button. ; $Left - Left pos. ; $Top - Top pos. ; $Width - Width. ; $Height - Height. ; $BG_Color - [optional] Button background color. Default is $ButtonBKColor. ; $Font_Color - [optional] Font colore. Default is $ButtonTextColor. ; $Font - [optional] Font. Default is "Arial". ; $Fontsize - [optional] Fontsize. Default is 12.5. ; $FontStyle - [optional] Fontstyle. Default is 1. ; $FrameColor - [optional] Button frame color. Default is "0xFFFFFF". ; Return values .: Handle to the button. ; Example .......: _Metro_CreateButtonEx("Button 1",50,50,120,34) ; =============================================================================================================================== Func _Metro_CreateButtonEx($Text, $Left, $Top, $Width, $Height, $BG_Color = $ButtonBKColor, $Font_Color = $ButtonTextColor, $Font = "Arial", $Fontsize = 10, $FontStyle = 1, $FrameColor = "0xFFFFFF") Local $Button_Array[16] Local $btnDPI = _HighDPICheck() If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Width = Round($Width * $gDPI) $Height = Round($Height * $gDPI) Else $Fontsize = ($Fontsize / $Font_DPI_Ratio) EndIf $Button_Array[1] = False ; Set hover OFF $Button_Array[3] = "2" ; Type $Button_Array[15] = GetCurrentGUI() ;Calculate Framesize Local $FrameSize = Round(2 * $btnDPI) If Not (Mod($FrameSize, 2) = 0) Then $FrameSize = $FrameSize - 1 ;Set Colors $BG_Color = "0xFF" & Hex($BG_Color, 6) $Font_Color = "0xFF" & Hex($Font_Color, 6) $FrameColor = "0xFF" & Hex($FrameColor, 6) Local $Brush_BTN_FontColor = _GDIPlus_BrushCreateSolid($Font_Color) Local $Pen_BTN_FrameHoverColor = _GDIPlus_PenCreate($FrameColor, $FrameSize) Local $Pen_BTN_FrameHoverColorDis = _GDIPlus_PenCreate(StringReplace(_AlterBrightness($Font_Color, -30), "0x", "0xFF"), $FrameSize) Local $Brush_BTN_FontColorDis = _GDIPlus_BrushCreateSolid(StringReplace(_AlterBrightness($Font_Color, -30), "0x", "0xFF")) ;Create Button graphics Local $Button_Graphic1 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5) ;Default Local $Button_Graphic2 = _iGraphicCreate($Width, $Height, StringReplace(_AlterBrightness($BG_Color, 25), "0x", "0xFF"), 0, 5) ;Hover Local $Button_Graphic3 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5) ;Disabled ;Create font, Set font options Local $hFormat = _GDIPlus_StringFormatCreate(), $hFamily = _GDIPlus_FontFamilyCreate($Font), $hFont = _GDIPlus_FontCreate($hFamily, $Fontsize, $FontStyle) Local $tLayout = _GDIPlus_RectFCreate(0, 0, $Width, $Height) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) ;Draw button text _GDIPlus_GraphicsDrawStringEx($Button_Graphic1[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Button_Graphic2[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Button_Graphic3[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColorDis) ;Add frame _GDIPlus_GraphicsDrawRect($Button_Graphic1[0], 0, 0, $Width, $Height, $Pen_BTN_FrameHoverColor) _GDIPlus_GraphicsDrawRect($Button_Graphic2[0], 0, 0, $Width, $Height, $Pen_BTN_FrameHoverColor) _GDIPlus_GraphicsDrawRect($Button_Graphic3[0], 0, 0, $Width, $Height, $Pen_BTN_FrameHoverColorDis) ;Release created objects _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($Brush_BTN_FontColor) _GDIPlus_BrushDispose($Brush_BTN_FontColorDis) _GDIPlus_PenDispose($Pen_BTN_FrameHoverColor) _GDIPlus_PenDispose($Pen_BTN_FrameHoverColorDis) ;Set graphic and return Bitmap handle $Button_Array[0] = GUICtrlCreatePic("", $Left, $Top, $Width, $Height) $Button_Array[5] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic1) $Button_Array[6] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic2, False) $Button_Array[7] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic3, False) ;Set GUI Resizing GUICtrlSetResizing($Button_Array[0], 768) ;Register Hover funcs _cHvr_Register($Button_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Button_Array)) Return $Button_Array[0] EndFunc ;==>_Metro_CreateButtonEx ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateButtonEx2 ; Description ...: Creates a button without a frame and slightly rounded corners. Hovering changes the button color to a lighter color. ; Syntax ........: _Metro_CreateButtonEx2($Text, $Left, $Top, $Width, $Height[, $BG_Color = $ButtonBKColor[, ; $Font_Color = $ButtonTextColor[, $Font = "Arial"[, $Fontsize = 12.5[, $FontStyle = 1[, ; $FrameColor = "0xFFFFFF"]]]]]]) ; Parameters ....: $Text - Text of the button. ; $Left - Left pos. ; $Top - Top pos. ; $Width - Width. ; $Height - Height. ; $BG_Color - [optional] Button background color. Default is $ButtonBKColor. ; $Font_Color - [optional] Font colore. Default is $ButtonTextColor. ; $Font - [optional] Font. Default is "Arial". ; $Fontsize - [optional] Fontsize. Default is 12.5. ; $FontStyle - [optional] Fontstyle. Default is 1. ; $FrameColor - [optional] Button frame color. Default is "0xFFFFFF". ; Return values .: Handle to the button. ; Example .......: _Metro_CreateButtonEx2("Button 1",50,50,120,34) ; =============================================================================================================================== Func _Metro_CreateButtonEx2($Text, $Left, $Top, $Width, $Height, $BG_Color = $ButtonBKColor, $Font_Color = $ButtonTextColor, $Font = "Arial", $Fontsize = 10, $FontStyle = 1, $FrameColor = "0xFFFFFF") Local $Button_Array[16] Local $btnDPI = _HighDPICheck() If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Width = Round($Width * $gDPI) $Height = Round($Height * $gDPI) Else $Fontsize = ($Fontsize / $Font_DPI_Ratio) EndIf $Button_Array[1] = False ; Set hover OFF $Button_Array[3] = "2" ; Type $Button_Array[15] = GetCurrentGUI() If StringInStr($GUI_Theme_Name, "Light") Then Local $Font_Color1 = _AlterBrightness($Font_Color, 7) Else Local $Font_Color1 = _AlterBrightness($Font_Color, -15) EndIf ;Set Colors $BG_Color = "0xFF" & Hex($BG_Color, 6) $Font_Color = "0xFF" & Hex($Font_Color, 6) $Font_Color1 = "0xFF" & Hex($Font_Color1, 6) $FrameColor = "0xFF" & Hex($FrameColor, 6) Local $Brush_BTN_FontColor = _GDIPlus_BrushCreateSolid($Font_Color) Local $Brush_BTN_FontColor1 = _GDIPlus_BrushCreateSolid($Font_Color1) Local $Brush_BTN_FontColorDis = _GDIPlus_BrushCreateSolid(StringReplace(_AlterBrightness($Font_Color, -30), "0x", "0xFF")) ;Create Button graphics Local $Button_Graphic1 = _iGraphicCreate($Width, $Height, StringReplace($GUIThemeColor, "0x", "0xFF"), 5, 5) ;Default Local $Button_Graphic2 = _iGraphicCreate($Width, $Height, StringReplace($GUIThemeColor, "0x", "0xFF"), 5, 5) ;Hover Local $Button_Graphic3 = _iGraphicCreate($Width, $Height, StringReplace($GUIThemeColor, "0x", "0xFF"), 5, 5) ;Disabled Local $iRadius = 3, $Margin = ($iRadius / 2) * $gDPI Local $iWidth = $Width - ($Margin * 2), $iHeight = $Height - ($Margin * 2) Local $hPath = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath, $Margin + $iWidth - ($iRadius * 2), $Margin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath, $Margin + $iWidth - ($iRadius * 2), $Margin + $iHeight - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath, $Margin, $Margin + $iHeight - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath, $Margin, $Margin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath) Local $hBrush = _GDIPlus_BrushCreateSolid($BG_Color) Local $hBrushHover = _GDIPlus_BrushCreateSolid(StringReplace(_AlterBrightness($BG_Color, +25), "0x", "0xFF")) _GDIPlus_GraphicsFillPath($Button_Graphic1[0], $hPath, $hBrush) _GDIPlus_GraphicsFillPath($Button_Graphic2[0], $hPath, $hBrushHover) _GDIPlus_GraphicsFillPath($Button_Graphic3[0], $hPath, $hBrush) ;Create font, Set font options Local $hFormat = _GDIPlus_StringFormatCreate(), $hFamily = _GDIPlus_FontFamilyCreate($Font), $hFont = _GDIPlus_FontCreate($hFamily, $Fontsize, $FontStyle) Local $tLayout = _GDIPlus_RectFCreate(0, 0, $Width, $Height) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) ;Draw button text _GDIPlus_GraphicsDrawStringEx($Button_Graphic1[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor1) _GDIPlus_GraphicsDrawStringEx($Button_Graphic2[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Button_Graphic3[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColorDis) ;Release created objects _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($Brush_BTN_FontColor) _GDIPlus_BrushDispose($Brush_BTN_FontColor1) _GDIPlus_BrushDispose($Brush_BTN_FontColorDis) _GDIPlus_BrushDispose($hBrush) _GDIPlus_BrushDispose($hBrushHover) _GDIPlus_PathDispose($hPath) ;Set graphic and return Bitmap handle $Button_Array[0] = GUICtrlCreatePic("", $Left, $Top, $Width, $Height) $Button_Array[5] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic1) $Button_Array[6] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic2, False) $Button_Array[7] = _iGraphicCreateBitmapHandle($Button_Array[0], $Button_Graphic3, False) ;Set GUI Resizing GUICtrlSetResizing($Button_Array[0], 768) _cHvr_Register($Button_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Button_Array)) Return $Button_Array[0] EndFunc ;==>_Metro_CreateButtonEx2 ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_DisableButton ; Description ...: Disables a Button and makes the font grayed out to indicate that the button is disabled. ; Syntax ........: _Metro_DisableButton($mButton) ; Parameters ....: $mButton - Handle to the button. ; Example .......: _Metro_DisableButton($Button1) ; =============================================================================================================================== Func _Metro_DisableButton($mButton) Local $CurrentGUI = GetCurrentGUI() GUICtrlSetState($mButton, 128) For $i_BTN = 0 To (UBound($iHoverReg) - 1) If ($iHoverReg[$i_BTN][0] = $mButton) And ($iHoverReg[$i_BTN][15] = $CurrentGUI) Then _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$i_BTN][0], 0x0172, 0, $iHoverReg[$i_BTN][7])) EndIf Next EndFunc ;==>_Metro_DisableButton ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_EnableButton ; Description ...: Enables a metro style button and reverts the grayed out font style. ; Syntax ........: _Metro_EnableButton($mButton) ; Parameters ....: $mButton - Handle to the button. ; =============================================================================================================================== Func _Metro_EnableButton($mButton) Local $CurrentGUI = GetCurrentGUI() GUICtrlSetState($mButton, 64) For $i_BTN = 0 To (UBound($iHoverReg) - 1) If ($iHoverReg[$i_BTN][0] = $mButton) And ($iHoverReg[$i_BTN][15] = $CurrentGUI) Then _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$i_BTN][0], 0x0172, 0, $iHoverReg[$i_BTN][5])) EndIf Next EndFunc ;==>_Metro_EnableButton #EndRegion MetroButtons=========================================================================================== #Region Metro Toggles=========================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateToggle(NEW WIN10 Style) ; Description ...: Creates a Windows 10 style toggle with a text on the right side. ; Syntax ........: _Metro_CreateToggle($Text, $Left, $Top, $Width, $Height[, $BG_Color = $GUIThemeColor[, ; $Font_Color = $FontThemeColor[, $Font = "Segoe UI"[, $FontSize = "11"]]]]) ; Parameters ....: ; $Text - Text to be displayed on the right side of the GUI. ; $Left - Left pos ; $Top - Top pos. ; $Width - Width ; $Height - Height ; $BG_Color - [optional] Background color. Default is $GUIThemeColor. ; $Font_Color - [optional] Font color. Default is $FontThemeColor. ; $Font - [optional] Font. Default is "Segoe UI". ; $FontSize - [optional] Fontsize. Default is "11". ; Return values .: Handle to the toggle. ; =============================================================================================================================== Func _Metro_CreateToggle($Text, $Left, $Top, $Width, $Height, $BG_Color = $GUIThemeColor, $Font_Color = $FontThemeColor, $Font = "Segoe UI", $Fontsize = "11") Local $Text1 = $Text If $Height < 20 Then If (@Compiled = 0) Then MsgBox(48, "Metro UDF", "The min. height is 20px for metro toggles.") EndIf If $Width < 46 Then If (@Compiled = 0) Then MsgBox(48, "Metro UDF", "The min. width for metro toggles must be at least 46px without any text!") EndIf If Not (Mod($Height, 2) = 0) Then If (@Compiled = 0) Then MsgBox(48, "Metro UDF", "The toggle height should be an even number to prevent any misplacing.") EndIf ;HighDPI Support Local $pDPI = _HighDPICheck() If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Width = Round($Width * $gDPI) $Height = Round($Height * $gDPI) If Not (Mod($Height, 2) = 0) Then $Height = $Height + 1 Else $Fontsize = ($Fontsize / $Font_DPI_Ratio) EndIf Local $Toggle_Array[16] $Toggle_Array[1] = False ; Hover $Toggle_Array[2] = False ; Checked State $Toggle_Array[3] = "6" ; Type $Toggle_Array[15] = GetCurrentGUI() ;Calc pos/sizes Local $TopMargCalc = Number(20 * $pDPI, 1) If Not (Mod($TopMargCalc, 2) = 0) Then $TopMargCalc = $TopMargCalc + 1 Local $TopMargCalc1 = Number(12 * $pDPI, 1) If Not (Mod($TopMargCalc1, 2) = 0) Then $TopMargCalc1 = $TopMargCalc1 + 1 Local $TopMargin = Number((($Height - $TopMargCalc) / 2), 1) Local $TopMarginCircle = Number((($Height - $TopMargCalc1) / 2), 1) Local $iRadius = 10 * $pDPI Local $hFWidth = Number(50 * $pDPI, 1) If Not (Mod($hFWidth, 2) = 0) Then $hFWidth = $hFWidth + 1 Local $togSizeW = Number(46 * $pDPI, 1) If Not (Mod($togSizeW, 2) = 0) Then $togSizeW = $togSizeW + 1 Local $togSizeH = Number(20 * $pDPI, 1) If Not (Mod($togSizeH, 2) = 0) Then $togSizeH = $togSizeH + 1 Local $tog_calc1 = Number(2 * $pDPI, 1) Local $tog_calc2 = Number(3 * $pDPI, 1) Local $tog_calc3 = Number(11 * $pDPI, 1) Local $tog_calc5 = Number(6 * $pDPI, 1) ;Set Colors $BG_Color = "0xFF" & Hex($BG_Color, 6) $Font_Color = "0xFF" & Hex($Font_Color, 6) Local $Brush_BTN_FontColor = _GDIPlus_BrushCreateSolid($Font_Color) Local $Brush_BTN_FontColor1 = _GDIPlus_BrushCreateSolid(StringReplace($CB_Radio_Color, "0x", "0xFF")) If StringInStr($GUI_Theme_Name, "Light") Then Local $BoxFrameCol = StringReplace(_AlterBrightness($Font_Color, +65), "0x", "0xFF") Local $BoxFrameCol1 = StringReplace(_AlterBrightness($Font_Color, +65), "0x", "0xFF") Local $Font_Color1 = StringReplace(_AlterBrightness($Font_Color, +70), "0x", "0xFF") Else Local $BoxFrameCol = StringReplace(_AlterBrightness($Font_Color, -45), "0x", "0xFF") Local $BoxFrameCol1 = StringReplace(_AlterBrightness($Font_Color, -45), "0x", "0xFF") Local $Font_Color1 = StringReplace(_AlterBrightness($Font_Color, -30), "0x", "0xFF") EndIf ;Unchecked Local $BrushInnerUC = _GDIPlus_BrushCreateSolid($BG_Color) Local $BrushCircleUC = _GDIPlus_BrushCreateSolid($Font_Color) Local $BrushCircleHoverUC = _GDIPlus_BrushCreateSolid($BoxFrameCol1) Local $hPenDefaultUC = _GDIPlus_PenCreate($Font_Color, 2 * $pDPI) Local $hPenHoverUC = _GDIPlus_PenCreate($BoxFrameCol1, 2 * $pDPI) ;Checked Local $BrushInnerC = _GDIPlus_BrushCreateSolid(StringReplace($ButtonBKColor, "0x", "0xFF")) Local $BrushInnerCHover = _GDIPlus_BrushCreateSolid(StringReplace(_AlterBrightness($ButtonBKColor, +15), "0x", "0xFF")) Local $BrushCircleC = _GDIPlus_BrushCreateSolid(StringReplace($ButtonTextColor, "0x", "0xFF")) Local $hPenDefaultC = _GDIPlus_PenCreate(StringReplace($ButtonBKColor, "0x", "0xFF"), 2 * $pDPI) Local $hPenHoverC = _GDIPlus_PenCreate(StringReplace(_AlterBrightness($ButtonBKColor, +15), "0x", "0xFF"), 2 * $pDPI) ;Create graphics Local $Toggle_Graphic1 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5), $Toggle_Graphic2 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5), $Toggle_Graphic3 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5), $Toggle_Graphic4 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5), $Toggle_Graphic5 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5), $Toggle_Graphic6 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5), $Toggle_Graphic7 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5), $Toggle_Graphic8 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5), $Toggle_Graphic9 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5), $Toggle_Graphic10 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;Set font options Local $hFormat = _GDIPlus_StringFormatCreate(), $hFamily = _GDIPlus_FontFamilyCreate($Font), $hFont = _GDIPlus_FontCreate($hFamily, $Fontsize, 0) Local $tLayout = _GDIPlus_RectFCreate($hFWidth + (10 * $pDPI), 0, $Width - $hFWidth, $Height) _GDIPlus_StringFormatSetAlign($hFormat, 0) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) ;Draw text If StringInStr($Text, "|@|") Then $Text1 = StringRegExp($Text, "\|@\|(.+)", 1) If Not @error Then $Text1 = $Text1[0] $Text = StringRegExp($Text, "^(.+)\|@\|", 1) If Not @error Then $Text = $Text[0] EndIf _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic1[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic2[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic3[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic4[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic5[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic6[0], $Text1, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic7[0], $Text1, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic8[0], $Text1, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic9[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic10[0], $Text1, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) ;Default state Local $hPath1 = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath1, 0 + $hFWidth - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath1, 0 + $hFWidth - ($iRadius * 2), $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath1, 1 * $pDPI, $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath1, 1 * $pDPI, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath1) _GDIPlus_GraphicsFillPath($Toggle_Graphic1[0], $hPath1, $BrushInnerUC) _GDIPlus_GraphicsDrawPath($Toggle_Graphic1[0], $hPath1, $hPenDefaultUC) _GDIPlus_GraphicsFillEllipse($Toggle_Graphic1[0], 6 * $pDPI, $TopMarginCircle, 12 * $pDPI, 12 * $pDPI, $BrushCircleUC) ;Default hover state Local $hPath2 = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath2, 0 + $hFWidth - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath2, 0 + $hFWidth - ($iRadius * 2), $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath2, 1 * $pDPI, $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath2, 1 * $pDPI, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath2) _GDIPlus_GraphicsFillPath($Toggle_Graphic9[0], $hPath2, $BrushInnerUC) _GDIPlus_GraphicsDrawPath($Toggle_Graphic9[0], $hPath2, $hPenHoverUC) _GDIPlus_GraphicsFillEllipse($Toggle_Graphic9[0], 6 * $pDPI, $TopMarginCircle, 12 * $pDPI, 12 * $pDPI, $BrushCircleHoverUC) ;CheckedStep1 Local $hPath3 = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath3, 0 + $hFWidth - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath3, 0 + $hFWidth - ($iRadius * 2), $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath3, 1 * $pDPI, $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath3, 1 * $pDPI, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath3) _GDIPlus_GraphicsFillPath($Toggle_Graphic2[0], $hPath3, $BrushInnerUC) _GDIPlus_GraphicsDrawPath($Toggle_Graphic2[0], $hPath3, $hPenHoverUC) _GDIPlus_GraphicsFillEllipse($Toggle_Graphic2[0], 10 * $pDPI, $TopMarginCircle, 12 * $pDPI, 12 * $pDPI, $BrushCircleHoverUC) ;CheckedStep2 Local $hPath4 = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath4, 0 + $hFWidth - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath4, 0 + $hFWidth - ($iRadius * 2), $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath4, 1 * $pDPI, $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath4, 1 * $pDPI, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath4) _GDIPlus_GraphicsFillPath($Toggle_Graphic3[0], $hPath4, $BrushInnerUC) _GDIPlus_GraphicsDrawPath($Toggle_Graphic3[0], $hPath4, $hPenHoverUC) _GDIPlus_GraphicsFillEllipse($Toggle_Graphic3[0], 14 * $pDPI, $TopMarginCircle, 12 * $pDPI, 12 * $pDPI, $BrushCircleHoverUC) ;CheckedStep3 Local $hPath5 = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath5, 0 + $hFWidth - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath5, 0 + $hFWidth - ($iRadius * 2), $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath5, 1 * $pDPI, $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath5, 1 * $pDPI, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath5) _GDIPlus_GraphicsFillPath($Toggle_Graphic4[0], $hPath5, $BrushInnerUC) _GDIPlus_GraphicsDrawPath($Toggle_Graphic4[0], $hPath5, $hPenHoverUC) _GDIPlus_GraphicsFillEllipse($Toggle_Graphic4[0], 18 * $pDPI, $TopMarginCircle, 12 * $pDPI, 12 * $pDPI, $BrushCircleHoverUC) ;CheckedStep4 Local $hPath6 = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath6, 0 + $hFWidth - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath6, 0 + $hFWidth - ($iRadius * 2), $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath6, 1 * $pDPI, $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath6, 1 * $pDPI, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath6) _GDIPlus_GraphicsFillPath($Toggle_Graphic5[0], $hPath6, $BrushInnerUC) _GDIPlus_GraphicsDrawPath($Toggle_Graphic5[0], $hPath6, $hPenHoverUC) _GDIPlus_GraphicsFillEllipse($Toggle_Graphic5[0], 22 * $pDPI, $TopMarginCircle, 12 * $pDPI, 12 * $pDPI, $BrushCircleHoverUC) ;CheckedStep5 Local $hPath7 = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath7, 0 + $hFWidth - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath7, 0 + $hFWidth - ($iRadius * 2), $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath7, 1 * $pDPI, $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath7, 1 * $pDPI, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath7) _GDIPlus_GraphicsFillPath($Toggle_Graphic6[0], $hPath7, $BrushInnerCHover) _GDIPlus_GraphicsDrawPath($Toggle_Graphic6[0], $hPath7, $hPenHoverC) _GDIPlus_GraphicsFillEllipse($Toggle_Graphic6[0], 26 * $pDPI, $TopMarginCircle, 12 * $pDPI, 12 * $pDPI, $BrushCircleC) ;CheckedStep6 Local $hPath8 = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath8, 0 + $hFWidth - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath8, 0 + $hFWidth - ($iRadius * 2), $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath8, 1 * $pDPI, $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath8, 1 * $pDPI, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath8) _GDIPlus_GraphicsFillPath($Toggle_Graphic7[0], $hPath8, $BrushInnerCHover) _GDIPlus_GraphicsDrawPath($Toggle_Graphic7[0], $hPath8, $hPenHoverC) _GDIPlus_GraphicsFillEllipse($Toggle_Graphic7[0], 30 * $pDPI, $TopMarginCircle, 12 * $pDPI, 12 * $pDPI, $BrushCircleC) ;Final checked state Local $hPath9 = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath9, 0 + $hFWidth - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath9, 0 + $hFWidth - ($iRadius * 2), $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath9, 1 * $pDPI, $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath9, 1 * $pDPI, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath9) _GDIPlus_GraphicsFillPath($Toggle_Graphic8[0], $hPath9, $BrushInnerC) _GDIPlus_GraphicsDrawPath($Toggle_Graphic8[0], $hPath9, $hPenDefaultC) _GDIPlus_GraphicsFillEllipse($Toggle_Graphic8[0], 34 * $pDPI, $TopMarginCircle, 12 * $pDPI, 12 * $pDPI, $BrushCircleC) ;Final checked state hover Local $hPath10 = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath10, 0 + $hFWidth - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath10, 0 + $hFWidth - ($iRadius * 2), $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath10, 1 * $pDPI, $TopMargin + (20 * $pDPI) - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath10, 1 * $pDPI, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath10) _GDIPlus_GraphicsFillPath($Toggle_Graphic10[0], $hPath10, $BrushInnerCHover) _GDIPlus_GraphicsDrawPath($Toggle_Graphic10[0], $hPath10, $hPenHoverC) _GDIPlus_GraphicsFillEllipse($Toggle_Graphic10[0], 34 * $pDPI, $TopMarginCircle, 12 * $pDPI, 12 * $pDPI, $BrushCircleC) ;Release created objects _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($Brush_BTN_FontColor) _GDIPlus_BrushDispose($Brush_BTN_FontColor1) _GDIPlus_BrushDispose($BrushInnerUC) _GDIPlus_BrushDispose($BrushCircleUC) _GDIPlus_BrushDispose($BrushCircleHoverUC) _GDIPlus_BrushDispose($BrushInnerC) _GDIPlus_BrushDispose($BrushInnerCHover) _GDIPlus_BrushDispose($BrushCircleC) _GDIPlus_PenDispose($hPenDefaultUC) _GDIPlus_PenDispose($hPenHoverUC) _GDIPlus_PenDispose($hPenDefaultC) _GDIPlus_PenDispose($hPenHoverC) _GDIPlus_PathDispose($hPath1) _GDIPlus_PathDispose($hPath2) _GDIPlus_PathDispose($hPath3) _GDIPlus_PathDispose($hPath4) _GDIPlus_PathDispose($hPath5) _GDIPlus_PathDispose($hPath6) _GDIPlus_PathDispose($hPath7) _GDIPlus_PathDispose($hPath8) _GDIPlus_PathDispose($hPath9) _GDIPlus_PathDispose($hPath10) ;Create bitmap handles and set graphics $Toggle_Array[0] = GUICtrlCreatePic("", $Left, $Top, $Width, $Height) $Toggle_Array[5] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic1) $Toggle_Array[6] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic2, False) $Toggle_Array[7] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic3, False) $Toggle_Array[8] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic4, False) $Toggle_Array[9] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic5, False) $Toggle_Array[10] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic6, False) $Toggle_Array[11] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic7, False) $Toggle_Array[12] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic8, False) $Toggle_Array[13] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic9, False) $Toggle_Array[14] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic10, False) ;Set Control Resizing GUICtrlSetResizing($Toggle_Array[0], 768) ;Add to GUI_HOVER_REG _cHvr_Register($Toggle_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Toggle_Array)) Return $Toggle_Array[0] EndFunc ;==>_Metro_CreateToggle ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateToggleEx ; Description ...: Creates a Windows 8 style toggle with a text on the right side. ; Syntax ........: _Metro_CreateToggle($Text, $Left, $Top, $Width, $Height[, $BG_Color = $GUIThemeColor[, ; $Font_Color = $FontThemeColor[, $Font = "Segoe UI"[, $FontSize = "11"]]]]) ; Parameters ....: ; $Text - Text to be displayed on the right side of the GUI. ; $Left - Left pos ; $Top - Top pos. ; $Width - Width ; $Height - Height ; $BG_Color - [optional] Background color. Default is $GUIThemeColor. ; $Font_Color - [optional] Font color. Default is $FontThemeColor. ; $Font - [optional] Font. Default is "Segoe UI". ; $FontSize - [optional] Fontsize. Default is "11". ; Return values .: Handle to the toggle. ; =============================================================================================================================== Func _Metro_CreateToggleEX($Text, $Left, $Top, $Width, $Height, $BG_Color = $GUIThemeColor, $Font_Color = $FontThemeColor, $Font = "Segoe UI", $Fontsize = "11") Local $pDPI = _HighDPICheck(), $Text1 = $Text If $Height < 20 Then If (@Compiled = 0) Then MsgBox(48, "Metro UDF", "The min. height is 20px for metro toggles.") EndIf If $Width < 46 Then If (@Compiled = 0) Then MsgBox(48, "Metro UDF", "The min. width for metro toggles must be at least 46px without any text!") EndIf If Mod($Height, 2) <> 0 Then If (@Compiled = 0) Then MsgBox(48, "Metro UDF", "The toggle height should be an even number to prevent any misplacing.") EndIf ;HighDPI Support If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Width = Round($Width * $gDPI) $Height = Round($Height * $gDPI) If Mod($Height, 2) <> 0 Then $Height = $Height + 1 Else $Fontsize = ($Fontsize / $Font_DPI_Ratio) EndIf ;Create Toggle Array Local $Toggle_Array[16] $Toggle_Array[1] = False ; Hover $Toggle_Array[2] = False ; Checked State $Toggle_Array[3] = "6" ; Type $Toggle_Array[15] = GetCurrentGUI() ;calc pos/sizes Local $TopMargCalc = Number(20 * $pDPI, 1) If Mod($TopMargCalc, 2) <> 0 Then $TopMargCalc = $TopMargCalc + 1 Local $TopMargin = Number((($Height - $TopMargCalc) / 2), 1) Local $hFWidth = Number(50 * $pDPI, 1) If Mod($hFWidth, 2) <> 0 Then $hFWidth = $hFWidth + 1 Local $togSizeW = Number(46 * $pDPI, 1) If Mod($togSizeW, 2) <> 0 Then $togSizeW = $togSizeW + 1 Local $togSizeH = Number(20 * $pDPI, 1) If Mod($togSizeH, 2) <> 0 Then $togSizeH = $togSizeH + 1 Local $tog_calc1 = Number(2 * $pDPI, 1) Local $tog_calc2 = Number(3 * $pDPI, 1) Local $tog_calc3 = Number(11 * $pDPI, 1) Local $tog_calc5 = Number(6 * $pDPI, 1) ;Set Colors $BG_Color = "0xFF" & Hex($BG_Color, 6) $Font_Color = "0xFF" & Hex($Font_Color, 6) Local $Brush_BTN_FontColor = _GDIPlus_BrushCreateSolid($Font_Color) Local $Brush_BTN_FontColor1 = _GDIPlus_BrushCreateSolid(StringReplace($CB_Radio_Color, "0x", "0xFF")) If StringInStr($GUI_Theme_Name, "Light") Then Local $BoxFrameCol = StringReplace(_AlterBrightness($Font_Color, +45), "0x", "0xFF") Local $BoxFrameCol1 = StringReplace(_AlterBrightness($Font_Color, +35), "0x", "0xFF") Local $Font_Color1 = StringReplace(_AlterBrightness($Font_Color, +60), "0x", "0xFF") Else Local $BoxFrameCol = StringReplace(_AlterBrightness($Font_Color, -45), "0x", "0xFF") Local $BoxFrameCol1 = StringReplace(_AlterBrightness($Font_Color, -55), "0x", "0xFF") Local $Font_Color1 = StringReplace(_AlterBrightness($Font_Color, -30), "0x", "0xFF") EndIf ;Unchecked Local $Brush1 = _GDIPlus_BrushCreateSolid($BoxFrameCol) ;Inner Local $Brush2 = _GDIPlus_BrushCreateSolid($BoxFrameCol1) ;Outerframe Local $Brush3 = _GDIPlus_BrushCreateSolid($Font_Color1) ;InnerHover ;Checked Local $Brush4 = _GDIPlus_BrushCreateSolid(StringReplace($ButtonBKColor, "0x", "0xFF")) ;Inner Local $Brush5 = _GDIPlus_BrushCreateSolid(StringReplace(_AlterBrightness($ButtonBKColor, -10), "0x", "0xFF")) ;Outerframe Local $Brush6 = _GDIPlus_BrushCreateSolid(StringReplace(_AlterBrightness($ButtonBKColor, +15), "0x", "0xFF")) ;InnerHover ;Create graphics Local $Toggle_Graphic1 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5), $Toggle_Graphic2 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5), $Toggle_Graphic3 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5), $Toggle_Graphic4 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5), $Toggle_Graphic5 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5), $Toggle_Graphic6 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5), $Toggle_Graphic7 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5), $Toggle_Graphic8 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5), $Toggle_Graphic9 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5), $Toggle_Graphic10 = _iGraphicCreate($Width, $Height, $BG_Color, 0, 5) ;Set font Local $hFormat = _GDIPlus_StringFormatCreate(), $hFamily = _GDIPlus_FontFamilyCreate($Font), $hFont = _GDIPlus_FontCreate($hFamily, $Fontsize, 0) Local $tLayout = _GDIPlus_RectFCreate($hFWidth, 0, $Width - $hFWidth, $Height) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) ;Draw text If StringInStr($Text, "|@|") Then $Text1 = StringRegExp($Text, "\|@\|(.+)", 1) If Not @error Then $Text1 = $Text1[0] $Text = StringRegExp($Text, "^(.+)\|@\|", 1) If Not @error Then $Text = $Text[0] EndIf _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic1[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic2[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic3[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic4[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic5[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic6[0], $Text1, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic7[0], $Text1, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic8[0], $Text1, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic9[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Toggle_Graphic10[0], $Text1, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) ;Default state _GDIPlus_GraphicsFillRect($Toggle_Graphic1[0], 0, $TopMargin, $togSizeW, $togSizeH, $Brush2) ; Toggle Background _GDIPlus_GraphicsFillRect($Toggle_Graphic1[0], $tog_calc2, $TopMargin + $tog_calc2, $togSizeW - $tog_calc5, $togSizeH - $tog_calc5, $Brush1) ;Toggle Inner _GDIPlus_GraphicsFillRect($Toggle_Graphic1[0], 0, $TopMargin, $tog_calc3, $togSizeH, $Brush_BTN_FontColor1) ; Toggle Slider ;Default hover state _GDIPlus_GraphicsFillRect($Toggle_Graphic9[0], 0, $TopMargin, $togSizeW, $togSizeH, $Brush2) _GDIPlus_GraphicsFillRect($Toggle_Graphic9[0], $tog_calc2, $TopMargin + $tog_calc2, $togSizeW - $tog_calc5, $togSizeH - $tog_calc5, $Brush3) _GDIPlus_GraphicsFillRect($Toggle_Graphic9[0], 0, $TopMargin, $tog_calc3, $togSizeH, $Brush_BTN_FontColor1) ;CheckedStep1 _GDIPlus_GraphicsFillRect($Toggle_Graphic2[0], 0, $TopMargin, $togSizeW, $togSizeH, $Brush2) _GDIPlus_GraphicsFillRect($Toggle_Graphic2[0], $tog_calc2, $TopMargin + $tog_calc2, $togSizeW - $tog_calc5, $togSizeH - $tog_calc5, $Brush3) _GDIPlus_GraphicsFillRect($Toggle_Graphic2[0], 5 * $pDPI, $TopMargin, $tog_calc3, $togSizeH, $Brush_BTN_FontColor1) ;CheckedStep2 _GDIPlus_GraphicsFillRect($Toggle_Graphic3[0], 0, $TopMargin, $togSizeW, $togSizeH, $Brush2) _GDIPlus_GraphicsFillRect($Toggle_Graphic3[0], $tog_calc2, $TopMargin + $tog_calc2, $togSizeW - $tog_calc5, $togSizeH - $tog_calc5, $Brush3) _GDIPlus_GraphicsFillRect($Toggle_Graphic3[0], 10 * $pDPI, $TopMargin, $tog_calc3, $togSizeH, $Brush_BTN_FontColor1) ;CheckedStep3 _GDIPlus_GraphicsFillRect($Toggle_Graphic4[0], 0, $TopMargin, $togSizeW, $togSizeH, $Brush2) _GDIPlus_GraphicsFillRect($Toggle_Graphic4[0], $tog_calc2, $TopMargin + $tog_calc2, $togSizeW - $tog_calc5, $togSizeH - $tog_calc5, $Brush3) _GDIPlus_GraphicsFillRect($Toggle_Graphic4[0], 15 * $pDPI, $TopMargin, $tog_calc3, $togSizeH, $Brush_BTN_FontColor1) ;CheckedStep4 _GDIPlus_GraphicsFillRect($Toggle_Graphic5[0], 0, $TopMargin, $togSizeW, $togSizeH, $Brush5) _GDIPlus_GraphicsFillRect($Toggle_Graphic5[0], $tog_calc2, $TopMargin + $tog_calc2, $togSizeW - $tog_calc5, $togSizeH - $tog_calc5, $Brush6) _GDIPlus_GraphicsFillRect($Toggle_Graphic5[0], $togSizeH, $TopMargin, $tog_calc3, $togSizeH, $Brush_BTN_FontColor1) ;CheckedStep5 _GDIPlus_GraphicsFillRect($Toggle_Graphic6[0], 0, $TopMargin, $togSizeW, $togSizeH, $Brush5) _GDIPlus_GraphicsFillRect($Toggle_Graphic6[0], $tog_calc2, $TopMargin + $tog_calc2, $togSizeW - $tog_calc5, $togSizeH - $tog_calc5, $Brush6) _GDIPlus_GraphicsFillRect($Toggle_Graphic6[0], 25 * $pDPI, $TopMargin, $tog_calc3, $togSizeH, $Brush_BTN_FontColor1) ;CheckedStep6 _GDIPlus_GraphicsFillRect($Toggle_Graphic7[0], 0, $TopMargin, $togSizeW, $togSizeH, $Brush5) _GDIPlus_GraphicsFillRect($Toggle_Graphic7[0], $tog_calc2, $TopMargin + $tog_calc2, $togSizeW - $tog_calc5, $togSizeH - $tog_calc5, $Brush6) _GDIPlus_GraphicsFillRect($Toggle_Graphic7[0], 30 * $pDPI, $TopMargin, $tog_calc3, $togSizeH, $Brush_BTN_FontColor1) ;Final checked state _GDIPlus_GraphicsFillRect($Toggle_Graphic8[0], 0, $TopMargin, $togSizeW, $togSizeH, $Brush5) _GDIPlus_GraphicsFillRect($Toggle_Graphic8[0], $tog_calc2, $TopMargin + $tog_calc2, $togSizeW - $tog_calc5, $togSizeH - $tog_calc5, $Brush4) _GDIPlus_GraphicsFillRect($Toggle_Graphic8[0], $togSizeW - $tog_calc3, $TopMargin, $tog_calc3, $togSizeH, $Brush_BTN_FontColor1) ;Final checked state hover _GDIPlus_GraphicsFillRect($Toggle_Graphic10[0], 0, $TopMargin, $togSizeW, $togSizeH, $Brush5) _GDIPlus_GraphicsFillRect($Toggle_Graphic10[0], $tog_calc2, $TopMargin + $tog_calc2, $togSizeW - $tog_calc5, $togSizeH - $tog_calc5, $Brush6) _GDIPlus_GraphicsFillRect($Toggle_Graphic10[0], $togSizeW - $tog_calc3, $TopMargin, $tog_calc3, $togSizeH, $Brush_BTN_FontColor1) ;Release created objects _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($Brush_BTN_FontColor) _GDIPlus_BrushDispose($Brush_BTN_FontColor1) _GDIPlus_BrushDispose($Brush1) _GDIPlus_BrushDispose($Brush2) _GDIPlus_BrushDispose($Brush3) _GDIPlus_BrushDispose($Brush4) _GDIPlus_BrushDispose($Brush5) _GDIPlus_BrushDispose($Brush6) ;Create bitmap handles and set graphics $Toggle_Array[0] = GUICtrlCreatePic("", $Left, $Top, $Width, $Height) $Toggle_Array[5] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic1) $Toggle_Array[6] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic2, False) $Toggle_Array[7] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic3, False) $Toggle_Array[8] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic4, False) $Toggle_Array[9] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic5, False) $Toggle_Array[10] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic6, False) $Toggle_Array[11] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic7, False) $Toggle_Array[12] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic8, False) $Toggle_Array[13] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic9, False) $Toggle_Array[14] = _iGraphicCreateBitmapHandle($Toggle_Array[0], $Toggle_Graphic10, False) ;Set GUI Resizing GUICtrlSetResizing($Toggle_Array[0], 768) ;Add to GUI_HOVER_REG _cHvr_Register($Toggle_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Toggle_Array)) Return $Toggle_Array[0] EndFunc ;==>_Metro_CreateToggleEX ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateToggle ; Description ...: Creates a Windows 10 style on/off toggle with custom "enable/disable" text. ; Syntax ........: _Metro_CreateToggle($Text, $Left, $Top, $Width, $Height[, $BG_Color = $GUIThemeColor[, ; $Font_Color = $FontThemeColor[, $Font = "Segoe UI"[, $FontSize = "11"]]]]) ; Parameters ....: ; $OnText - Text to be displayed when the toggle is checked ; $OffText - Text to be displayed when the toggle is unchecked ; $Left - Left pos ; $Top - Top pos. ; $Width - Width ; $Height - Height ; $BG_Color - [optional] Background color. Default is $GUIThemeColor. ; $Font_Color - [optional] Font color. Default is $FontThemeColor. ; $Font - [optional] Font. Default is "Segoe UI". ; $FontSize - [optional] Fontsize. Default is "11". ; Return values .: Handle to the toggle. ; =============================================================================================================================== Func _Metro_CreateOnOffToggle($OnText, $OffText, $Left, $Top, $Width, $Height, $BG_Color = $GUIThemeColor, $Font_Color = $FontThemeColor, $Font = "Segoe UI", $Fontsize = "11") Return _Metro_CreateToggle($OffText & "|@|" & $OnText, $Left, $Top, $Width, $Height, $BG_Color, $Font_Color, $Font, $Fontsize) EndFunc ;==>_Metro_CreateOnOffToggle ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateToggleEx ; Description ...: Creates a Windows 8 style on/off toggle with custom "enable/disable" text. ; Syntax ........: _Metro_CreateToggle($Text, $Left, $Top, $Width, $Height[, $BG_Color = $GUIThemeColor[, ; $Font_Color = $FontThemeColor[, $Font = "Segoe UI"[, $FontSize = "11"]]]]) ; Parameters ....: ; $OnText - Text to be displayed when the toggle is checked ; $OffText - Text to be displayed when the toggle is unchecked ; $Left - Left pos ; $Top - Top pos. ; $Width - Width ; $Height - Height ; $BG_Color - [optional] Background color. Default is $GUIThemeColor. ; $Font_Color - [optional] Font color. Default is $FontThemeColor. ; $Font - [optional] Font. Default is "Segoe UI". ; $FontSize - [optional] Fontsize. Default is "11". ; Return values .: Handle to the toggle. ; =============================================================================================================================== Func _Metro_CreateOnOffToggleEx($OnText, $OffText, $Left, $Top, $Width, $Height, $BG_Color = $GUIThemeColor, $Font_Color = $FontThemeColor, $Font = "Segoe UI", $Fontsize = "11") Return _Metro_CreateToggleEX($OffText & "|@|" & $OnText, $Left, $Top, $Width, $Height, $BG_Color, $Font_Color, $Font, $Fontsize) EndFunc ;==>_Metro_CreateOnOffToggleEx ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_ToggleIsChecked ; Description ...: Checks if a toggle is checked ; Syntax ........: _Metro_ToggleIsChecked($Toggle) ; Parameters ....: $Toggle - Handle of the toggle. ; Return values .: True / False ; =============================================================================================================================== Func _Metro_ToggleIsChecked($Toggle) For $i = 0 To (UBound($iHoverReg) - 1) Step +1 If $iHoverReg[$i][0] = $Toggle Then If $iHoverReg[$i][2] Then Return True Else Return False EndIf EndIf Next EndFunc ;==>_Metro_ToggleIsChecked ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_ToggleSwitch ; Description ...: Triggers Toggle Check/Uncheck and returns the current state of the toggle. -> Should only be used to handle user clicks ; Syntax ........: _Metro_ToggleIsChecked($Toggle) ; Parameters ....: $Toggle - Handle of the toggle. ; Return values .: True / False (State = Checked / Unchecked) ; =============================================================================================================================== Func _Metro_ToggleSwitch($Toggle) If _Metro_ToggleIsChecked($Toggle) Then _Metro_ToggleUnCheck($Toggle) Return False Else _Metro_ToggleCheck($Toggle) Return True EndIf EndFunc ;==>_Metro_ToggleSwitch ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_ToggleUnCheck ; Description ...: Unchecks a toggle ; Syntax ........: _Metro_ToggleUnCheck($Toggle[, $NoAnimation = False]) ; Parameters ....: $Toggle - Handle to the toggle ; $NoAnimation - [optional] True/False. Default is False. - Unchecks the toggle instantly without animation ; =============================================================================================================================== Func _Metro_ToggleUnCheck($Toggle, $NoAnimation = False) For $i = 0 To (UBound($iHoverReg) - 1) Step +1 If $iHoverReg[$i][0] = $Toggle Then If $iHoverReg[$i][2] Then If Not $NoAnimation Then For $i2 = 12 To 6 Step -1 _WinAPI_DeleteObject(GUICtrlSendMsg($Toggle, 0x0172, 0, $iHoverReg[$i][$i2])) Sleep(1) Next _WinAPI_DeleteObject(GUICtrlSendMsg($Toggle, 0x0172, 0, $iHoverReg[$i][13])) Else _WinAPI_DeleteObject(GUICtrlSendMsg($Toggle, 0x0172, 0, $iHoverReg[$i][13])) EndIf $iHoverReg[$i][1] = True $iHoverReg[$i][2] = False ExitLoop EndIf EndIf Next EndFunc ;==>_Metro_ToggleUnCheck ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_ToggleCheck ; Description ...: Checks a toggle ; Syntax ........: _Metro_ToggleCheck($Toggle[, $NoAnimation = False]) ; Parameters ....: $Toggle - Handle to the toggle. ; $NoAnimation - [optional] True/False. Default is False. - Checks the Toggle instantly without an animation and prevents hover effect from getting stuck. Should be used always when creating a gui with a checked toggle before the gui is shown. ; =============================================================================================================================== Func _Metro_ToggleCheck($Toggle, $NoAnimation = False) For $i = 0 To (UBound($iHoverReg) - 1) Step +1 If $iHoverReg[$i][0] = $Toggle Then If Not $iHoverReg[$i][2] Then If Not $NoAnimation Then For $i2 = 6 To 11 Step +1 _WinAPI_DeleteObject(GUICtrlSendMsg($Toggle, 0x0172, 0, $iHoverReg[$i][$i2])) Sleep(1) Next _WinAPI_DeleteObject(GUICtrlSendMsg($Toggle, 0x0172, 0, $iHoverReg[$i][12])) Else _WinAPI_DeleteObject(GUICtrlSendMsg($Toggle, 0x0172, 0, $iHoverReg[$i][12])) EndIf $iHoverReg[$i][2] = True $iHoverReg[$i][1] = True ExitLoop EndIf EndIf Next EndFunc ;==>_Metro_ToggleCheck #EndRegion Metro Toggles=========================================================================================== #Region MetroRadio=========================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateRadio ; Description ...: Creates a metro style radio. ; Syntax ........: _Metro_CreateRadio($RadioGroup, $Text, $Left, $Top, $Width, $Height[, $BG_Color = $GUIThemeColor[, ; $Font_Color = $FontThemeColor[, $Font = "Segoe UI"[, $FontSize = "11"[, $FontStyle = 0]]]]]) ; Parameters ....: $RadioGroup - A radiogroup to assign the radio to. You can use numbers or any text. ; $Text - Text. ; $Left - Left pos. ; $Top - Top pos. ; $Width - Width. ; $Height - Height. ; $BG_Color - [optional] Background color. Default is $GUIThemeColor. ; $Font_Color - [optional] Font color. Default is $FontThemeColor. ; $Font - [optional] Font. Default is "Segoe UI". ; $FontSize - [optional] Fontsize. Default is "11". ; $FontStyle - [optional] Fontstyle. Default is 0. ; $$RadioCircleSize - [optional] Custom circle size for radio. ; Return values .: Handle to the radio. ; =============================================================================================================================== Func _Metro_CreateRadio($RadioGroup, $Text, $Left, $Top, $Width, $Height, $BG_Color = $GUIThemeColor, $Font_Color = $FontThemeColor, $Font = "Segoe UI", $Fontsize = "11", $FontStyle = 0, $RadioCircleSize = 22, $ExStyle = False) If $Height < 22 And $RadioCircleSize > 21 Then If (@Compiled = 0) Then MsgBox(48, "Metro UDF", "The min. height is 22px for metro radios.") EndIf ;HighDPI Support Local $rDPI = _HighDPICheck() If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Width = Round($Width * $gDPI) $Height = Round($Height * $gDPI) If Mod($Width, 2) <> 0 Then $Width = $Width - 1 If Mod($Height, 2) <> 0 Then $Height = $Height - 1 $RadioCircleSize = $RadioCircleSize * $gDPI If Mod($RadioCircleSize, 2) <> 0 Then $RadioCircleSize = $RadioCircleSize - 1 Else $Fontsize = ($Fontsize / $Font_DPI_Ratio) EndIf Local $Radio_Array[16] $Radio_Array[1] = False ; Hover $Radio_Array[2] = False ; Checkmark $Radio_Array[3] = "7" ; Type $Radio_Array[4] = $RadioGroup ; Radiogroup $Radio_Array[15] = GetCurrentGUI() ;Set position Local $TopMargin = ($Height - $RadioCircleSize) / 2 ;Set Colors If $BG_Color <> 0 Then $BG_Color = "0xFF" & Hex($BG_Color, 6) $Font_Color = "0xFF" & Hex($Font_Color, 6) Local $Brush_BTN_FontColor = _GDIPlus_BrushCreateSolid($Font_Color) Local $BoxFrameCol = StringReplace($CB_Radio_Hover_Color, "0x", "0xFF") Local $Brush1 = _GDIPlus_BrushCreateSolid(StringReplace($CB_Radio_Color, "0x", "0xFF")) If $ExStyle Then Local $Brush2 = _GDIPlus_BrushCreateSolid(StringReplace($ButtonBKColor, "0x", "0xFF")) Else Local $Brush2 = _GDIPlus_BrushCreateSolid(StringReplace($CB_Radio_CheckMark_Color, "0x", "0xFF")) EndIf Local $Brush3 = _GDIPlus_BrushCreateSolid(StringReplace($CB_Radio_Hover_Color, "0x", "0xFF")) ;Create graphics Local $Radio_Graphic1 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;default state Local $Radio_Graphic2 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;checked state Local $Radio_Graphic3 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;default hover state Local $Radio_Graphic4 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;checked hover state ;Create font, Set font options Local $hFormat = _GDIPlus_StringFormatCreate(), $hFamily = _GDIPlus_FontFamilyCreate($Font), $hFont = _GDIPlus_FontCreate($hFamily, $Fontsize, $FontStyle) Local $tLayout = _GDIPlus_RectFCreate($RadioCircleSize + (4 * $rDPI), 0, $Width - $RadioCircleSize + (4 * $rDPI), $Height) _GDIPlus_StringFormatSetAlign($hFormat, 0) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) $tLayout.Y = 1 ;Draw radio text _GDIPlus_GraphicsDrawStringEx($Radio_Graphic1[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Radio_Graphic2[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Radio_Graphic3[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Radio_Graphic4[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) ;Add Circle Background Local $radSize1 = 1 * $rDPI Local $radSize2 = 5 * $rDPI Local $radSize3 = 11 * $rDPI ;Default state _GDIPlus_GraphicsFillEllipse($Radio_Graphic1[0], 0, $TopMargin, $RadioCircleSize - $radSize1, $RadioCircleSize - $radSize1, $Brush1) ;Default hover state _GDIPlus_GraphicsFillEllipse($Radio_Graphic3[0], 0, $TopMargin, $RadioCircleSize - $radSize1, $RadioCircleSize - $radSize1, $Brush3) ;Checked state _GDIPlus_GraphicsFillEllipse($Radio_Graphic2[0], 0, $TopMargin, $RadioCircleSize - $radSize1, $RadioCircleSize - $radSize1, $Brush1) _GDIPlus_GraphicsFillEllipse($Radio_Graphic2[0], $radSize2, $TopMargin + $radSize2, $RadioCircleSize - $radSize3, $RadioCircleSize - $radSize3, $Brush2) ;Checked hover state _GDIPlus_GraphicsFillEllipse($Radio_Graphic4[0], 0, $TopMargin, $RadioCircleSize - $radSize1, $RadioCircleSize - $radSize1, $Brush3) _GDIPlus_GraphicsFillEllipse($Radio_Graphic4[0], $radSize2, $TopMargin + $radSize2, $RadioCircleSize - $radSize3, $RadioCircleSize - $radSize3, $Brush2) ;Release created objects _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($Brush_BTN_FontColor) _GDIPlus_BrushDispose($Brush1) _GDIPlus_BrushDispose($Brush2) _GDIPlus_BrushDispose($Brush3) ;Create bitmap handles and set graphics $Radio_Array[0] = GUICtrlCreatePic("", $Left, $Top, $Width, $Height) $Radio_Array[5] = _iGraphicCreateBitmapHandle($Radio_Array[0], $Radio_Graphic1) $Radio_Array[7] = _iGraphicCreateBitmapHandle($Radio_Array[0], $Radio_Graphic2, False) $Radio_Array[6] = _iGraphicCreateBitmapHandle($Radio_Array[0], $Radio_Graphic3, False) $Radio_Array[8] = _iGraphicCreateBitmapHandle($Radio_Array[0], $Radio_Graphic4, False) ;Set GUI Resizing GUICtrlSetResizing($Radio_Array[0], 768) ;Add Hover effects _cHvr_Register($Radio_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Radio_Array)) Return $Radio_Array[0] EndFunc ;==>_Metro_CreateRadio ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateRadioEx ; Description ...: Creates a metro style radio with colored checkmark. ; Syntax ........: _Metro_CreateRadio($RadioGroup, $Text, $Left, $Top, $Width, $Height[, $BG_Color = $GUIThemeColor[, ; $Font_Color = $FontThemeColor[, $Font = "Segoe UI"[, $FontSize = "11"[, $FontStyle = 0]]]]]) ; Parameters ....: $RadioGroup - A radiogroup to assign the radio to. You can use numbers or any text. ; $Text - Text. ; $Left - Left pos. ; $Top - Top pos. ; $Width - Width. ; $Height - Height. ; $BG_Color - [optional] Background color. Default is $GUIThemeColor. ; $Font_Color - [optional] Font color. Default is $FontThemeColor. ; $Font - [optional] Font. Default is "Segoe UI". ; $FontSize - [optional] Fontsize. Default is "11". ; $FontStyle - [optional] Fontstyle. Default is 0. ; $$RadioCircleSize - [optional] Custom circle size for radio. ; Return values .: Handle to the radio. ; =============================================================================================================================== Func _Metro_CreateRadioEx($RadioGroup, $Text, $Left, $Top, $Width, $Height, $BG_Color = $GUIThemeColor, $Font_Color = $FontThemeColor, $Font = "Segoe UI", $Fontsize = "11", $FontStyle = 0, $RadioCircleSize = 22) Return _Metro_CreateRadio($RadioGroup, $Text, $Left, $Top, $Width, $Height, $BG_Color, $Font_Color, $Font, $Fontsize, $FontStyle, $RadioCircleSize, True) EndFunc ;==>_Metro_CreateRadioEx ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_RadioCheck ; Description ...: Checks the selected radio and unchecks all other radios in the same radiogroup. ; Syntax ........: _Metro_RadioCheck($RadioGroup, $Radio) ; Parameters ....: $RadioGroup - The group that the radio has been assigned to. ; $Radio - Handle to the radio. ; $NoHoverEffect - Default = False, True = Prevents the hover effect from appearing/freezing -> Should be used anytime the radio is not "clicked" by the user but checked manually during startup ; =============================================================================================================================== Func _Metro_RadioCheck($RadioGroup, $Radio, $NoHoverEffect = False) For $i = 0 To (UBound($iHoverReg) - 1) Step +1 If $iHoverReg[$i][0] = $Radio Then $iHoverReg[$i][1] = True $iHoverReg[$i][2] = True If $NoHoverEffect Then _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$i][0], 0x0172, 0, $iHoverReg[$i][7])) Else _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$i][0], 0x0172, 0, $iHoverReg[$i][8])) EndIf Else If $iHoverReg[$i][4] = $RadioGroup Then $iHoverReg[$i][2] = False _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$i][0], 0x0172, 0, $iHoverReg[$i][5])) EndIf EndIf Next EndFunc ;==>_Metro_RadioCheck #EndRegion MetroRadio=========================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_RadioIsChecked ; Description ...: Checks if a metro radio is checked. ; Syntax ........: _Metro_RadioIsChecked($RadioGroup, $Radio) ; Parameters ....: $RadioGroup - Radio group ; $Radio - Handle to the radio ; Return values .: True / False ; =============================================================================================================================== Func _Metro_RadioIsChecked($RadioGroup, $Radio) For $i = 0 To (UBound($iHoverReg) - 1) Step +1 If $iHoverReg[$i][0] = $Radio Then If $iHoverReg[$i][4] = $RadioGroup Then If $iHoverReg[$i][2] Then Return True Else Return False EndIf EndIf EndIf Next Return False EndFunc ;==>_Metro_RadioIsChecked #Region MetroCheckbox=========================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateCheckbox ; Description ...: Creates a metro style checkbox ; Syntax ........: _Metro_CreateCheckbox($Text, $Left, $Top, $Width, $Height[, $BG_Color = $GUIThemeColor[, ; $Font_Color = $FontThemeColor[, $Font = "Segoe UI"[, $FontSize = "11"[, $FontStyle = 0]]]]]) ; Parameters ....: $Text - Text. ; $Left - Left pos. ; $Top - Top pos. ; $Width - Width. ; $Height - Height. ; $BG_Color - [optional] Background color. Default is $GUIThemeColor. ; $Font_Color - [optional] Font color. Default is $FontThemeColor. ; $Font - [optional] Font. Default is "Segoe UI". ; $FontSize - [optional] Fontsize. Default is "11". ; $FontStyle - [optional] Fontstyle. Default is 0. ; $cb_style - [optional] Creates a checkbox with the old design. You can also use _Metro_CreateCheckboxEx to do so. ; Return values .: Handle to the Checkbox ; =============================================================================================================================== Func _Metro_CreateCheckbox($Text, $Left, $Top, $Width, $Height, $BG_Color = $GUIThemeColor, $Font_Color = $FontThemeColor, $Font = "Segoe UI", $Fontsize = "11", $FontStyle = 0, $cb_style = 1) If $Height < 24 Then If (@Compiled = 0) Then MsgBox(48, "Metro UDF", "The min. height is 24px for metro checkboxes.") EndIf ;HighDPI Support Local $chDPI = _HighDPICheck() If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Width = Round($Width * $gDPI) $Height = Round($Height * $gDPI) If Mod($Width, 2) <> 0 Then $Width = $Width + 1 Else $Fontsize = ($Fontsize / $Font_DPI_Ratio) EndIf Local $Checkbox_Array[16] $Checkbox_Array[1] = False ; Hover $Checkbox_Array[2] = False ; Checkmark $Checkbox_Array[3] = "5" ; Type $Checkbox_Array[15] = GetCurrentGUI() ;Calc Box position etc. Local $chbh = Round(22 * $chDPI) Local $TopMargin = ($Height - $chbh) / 2 Local $CheckBox_Text_Margin = $chbh + ($TopMargin * 1.3) Local $FrameSize If $cb_style = 0 Then $FrameSize = $chbh / 7 Else $FrameSize = $chbh / 8 EndIf Local $BoxFrameSize = 2 ;Set Colors, Create Brushes and Pens If $BG_Color <> 0 Then $BG_Color = "0xFF" & Hex($BG_Color, 6) EndIf $Font_Color = "0xFF" & Hex($Font_Color, 6) Local $Brush_BTN_FontColor = _GDIPlus_BrushCreateSolid($Font_Color) If $cb_style = 0 Then Local $Brush1 = _GDIPlus_BrushCreateSolid(StringReplace($CB_Radio_Color, "0x", "0xFF")) ;default Local $Brush3 = $Brush1 Local $Brush2 = _GDIPlus_BrushCreateSolid(StringReplace($CB_Radio_Hover_Color, "0x", "0xFF")) ;default hover Local $Brush4 = $Brush2 ;checked hover Local $PenX = _GDIPlus_PenCreate(StringReplace($CB_Radio_CheckMark_Color, "0x", "0xFF"), $FrameSize) ;CheckmarkColor Else Local $Brush1 = _GDIPlus_BrushCreateSolid(StringReplace($CB_Radio_Color, "0x", "0xFF")) ;default Local $Brush2 = _GDIPlus_BrushCreateSolid(StringReplace($CB_Radio_Hover_Color, "0x", "0xFF")) ;default hover Local $Brush3 = _GDIPlus_BrushCreateSolid(StringReplace($ButtonBKColor, "0x", "0xFF")) ;checked Local $Brush4 = _GDIPlus_BrushCreateSolid(StringReplace(_AlterBrightness($ButtonBKColor, +10), "0x", "0xFF")) ;checked hover Local $PenX = _GDIPlus_PenCreate(StringReplace($CB_Radio_Color, "0x", "0xFF"), $FrameSize) ;CheckmarkColor EndIf ;Create graphics Local $Checkbox_Graphic1 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;default state Local $Checkbox_Graphic2 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;checked state Local $Checkbox_Graphic3 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;default hover state Local $Checkbox_Graphic4 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;checked hover state ;Create font, Set font options Local $hFormat = _GDIPlus_StringFormatCreate(), $hFamily = _GDIPlus_FontFamilyCreate($Font), $hFont = _GDIPlus_FontCreate($hFamily, $Fontsize, $FontStyle) Local $tLayout = _GDIPlus_RectFCreate($CheckBox_Text_Margin, 0, $Width - $CheckBox_Text_Margin, $Height) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) $tLayout.Y = 1 ;Draw checkbox text _GDIPlus_GraphicsDrawStringEx($Checkbox_Graphic1[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Checkbox_Graphic2[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Checkbox_Graphic3[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Checkbox_Graphic4[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) ;Draw rounded box Local $iRadius = Round(2 * $chDPI) Local $hPath = _GDIPlus_PathCreate() _GDIPlus_PathAddArc($hPath, $chbh - ($iRadius * 2), $TopMargin, $iRadius * 2, $iRadius * 2, 270, 90) _GDIPlus_PathAddArc($hPath, $chbh - ($iRadius * 2), $TopMargin + $chbh - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 0, 90) _GDIPlus_PathAddArc($hPath, 0, $TopMargin + $chbh - ($iRadius * 2), $iRadius * 2, $iRadius * 2, 90, 90) _GDIPlus_PathAddArc($hPath, 0, $TopMargin, $iRadius * 2, $iRadius * 2, 180, 90) _GDIPlus_PathCloseFigure($hPath) _GDIPlus_GraphicsFillPath($Checkbox_Graphic1[0], $hPath, $Brush1) ;Default state _GDIPlus_GraphicsFillPath($Checkbox_Graphic3[0], $hPath, $Brush2) ;Default hover state _GDIPlus_GraphicsFillPath($Checkbox_Graphic2[0], $hPath, $Brush3) ;Checked state _GDIPlus_GraphicsFillPath($Checkbox_Graphic4[0], $hPath, $Brush4) ;Checked hover state ;Calc size+pos Local $Cutpoint = ($FrameSize * 0.70) / 2 Local $mpX = $chbh / 2.60 Local $mpY = $TopMargin + $chbh / 1.3 Local $apos1 = cAngle($mpX - $Cutpoint, $mpY, 135, $chbh / 1.35) Local $apos2 = cAngle($mpX, $mpY - $Cutpoint, 225, $chbh / 3) ;Add check mark _GDIPlus_GraphicsDrawLine($Checkbox_Graphic2[0], $mpX - $Cutpoint, $mpY, $apos1[0], $apos1[1], $PenX) ;r _GDIPlus_GraphicsDrawLine($Checkbox_Graphic2[0], $mpX, $mpY - $Cutpoint, $apos2[0], $apos2[1], $PenX) ;l _GDIPlus_GraphicsDrawLine($Checkbox_Graphic4[0], $mpX - $Cutpoint, $mpY, $apos1[0], $apos1[1], $PenX) _GDIPlus_GraphicsDrawLine($Checkbox_Graphic4[0], $mpX, $mpY - $Cutpoint, $apos2[0], $apos2[1], $PenX) ;Release created objects _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($Brush_BTN_FontColor) _GDIPlus_BrushDispose($Brush1) _GDIPlus_BrushDispose($Brush2) _GDIPlus_BrushDispose($Brush3) _GDIPlus_BrushDispose($Brush4) _GDIPlus_PenDispose($PenX) ;Create bitmap handles and set graphics $Checkbox_Array[0] = GUICtrlCreatePic("", $Left, $Top, $Width, $Height) $Checkbox_Array[5] = _iGraphicCreateBitmapHandle($Checkbox_Array[0], $Checkbox_Graphic1) $Checkbox_Array[7] = _iGraphicCreateBitmapHandle($Checkbox_Array[0], $Checkbox_Graphic2, False) $Checkbox_Array[6] = _iGraphicCreateBitmapHandle($Checkbox_Array[0], $Checkbox_Graphic3, False) $Checkbox_Array[8] = _iGraphicCreateBitmapHandle($Checkbox_Array[0], $Checkbox_Graphic4, False) ;For GUI Resizing GUICtrlSetResizing($Checkbox_Array[0], 768) _cHvr_Register($Checkbox_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Checkbox_Array)) Return $Checkbox_Array[0] EndFunc ;==>_Metro_CreateCheckbox ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateCheckboxEx ; Description ...: Creates a checkbox with the old black and white style. ; Syntax ........: _Metro_CreateCheckboxEx($Text, $Left, $Top, $Width, $Height[, $BG_Color = $GUIThemeColor[, $Font_Color = $FontThemeColor[, ; $Font = "Segoe UI"[, $Fontsize = "11"[, $FontStyle = 0[, $cb_style = 1]]]]]]) ; Parameters ....: $Text - Text. ; $Left - Left pos. ; $Top - Top pos. ; $Width - Width. ; $Height - Height. ; $BG_Color - [optional] Background color. Default is $GUIThemeColor. ; $Font_Color - [optional] Font color. Default is $FontThemeColor. ; $Font - [optional] Font. Default is "Segoe UI". ; $FontSize - [optional] Fontsize. Default is "11". ; $FontStyle - [optional] Fontstyle. Default is 0. ; Return values .: Handle to the Checkbox ; =============================================================================================================================== Func _Metro_CreateCheckboxEx($Text, $Left, $Top, $Width, $Height, $BG_Color = $GUIThemeColor, $Font_Color = $FontThemeColor, $Font = "Segoe UI", $Fontsize = "11", $FontStyle = 0) Return _Metro_CreateCheckbox($Text, $Left, $Top, $Width, $Height, $BG_Color, $Font_Color, $Font, $Fontsize, $FontStyle, 0) EndFunc ;==>_Metro_CreateCheckboxEx ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateCheckboxEx2 ; Description ...: Creates a modern rounded checkbox ; Syntax ........: _Metro_CreateCheckboxEx2($Text, $Left, $Top, $Width, $Height[, $BG_Color = $GUIThemeColor[, ; $Font_Color = $FontThemeColor[, $Font = "Segoe UI"[, $FontSize = "11"[, $FontStyle = 0]]]]]) ; Parameters ....: $Text - Text. ; $Left - Left pos. ; $Top - Top pos. ; $Width - Width. ; $Height - Height. ; $BG_Color - [optional] Background color. Default is $GUIThemeColor. ; $Font_Color - [optional] Font color. Default is $FontThemeColor. ; $Font - [optional] Font. Default is "Segoe UI". ; $FontSize - [optional] Fontsize. Default is "11". ; $FontStyle - [optional] Fontstyle. Default is 0. ; Return values .: Handle to the Checkbox ; =============================================================================================================================== Func _Metro_CreateCheckboxEx2($Text, $Left, $Top, $Width, $Height, $BG_Color = $GUIThemeColor, $Font_Color = $FontThemeColor, $Font = "Segoe UI", $Fontsize = "11", $FontStyle = 0) If $Height < 24 Then If (@Compiled = 0) Then MsgBox(48, "Metro UDF", "The min. height is 24px for metro checkboxes.") EndIf ;HighDPI Support Local $chDPI = _HighDPICheck() If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Width = Round($Width * $gDPI) $Height = Round($Height * $gDPI) If Mod($Width, 2) <> 0 Then $Width = $Width + 1 Else $Fontsize = ($Fontsize / $Font_DPI_Ratio) EndIf Local $Checkbox_Array[16] $Checkbox_Array[1] = False ; Hover $Checkbox_Array[2] = False ; Checkmark $Checkbox_Array[3] = "5" ; Type $Checkbox_Array[15] = GetCurrentGUI() ;Calc Box position etc. Local $chbh = Round(24 * $chDPI) Local $TopMargin = ($Height - $chbh) / 2 Local $CheckBox_Text_Margin = $chbh + ($TopMargin * 1.3) Local $FrameSize = $chbh / 15 Local $BoxFrameSize = 2 ;Set Colors, Create Brushes and Pens If $BG_Color <> 0 Then $BG_Color = "0xFF" & Hex($BG_Color, 6) EndIf $Font_Color = "0xFF" & Hex($Font_Color, 6) Local $Brush_BTN_FontColor = _GDIPlus_BrushCreateSolid($Font_Color) If StringInStr($GUI_Theme_Name, "Light") Then Local $Pen1 = _GDIPlus_PenCreate(StringReplace(_AlterBrightness($GUIThemeColor, -100), "0x", "0xFF"), $FrameSize) Else Local $Pen1 = _GDIPlus_PenCreate(StringReplace(_AlterBrightness($GUIThemeColor, +85), "0x", "0xFF"), $FrameSize) EndIf Local $Pen2 = _GDIPlus_PenCreate(StringReplace($Font_Color, "0x", "0xFF"), $FrameSize) ;checked Local $Brush3 = _GDIPlus_BrushCreateSolid(StringReplace($ButtonBKColor, "0x", "0xFF")) ;checked Local $Brush4 = _GDIPlus_BrushCreateSolid(StringReplace(_AlterBrightness($ButtonBKColor, +10), "0x", "0xFF")) ;checked hover Local $PenX = _GDIPlus_PenCreate(StringReplace($CB_Radio_Color, "0x", "0xFF"), $FrameSize) ;CheckmarkColor ;Create graphics Local $Checkbox_Graphic1 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;default state Local $Checkbox_Graphic2 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;checked state Local $Checkbox_Graphic3 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;default hover state Local $Checkbox_Graphic4 = _iGraphicCreate($Width, $Height, $BG_Color, 5, 5) ;checked hover state ;Create font, Set font options Local $hFormat = _GDIPlus_StringFormatCreate(), $hFamily = _GDIPlus_FontFamilyCreate($Font), $hFont = _GDIPlus_FontCreate($hFamily, $Fontsize, $FontStyle) Local $tLayout = _GDIPlus_RectFCreate($CheckBox_Text_Margin, 0, $Width - $CheckBox_Text_Margin, $Height) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) $tLayout.Y = 1 ;Draw checkbox text _GDIPlus_GraphicsDrawStringEx($Checkbox_Graphic1[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Checkbox_Graphic2[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Checkbox_Graphic3[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) _GDIPlus_GraphicsDrawStringEx($Checkbox_Graphic4[0], $Text, $hFont, $tLayout, $hFormat, $Brush_BTN_FontColor) ;Draw rounded box _GDIPlus_GraphicsDrawEllipse($Checkbox_Graphic1[0], 0 + ($FrameSize / 2), $TopMargin + ($FrameSize / 2), $chbh - ($FrameSize), $chbh - ($FrameSize), $Pen1) ;Default state _GDIPlus_GraphicsDrawEllipse($Checkbox_Graphic3[0], 0 + ($FrameSize / 2), $TopMargin + ($FrameSize / 2), $chbh - ($FrameSize), $chbh - ($FrameSize), $Pen2) ;Default hover state _GDIPlus_GraphicsFillEllipse($Checkbox_Graphic2[0], 0, $TopMargin, $chbh, $chbh, $Brush3) ;Checked state _GDIPlus_GraphicsFillEllipse($Checkbox_Graphic4[0], 0, $TopMargin, $chbh, $chbh, $Brush4) ;Checked hover state ;Calc size+pos Local $Cutpoint = ($FrameSize * 0.70) / 2 Local $mpX = $chbh / 2.4 Local $mpY = $TopMargin + $chbh / 1.45 Local $apos1 = cAngle($mpX - $Cutpoint, $mpY, 135, $chbh / 2) Local $apos2 = cAngle($mpX, $mpY - $Cutpoint, 225, $chbh / 4.3) ;Add check mark _GDIPlus_GraphicsDrawLine($Checkbox_Graphic2[0], $mpX - $Cutpoint, $mpY, $apos1[0], $apos1[1], $PenX) ;r _GDIPlus_GraphicsDrawLine($Checkbox_Graphic2[0], $mpX, $mpY - $Cutpoint, $apos2[0], $apos2[1], $PenX) ;l _GDIPlus_GraphicsDrawLine($Checkbox_Graphic4[0], $mpX - $Cutpoint, $mpY, $apos1[0], $apos1[1], $PenX) _GDIPlus_GraphicsDrawLine($Checkbox_Graphic4[0], $mpX, $mpY - $Cutpoint, $apos2[0], $apos2[1], $PenX) _GDIPlus_GraphicsDrawLine($Checkbox_Graphic1[0], $mpX - $Cutpoint, $mpY, $apos1[0], $apos1[1], $Pen1) ;r _GDIPlus_GraphicsDrawLine($Checkbox_Graphic1[0], $mpX, $mpY - $Cutpoint, $apos2[0], $apos2[1], $Pen1) ;l _GDIPlus_GraphicsDrawLine($Checkbox_Graphic3[0], $mpX - $Cutpoint, $mpY, $apos1[0], $apos1[1], $Pen2) _GDIPlus_GraphicsDrawLine($Checkbox_Graphic3[0], $mpX, $mpY - $Cutpoint, $apos2[0], $apos2[1], $Pen2) ;Release created objects _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($Brush_BTN_FontColor) _GDIPlus_BrushDispose($Pen1) _GDIPlus_BrushDispose($Pen2) _GDIPlus_BrushDispose($Brush3) _GDIPlus_BrushDispose($Brush4) _GDIPlus_PenDispose($PenX) ;Create bitmap handles and set graphics $Checkbox_Array[0] = GUICtrlCreatePic("", $Left, $Top, $Width, $Height) $Checkbox_Array[5] = _iGraphicCreateBitmapHandle($Checkbox_Array[0], $Checkbox_Graphic1) $Checkbox_Array[7] = _iGraphicCreateBitmapHandle($Checkbox_Array[0], $Checkbox_Graphic2, False) $Checkbox_Array[6] = _iGraphicCreateBitmapHandle($Checkbox_Array[0], $Checkbox_Graphic3, False) $Checkbox_Array[8] = _iGraphicCreateBitmapHandle($Checkbox_Array[0], $Checkbox_Graphic4, False) ;For GUI Resizing GUICtrlSetResizing($Checkbox_Array[0], 768) _cHvr_Register($Checkbox_Array[0], "_iHoverOff", "_iHoverOn", "", "", _iAddHover($Checkbox_Array)) Return $Checkbox_Array[0] EndFunc ;==>_Metro_CreateCheckboxEx2 ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CheckboxIsChecked ; Description ...: Checks if a metro checkbox is checked. ; Syntax ........: _Metro_CheckboxIsChecked($Checkbox) ; Parameters ....: $Checkbox - Handle to the checkbox. ; Return values .: True / False ; =============================================================================================================================== Func _Metro_CheckboxIsChecked($Checkbox) For $i = 0 To (UBound($iHoverReg) - 1) Step +1 If $iHoverReg[$i][0] = $Checkbox Then If $iHoverReg[$i][2] Then Return True Else Return False EndIf EndIf Next EndFunc ;==>_Metro_CheckboxIsChecked ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CheckboxUnCheck ; Description ...: Unchecks a metro checkbox ; Syntax ........: _Metro_CheckboxUnCheck($Checkbox,) ; Parameters ....: $Checkbox - Handle to the Checkbox. ; =============================================================================================================================== Func _Metro_CheckboxUnCheck($Checkbox) For $i = 0 To (UBound($iHoverReg) - 1) Step +1 If $iHoverReg[$i][0] = $Checkbox Then $iHoverReg[$i][2] = False $iHoverReg[$i][1] = True _WinAPI_DeleteObject(GUICtrlSendMsg($Checkbox, 0x0172, 0, $iHoverReg[$i][6])) EndIf Next EndFunc ;==>_Metro_CheckboxUnCheck ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CheckboxCheck ; Description ...: Checks a metro checkbox ; Syntax ........: _Metro_CheckboxCheck($Checkbox, $NoHoverEffect = False) ; Parameters ....: $Checkbox - Handle to the Checkbox. ; $NoHoverEffect - Default = False, True = Prevents the hover effect from appearing/freezing -> Should be used anytime the checkbox is not "clicked" by the user but checked manually during startup ; =============================================================================================================================== Func _Metro_CheckboxCheck($Checkbox, $NoHoverEffect = False) For $i = 0 To (UBound($iHoverReg) - 1) Step +1 If $iHoverReg[$i][0] = $Checkbox Then $iHoverReg[$i][2] = True $iHoverReg[$i][1] = True If $NoHoverEffect Then _WinAPI_DeleteObject(GUICtrlSendMsg($Checkbox, 0x0172, 0, $iHoverReg[$i][7])) Else _WinAPI_DeleteObject(GUICtrlSendMsg($Checkbox, 0x0172, 0, $iHoverReg[$i][8])) EndIf EndIf Next EndFunc ;==>_Metro_CheckboxCheck ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CheckboxSwitch ; Description ...: Toggles between checked/unchecked state and then returns the current state. -> Should only be used to handle user clicks ; Syntax ........: _Metro_CheckboxSwitch($Checkbox) ; Parameters ....: $Checkbox - Handle to the Checkbox. ; Returns ---------: True = Checkbox is checked, False = Checkbox is not checked. ; =============================================================================================================================== Func _Metro_CheckboxSwitch($Checkbox) If _Metro_CheckboxIsChecked($Checkbox) Then _Metro_CheckboxUnCheck($Checkbox) Return False Else _Metro_CheckboxCheck($Checkbox) Return True EndIf EndFunc ;==>_Metro_CheckboxSwitch #EndRegion MetroCheckbox=========================================================================================== #Region Metro MsgBox=========================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_MsgBox ; Description ...: Creates a metro style MsgBox ; Syntax ........: _Metro_MsgBox($Flag, $Title, $Text[, $mWidth = 600[, $FontSize = 14[, $ParentGUI = "", $Timeout = 0]]]) ; Parameters ....: $Flag - Flag / Possible button combinations - See Autoit help file for possible buttons combinations under MsgBox ; $Title - Title of the MsgBox. ; $Text - Text of the MsgBox. ; $mWidth - [optional] Width of the MsgBox. Use a value that matches the text length and font size. Default is 600. ; $FontSize - [optional] Fontsize. Default is 11. ; $ParentGUI - [optional] Parent GUI/Window to prevent multiple open windows in the taskbar for one program. Default is "". ; $Timeout - [optional] Timeout in seconds. Default is 0. ; ; Notes .......: _GUIDisable($GUI, 0, 30) should be used before starting the MsgBox, so the MsgBox is better visible on top of your GUI. You also have to call _GUIDisable($GUI) afterwards. ; =============================================================================================================================== Func _Metro_MsgBox($Flag, $Title, $Text, $mWidth = 600, $Fontsize = 11, $ParentGUI = "", $Timeout = 0) Local $1stButton, $2ndButton, $3rdButton, $1stButtonText = "-", $2ndButtonText = "-", $3rdButtonText = "-", $Buttons_Count = 1 Switch $Flag Case 0 ;OK $Buttons_Count = 1 $1stButtonText = "OK" Case 1 ;OK / Cancel $Buttons_Count = 2 $1stButtonText = "OK" $2ndButtonText = "Cancel" Case 2 ;Abort / Retry / Ignore $Buttons_Count = 3 $1stButtonText = "Abort" $2ndButtonText = "Retry" $3rdButtonText = "Ignore" Case 3 ;Yes / NO / Cancel $Buttons_Count = 3 $1stButtonText = "Yes" $2ndButtonText = "No" $3rdButtonText = "Cancel" Case 4 ;Yes / NO $Buttons_Count = 2 $1stButtonText = "Yes" $2ndButtonText = "No" Case 5 ; Retry / Cancel $Buttons_Count = 2 $1stButtonText = "Retry" $2ndButtonText = "Cancel" Case 6 ; Cancel / Retry / Continue $Buttons_Count = 3 $1stButtonText = "Cancel" $2ndButtonText = "Retry" $3rdButtonText = "Continue" Case Else $Buttons_Count = 1 $1stButtonText = "OK" EndSwitch If ($Buttons_Count = 1) And ($mWidth < 180) Then MsgBox(16, "MetroUDF", "Error: Messagebox width has to be at least 180px for the selected message style/flag.") If ($Buttons_Count = 2) And ($mWidth < 240) Then MsgBox(16, "MetroUDF", "Error: Messagebox width has to be at least 240px for the selected message style/flag.") If ($Buttons_Count = 3) And ($mWidth < 360) Then MsgBox(16, "MetroUDF", "Error: Messagebox width has to be at least 360px for the selected message style/flag.") ;HighDPI Support Local $msgbDPI = _HighDPICheck() If $HIGHDPI_SUPPORT Then $mWidth = Round($mWidth * $gDPI) Else $Fontsize = ($Fontsize / $Font_DPI_Ratio) EndIf Local $LabelSize = _StringSize($Text, $Fontsize, 400, 0, "Arial", $mWidth - (30 * $msgbDPI)) Local $mHeight = 120 + ($LabelSize[3] / $msgbDPI) Local $MsgBox_Form = _Metro_CreateGUI($Title, $mWidth / $msgbDPI, $mHeight, -1, -1, False, $ParentGUI) $mHeight = $mHeight * $msgbDPI GUICtrlCreateLabel(" " & $Title, 2 * $msgbDPI, 2 * $msgbDPI, $mWidth - (4 * $msgbDPI), 30 * $msgbDPI, 0x0200, 0x00100000) GUICtrlSetBkColor(-1, _AlterBrightness($GUIThemeColor, 30)) GUICtrlSetColor(-1, $FontThemeColor) _GUICtrlSetFont(-1, 11, 600, 0, "Arial", 5) GUICtrlCreateLabel($Text, 15 * $msgbDPI, 50 * $msgbDPI, $LabelSize[2], $LabelSize[3], -1, 0x00100000) GUICtrlSetBkColor(-1, $GUIThemeColor) GUICtrlSetColor(-1, $FontThemeColor) GUICtrlSetFont(-1, $Fontsize, 400, 0, "Arial", 5) Local $1stButton_Left = (($mWidth / $msgbDPI) - ($Buttons_Count * 100) - (($Buttons_Count - 1) * 20)) / 2 Local $1stButton_Left1 = ($mWidth - ($Buttons_Count * (100 * $msgbDPI)) - (($Buttons_Count - 1) * (20 * $msgbDPI))) / 2 Local $2ndButton_Left = $1stButton_Left + 120 Local $3rdButton_Left = $2ndButton_Left + 120 GUICtrlCreateLabel("", 2 * $msgbDPI, $mHeight - (53 * $msgbDPI), $1stButton_Left1 - (4 * $msgbDPI), (50 * $msgbDPI), -1, 0x00100000) GUICtrlCreateLabel("", $mWidth - $1stButton_Left1 + (2 * $msgbDPI), $mHeight - (53 * $msgbDPI), $1stButton_Left1 - (4 * $msgbDPI), (50 * $msgbDPI), -1, 0x00100000) Local $cEnter = GUICtrlCreateDummy() Local $aAccelKeys[1][2] = [["{ENTER}", $cEnter]] Local $1stButton = _Metro_CreateButton($1stButtonText, $1stButton_Left, ($mHeight / $msgbDPI) - 50, 100, 34, $ButtonBKColor, $ButtonTextColor) Local $2ndButton = _Metro_CreateButton($2ndButtonText, $2ndButton_Left, ($mHeight / $msgbDPI) - 50, 100, 34, $ButtonBKColor, $ButtonTextColor) If $Buttons_Count < 2 Then GUICtrlSetState($2ndButton, 32) Local $3rdButton = _Metro_CreateButton($3rdButtonText, $3rdButton_Left, ($mHeight / $msgbDPI) - 50, 100, 34, $ButtonBKColor, $ButtonTextColor) If $Buttons_Count < 3 Then GUICtrlSetState($3rdButton, 32) ;Set default btn. Switch $Flag Case 0, 1, 5 GUICtrlSetState($1stButton, 512) Case 2, 4, 6 GUICtrlSetState($2ndButton, 512) Case 3 GUICtrlSetState($3rdButton, 512) Case Else GUICtrlSetState($1stButton, 512) EndSwitch GUISetAccelerators($aAccelKeys, $MsgBox_Form) GUISetState(@SW_SHOW) If $Timeout <> 0 Then $iMsgBoxTimeout = $Timeout AdlibRegister("_iMsgBoxTimeout", 1000) EndIf If $mOnEventMode Then Opt("GUIOnEventMode", 0) ;Temporarily deactivate oneventmode While 1 If $Timeout <> 0 Then If $iMsgBoxTimeout <= 0 Then AdlibUnRegister("_iMsgBoxTimeout") _Metro_GUIDelete($MsgBox_Form) If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;Reactivate oneventmode Return SetError(1) EndIf EndIf Local $nMsg = GUIGetMsg() Switch $nMsg Case -3, $1stButton _Metro_GUIDelete($MsgBox_Form) If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;Reactivate oneventmode Return $1stButtonText Case $2ndButton _Metro_GUIDelete($MsgBox_Form) If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;Reactivate oneventmode Return $2ndButtonText Case $3rdButton _Metro_GUIDelete($MsgBox_Form) If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;Reactivate oneventmode Return $3rdButtonText Case $cEnter _Metro_GUIDelete($MsgBox_Form) Local $ReturnText Switch $Flag Case 0, 1, 5 $ReturnText = $1stButtonText Case 2, 4, 6 $ReturnText = $2ndButtonText Case 3 $ReturnText = $3rdButtonText Case Else $ReturnText = $1stButtonText EndSwitch If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;Reactivate oneventmode Return $ReturnText EndSwitch WEnd EndFunc ;==>_Metro_MsgBox #EndRegion Metro MsgBox=========================================================================================== #Region Metro InputBox=========================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_InputBox ; Description ...: Creates a metro-style Inputbox. ; Syntax ........: _Metro_InputBox($Promt[, $Font_Size = 11[, $DefaultText = ""[, $PW = False[, $EnableEnterHotkey = True[, ; $ParentGUI = ""]]]]]) ; Parameters ....: $Promt - Promt for the user. ; $Font_Size - [optional] Fontsize of the prompt. Default is 11. (Font Segoe UI) ; $DefaultText - [optional] Default value for the input control. ; $PW - [optional] True/False - Hides the input text for password input. Default is False. ; $EnableEnterHotkey - [optional] Allows confirming the entered text using the Enter key. Default is True. ; $ParentGUI - [optional] Assigns a parent GUI. Default is "". ; Return values .: @error 1 (cancled) or the text entered by the user. ; =============================================================================================================================== Func _Metro_InputBox($Promt, $Font_Size = 11, $DefaultText = "", $PW = False, $EnableEnterHotkey = True, $ParentGUI = "") Local $Metro_Input, $Metro_Input_GUI If $ParentGUI = "" Then $Metro_Input_GUI = _Metro_CreateGUI($Promt, 460, 170, -1, -1, False) Else $Metro_Input_GUI = _Metro_CreateGUI(WinGetTitle($ParentGUI, "") & ".Input", 460, 170, -1, -1, False, $ParentGUI) EndIf _Metro_SetGUIOption($Metro_Input_GUI, True) GUICtrlCreateLabel($Promt, 3 * $gDPI, 3 * $gDPI, 454 * $gDPI, 60 * $gDPI, BitOR(0x1, 0x0200), 0x00100000) GUICtrlSetFont(-1, $Font_Size, 400, 0, "Segoe UI") GUICtrlSetColor(-1, $FontThemeColor) If $PW Then $Metro_Input = GUICtrlCreateInput($DefaultText, 16 * $gDPI, 75 * $gDPI, 429 * $gDPI, 28 * $gDPI, 32) Else $Metro_Input = GUICtrlCreateInput($DefaultText, 16 * $gDPI, 75 * $gDPI, 429 * $gDPI, 28 * $gDPI) EndIf GUICtrlSetFont(-1, 11, 500, 0, "Segoe UI") GUICtrlSetState($Metro_Input, 256) Local $cEnter = GUICtrlCreateDummy() Local $aAccelKeys[1][2] = [["{ENTER}", $cEnter]] Local $Button_Continue = _Metro_CreateButtonEx2("Continue", 110, 120, 100, 36, $ButtonBKColor, $ButtonTextColor, "Segoe UI") GUICtrlSetState($Button_Continue, 512) Local $Button_Cancel = _Metro_CreateButtonEx2("Cancel", 230, 120, 100, 36, $ButtonBKColor, $ButtonTextColor, "Segoe UI") GUISetState(@SW_SHOW) If $EnableEnterHotkey Then GUISetAccelerators($aAccelKeys, $Metro_Input_GUI) EndIf If $mOnEventMode Then Opt("GUIOnEventMode", 0) ;Temporarily deactivate oneventmode While 1 $input_nMsg = GUIGetMsg() Switch $input_nMsg Case -3, $Button_Cancel _Metro_GUIDelete($Metro_Input_GUI) If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;Reactivate oneventmode Return SetError(1, 0, "") Case $Button_Continue, $cEnter Local $User_Input = GUICtrlRead($Metro_Input) If Not ($User_Input = "") Then _Metro_GUIDelete($Metro_Input_GUI) If $mOnEventMode Then Opt("GUIOnEventMode", 1) ;Reactivate oneventmode Return $User_Input EndIf EndSwitch WEnd EndFunc ;==>_Metro_InputBox #EndRegion Metro InputBox=========================================================================================== #Region Metro Progressbar=========================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateProgress ; Description ...: Creates a simple progressbar. ; Syntax ........: _Metro_CreateProgress($Left, $Top, $Width, $Height[, $EnableBorder = False[, $Backgroud_Color = $CB_Radio_Color[, ; $Progress_Color = $ButtonBKColor]]]) ; Parameters ....: $Left - Left pos. ; $Top - Top pos. ; $Width - Width. ; $Height - Height. ; $EnableBorder - [optional] Enables a 1px border from each side for the progressbar. Default is False. ; $Backgroud_Color - [optional] Background color. Default is $CB_Radio_Color. ; $Progress_Color - [optional] Progress color. Default is $ButtonBKColor. ; Return values .: Array containing basic information about the progressbar that is required to set the % progress. ; =============================================================================================================================== Func _Metro_CreateProgress($Left, $Top, $Width, $Height, $EnableBorder = False, $Backgroud_Color = $CB_Radio_Color, $Progress_Color = $ButtonBKColor) Local $Progress_Array[8] If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Width = Round($Width * $gDPI) $Height = Round($Height * $gDPI) EndIf $Progress_Array[1] = $Width $Progress_Array[2] = $Height $Progress_Array[3] = "0xFF" & Hex($Backgroud_Color, 6) $Progress_Array[4] = "0xFF" & Hex($Progress_Color, 6) $Progress_Array[5] = StringReplace($CB_Radio_Hover_Color, "0x", "0xFF") $Progress_Array[7] = $EnableBorder ;Set Colors Local $ProgressBGPen = _GDIPlus_PenCreate($Progress_Array[5], 2) ;Create Graphics Local $Progress_Graphic = _iGraphicCreate($Width, $Height, $Progress_Array[3], 1, 5) ;Draw Progressbar border If $EnableBorder Then _GDIPlus_GraphicsDrawRect($Progress_Graphic[0], 0, 0, $Width, $Height, $ProgressBGPen) EndIf ;Release created objects _GDIPlus_PenDispose($ProgressBGPen) ;Create bitmap handles and set graphics $Progress_Array[0] = GUICtrlCreatePic("", $Left, $Top, $Width, $Height) $Progress_Array[6] = _iGraphicCreateBitmapHandle($Progress_Array[0], $Progress_Graphic) ;For GUI Resizing GUICtrlSetResizing($Progress_Array[0], 768) Return $Progress_Array EndFunc ;==>_Metro_CreateProgress ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_SetProgress ; Description ...: Sets the progress in % of a progressbar. ; Syntax ........: _Metro_SetProgress(Byref $Progress, $Percent) ; Parameters ....: $Progress - Array of the progressbar that has been returned by _Metro_CreateProgress function. ; $Percent - A value from 0-100. (In %) ; =============================================================================================================================== Func _Metro_SetProgress(ByRef $Progress, $Percent) ;Set Colors Local $ProgressBGPen = _GDIPlus_PenCreate($Progress[5], 2) Local $ProgressBGBrush = _GDIPlus_BrushCreateSolid($Progress[4]) ;Create Graphics Local $Progress_Graphic = _iGraphicCreate($Progress[1], $Progress[2], $Progress[3], 1, 5) ;Draw Progressbar If $Percent > 100 Then $Percent = 100 If $Progress[7] Then Local $ProgressWidth = (($Progress[1] - 2) / 100) * $Percent _GDIPlus_GraphicsDrawRect($Progress_Graphic[0], 0, 0, $Progress[1], $Progress[2], $ProgressBGPen) _GDIPlus_GraphicsFillRect($Progress_Graphic[0], 1, 1, $ProgressWidth, $Progress[2] - 2, $ProgressBGBrush) Else Local $ProgressWidth = (($Progress[1]) / 100) * $Percent _GDIPlus_GraphicsFillRect($Progress_Graphic[0], 0, 0, $ProgressWidth, $Progress[2], $ProgressBGBrush) EndIf ;Release created objects _GDIPlus_PenDispose($ProgressBGPen) _GDIPlus_BrushDispose($ProgressBGBrush) ;Create bitmap handles Local $SetProgress = _iGraphicCreateBitmapHandle($Progress[0], $Progress_Graphic) _WinAPI_DeleteObject($Progress[6]) $Progress[6] = $SetProgress EndFunc ;==>_Metro_SetProgress #EndRegion Metro Progressbar=========================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_AddHSeperator ; Description ...: Adds a horizontal seperator line to the GUI ; Syntax ........: _Metro_AddHSeperator($Left, $Top, $Width, $Size[, $Color = $GUIBorderColor]) ; Parameters ....: $Left - x Position. ; $Top - y Position ; $Width - Width ; $Size - Size of the line ; $Color - [optional] Color of the line. Default is $GUIBorderColor. ; Return values .: Handle to the Seperator ; =============================================================================================================================== Func _Metro_AddHSeperator($Left, $Top, $Width, $Size, $Color = $GUIBorderColor) If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Width = Round($Width * $gDPI) $Size = Round($Size * $gDPI) EndIf Local $Seperator = GUICtrlCreateLabel("", $Left, $Top, $Width, $Size) GUICtrlSetBkColor(-1, $Color) GUICtrlSetState(-1, 128) GUICtrlSetResizing(-1, 2 + 4 + 32 + 512) Return $Seperator EndFunc ;==>_Metro_AddHSeperator ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_AddVSeperator ; Description ...: Adds a vertical seperator line to the GUI ; Syntax ........: _Metro_AddVSeperator($Left, $Top, $Height, $Size[, $Color = $GUIBorderColor]) ; Parameters ....: $Left - x Position. ; $Top - y Position ; $Height - Height ; $Size - Size of the line ; $Color - [optional] Color of the line. Default is $GUIBorderColor. ; Return values .: Handle to the Seperator ; =============================================================================================================================== Func _Metro_AddVSeperator($Left, $Top, $Height, $Size, $Color = $GUIBorderColor) If $HIGHDPI_SUPPORT Then $Left = Round($Left * $gDPI) $Top = Round($Top * $gDPI) $Height = Round($Height * $gDPI) $Size = Round($Size * $gDPI) EndIf Local $Seperator = GUICtrlCreateLabel("", $Left, $Top, $Size, $Height) GUICtrlSetBkColor(-1, $Color) GUICtrlSetState(-1, 128) GUICtrlSetResizing(-1, 32 + 64 + 256 + 2) Return $Seperator EndFunc ;==>_Metro_AddVSeperator Func _iAddHover($Button_ADD) ;Try to get an unused index from the hover reg array Local $HRS For $i = 0 To UBound($iHoverReg) - 1 Step +1 If $iHoverReg[$i][0] = "" Then $HRS = $i ExitLoop EndIf Next If $HRS == "" Then ;If there is no unused index, then redim array $HRS = UBound($iHoverReg) ReDim $iHoverReg[$HRS + 1][16] EndIf For $i = 0 To 15 $iHoverReg[$HRS][$i] = $Button_ADD[$i] Next Return $HRS EndFunc ;==>_iAddHover #EndRegion HoverEffects=========================================================================================== #Region Required_Funcs=========================================================================================== Func _iGraphicCreate($hWidth, $hHeight, $BackgroundColor = 0, $Smoothingmode = 4, $TextCleartype = 0) Local $Picture_Array[2] $Picture_Array[1] = _GDIPlus_BitmapCreateFromScan0($hWidth, $hHeight, $GDIP_PXF32ARGB) $Picture_Array[0] = _GDIPlus_ImageGetGraphicsContext($Picture_Array[1]) _GDIPlus_GraphicsSetSmoothingMode($Picture_Array[0], $Smoothingmode) _GDIPlus_GraphicsSetTextRenderingHint($Picture_Array[0], $TextCleartype) If $BackgroundColor <> 0 Then _GDIPlus_GraphicsClear($Picture_Array[0], $BackgroundColor) Return $Picture_Array EndFunc ;==>_iGraphicCreate Func _iGraphicCreateBitmapHandle($hPicture, $Picture_Array, $hVisible = True) Local $cBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($Picture_Array[1]) If $hVisible Then _WinAPI_DeleteObject(GUICtrlSendMsg($hPicture, 0x0172, 0, $cBitmap)) _GDIPlus_GraphicsDispose($Picture_Array[0]) _GDIPlus_BitmapDispose($Picture_Array[1]) Return $cBitmap EndFunc ;==>_iGraphicCreateBitmapHandle Func GetCurrentGUI() ;Thanks @binhnx Local $dummyCtrl = GUICtrlCreateLabel("", 0, 0, 0, 0) Local $hCurrent = _WinAPI_GetParent(GUICtrlGetHandle($dummyCtrl)) GUICtrlDelete($dummyCtrl) Return $hCurrent EndFunc ;==>GetCurrentGUI Func _HighDPICheck() If $HIGHDPI_SUPPORT Then Return $gDPI Else Return 1 EndIf EndFunc ;==>_HighDPICheck Func cAngle($x1, $y1, $Ang, $Length) Local $Return[2] $Return[0] = $x1 + ($Length * Sin($Ang / 180 * 3.14159265358979)) $Return[1] = $y1 + ($Length * Cos($Ang / 180 * 3.14159265358979)) Return $Return EndFunc ;==>cAngle Func _GUICtrlSetFont($icontrolID, $iSize, $iweight = 400, $iattribute = 0, $sfontname = "", $iquality = 5) If $HIGHDPI_SUPPORT Then GUICtrlSetFont($icontrolID, $iSize, $iweight, $iattribute, $sfontname, $iquality) Else GUICtrlSetFont($icontrolID, $iSize / $Font_DPI_Ratio, $iweight, $iattribute, $sfontname, $iquality) EndIf EndFunc ;==>_GUICtrlSetFont Func _GetFontDPI_Ratio() Local $a1[3] Local $iDPI, $iDPIRat, $Logpixelsy = 90, $hWnd = 0 Local $hDC = DllCall("user32.dll", "long", "GetDC", "long", $hWnd) Local $aRet = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", $hDC[0], "long", $Logpixelsy) $hDC = DllCall("user32.dll", "long", "ReleaseDC", "long", $hWnd, "long", $hDC) $iDPI = $aRet[0] Select Case $iDPI = 0 $iDPI = 96 $iDPIRat = 94 Case $iDPI < 84 $iDPIRat = $iDPI / 105 Case $iDPI < 121 $iDPIRat = $iDPI / 96 Case $iDPI < 145 $iDPIRat = $iDPI / 95 Case Else $iDPIRat = $iDPI / 94 EndSelect $a1[0] = 2 $a1[1] = $iDPI $a1[2] = $iDPIRat Return $a1 EndFunc ;==>_GetFontDPI_Ratio Func _iMsgBoxTimeout() $iMsgBoxTimeout -= 1 EndFunc ;==>_iMsgBoxTimeout Func _ReduceMemory($i_PID = -1) Local $ai_Return If $i_PID <> -1 Then Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID) $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0]) DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0]) Else $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1) EndIf Return $ai_Return[0] EndFunc ;==>_ReduceMemory Func _AlterBrightness($StartCol, $adjust, $Select = 7) Local $red = $adjust * (BitAND(1, $Select) <> 0) + BitAND($StartCol, 0xff0000) / 0x10000 Local $grn = $adjust * (BitAND(2, $Select) <> 0) + BitAND($StartCol, 0x00ff00) / 0x100 Local $blu = $adjust * (BitAND(4, $Select) <> 0) + BitAND($StartCol, 0x0000FF) Return "0x" & Hex(String(limitCol($red) * 0x10000 + limitCol($grn) * 0x100 + limitCol($blu)), 6) EndFunc ;==>_AlterBrightness Func limitCol($cc) If $cc > 255 Then Return 255 If $cc < 0 Then Return 0 Return $cc EndFunc ;==>limitCol Func _CreateBorder($mGUI, $guiW, $guiH, $bordercolor = 0xFFFFFF) Local $cLeft, $cRight, $cTop, $cBottom Local $gID = _iGetGUIID($mGUI) $cTop = GUICtrlCreateLabel("", 0, 0, $guiW, 1) GUICtrlSetColor(-1, $bordercolor) GUICtrlSetBkColor(-1, $bordercolor) GUICtrlSetResizing(-1, 544) GUICtrlSetState(-1, 128) $cBottom = GUICtrlCreateLabel("", 0, $guiH - 1, $guiW, 1) GUICtrlSetColor(-1, $bordercolor) GUICtrlSetBkColor(-1, $bordercolor) GUICtrlSetResizing(-1, 576) GUICtrlSetState(-1, 128) $cLeft = GUICtrlCreateLabel("", 0, 1, 1, $guiH - 1) GUICtrlSetColor(-1, $bordercolor) GUICtrlSetBkColor(-1, $bordercolor) GUICtrlSetResizing(-1, 256 + 2) GUICtrlSetState(-1, 128) $cRight = GUICtrlCreateLabel("", $guiW - 1, 1, 1, $guiH - 1) GUICtrlSetColor(-1, $bordercolor) GUICtrlSetBkColor(-1, $bordercolor) GUICtrlSetResizing(-1, 256 + 4) GUICtrlSetState(-1, 128) If $gID <> "" Then $iGUI_LIST[$gID][12] = $cTop $iGUI_LIST[$gID][13] = $cBottom $iGUI_LIST[$gID][14] = $cLeft $iGUI_LIST[$gID][15] = $cRight EndIf EndFunc ;==>_CreateBorder Func _WinPos($ParentWin, $Win_Wi, $Win_Hi) Local $Win_SetPos[2] $Win_SetPos[0] = "-1" $Win_SetPos[1] = "-1" Local $Win_POS = WinGetPos($ParentWin) If Not @error Then $Win_SetPos[0] = ($Win_POS[0] + (($Win_POS[2] - $Win_Wi) / 2)) $Win_SetPos[1] = ($Win_POS[1] + (($Win_POS[3] - $Win_Hi) / 2)) EndIf Return $Win_SetPos EndFunc ;==>_WinPos ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_GraphicsGetDPIRatio ; Description ...: ; Syntax ........: _GDIPlus_GraphicsGetDPIRatio([$iDPIDef = 96]) ; Parameters ....: $iDPIDef - [optional] An integer value. Default is 96. ; Return values .: None ; Author ........: UEZ ; Link ..........: http://www.autoitscript.com/forum/topic/159612-dpi-resolution-problem/?hl=%2Bdpi#entry1158317 ; Example .......: No ; =============================================================================================================================== Func _GDIPlus_GraphicsGetDPIRatio($iDPIDef = 96) _GDIPlus_Startup() Local $hGfx = _GDIPlus_GraphicsCreateFromHWND(0) If @error Then Return SetError(1, @extended, 0) Local $aResult #forcedef $__g_hGDIPDll, $ghGDIPDll $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetDpiX", "handle", $hGfx, "float*", 0) If @error Then Return SetError(2, @extended, 0) Local $iDPI = $aResult[2] _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_Shutdown() Return $iDPI / $iDPIDef EndFunc ;==>_GDIPlus_GraphicsGetDPIRatio #EndRegion Required_Funcs=========================================================================================== ;========================================================================NEW================================================================================= Func _iHoverOn($idCtrl, $vData) Switch $iHoverReg[$vData][3] Case 5, 7 If $iHoverReg[$vData][2] Then ;checkboxes and radios _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$vData][0], 0x0172, 0, $iHoverReg[$vData][8])) ;Checked hover image Else _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$vData][0], 0x0172, 0, $iHoverReg[$vData][6])) ;Default hover image EndIf Case "6" If $iHoverReg[$vData][2] Then ;toggles _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$vData][0], 0x0172, 0, $iHoverReg[$vData][14])) ;Checked hover image Else _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$vData][0], 0x0172, 0, $iHoverReg[$vData][13])) ;Default hover image EndIf Case Else _WinAPI_DeleteObject(GUICtrlSendMsg($idCtrl, 0x0172, 0, $iHoverReg[$vData][6])) ;Button hover image EndSwitch EndFunc ;==>_iHoverOn Func _iHoverOff($idCtrl, $vData) Switch $iHoverReg[$vData][3] Case 0, 3, 4, 8, 9, 10 ;buttons If WinActive($iHoverReg[$vData][15]) Then _WinAPI_DeleteObject(GUICtrlSendMsg($idCtrl, 0x0172, 0, $iHoverReg[$vData][5])) ;Button default image Else _WinAPI_DeleteObject(GUICtrlSendMsg($idCtrl, 0x0172, 0, $iHoverReg[$vData][7])) ;Inactive state EndIf Case 5, 7 ;checkboxes and radios If $iHoverReg[$vData][2] Then _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$vData][0], 0x0172, 0, $iHoverReg[$vData][7])) ;Checked image Else _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$vData][0], 0x0172, 0, $iHoverReg[$vData][5])) ;Default image EndIf Case "6" ;Toggles If $iHoverReg[$vData][2] Then _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$vData][0], 0x0172, 0, $iHoverReg[$vData][12])) ;Checked image Else _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$vData][0], 0x0172, 0, $iHoverReg[$vData][5])) ;Default image EndIf Case Else _WinAPI_DeleteObject(GUICtrlSendMsg($idCtrl, 0x0172, 0, $iHoverReg[$vData][5])) ;Button default image EndSwitch EndFunc ;==>_iHoverOff ; #FUNCTION# ==================================================================================================================== ; Name ..........: _iGetCtrlHandlebyType ; Description ...: Internal function to get the handle of a control button using the GUI handle and Type ; =============================================================================================================================== Func _iGetCtrlHandlebyType($Type, $hWnd) For $i = 0 To UBound($iHoverReg) - 1 If ($Type = $iHoverReg[$i][3]) And ($hWnd = $iHoverReg[$i][15]) Then Return $iHoverReg[$i][0] Next Return False EndFunc ;==>_iGetCtrlHandlebyType ;====================================================================== Borderless UDF ========================================================================== Func _iEffectControl($hWnd, $imsg, $wParam, $lParam, $iID, $gID) Switch $imsg Case 0x00AF, 0x0085, 0x00AE, 0x0083, 0x0086 ;Prevent default non-client arena from drawing for borderless GUI effects Return -1 Case 0x031A ;Prevent rounded corners when theme changes DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", BitOR(2, 4)) _WinAPI_SetWindowPos($hWnd, 0, 0, 0, 0, 0, $SWP_FRAMECHANGED + $SWP_NOMOVE + $SWP_NOSIZE + $SWP_NOREDRAW) DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", BitOR(1, 2, 4)) Return 0 Case 0x0005 ;Maximize/Restore effects -> 2 = Maximized, 0 = Restored & Fix maximized position If Not $iGUI_LIST[$gID][11] Then ;If not in fullscreen mode Switch $wParam Case 2 ;window maximized Local $wSize = _GetDesktopWorkArea($hWnd) Local $wPos = WinGetPos($hWnd) WinMove($hWnd, "", $wPos[0] - 1, $wPos[1] - 1, $wSize[2], $wSize[3]) ;Fix Maximized pos For $iC = 0 To UBound($iHoverReg) - 1 ;Hide max button and show restore button If $hWnd = $iHoverReg[$iC][15] Then Switch $iHoverReg[$iC][3] Case 3 GUICtrlSetState($iHoverReg[$iC][0], 32) $iHoverReg[$iC][8] = False Case 4 GUICtrlSetState($iHoverReg[$iC][0], 16) $iHoverReg[$iC][8] = True EndSwitch EndIf Next Case 0 ;window restored/pos change For $iC = 0 To UBound($iHoverReg) - 1 ;Hide restore button and show max button If $hWnd = $iHoverReg[$iC][15] Then Switch $iHoverReg[$iC][3] Case 3 If Not $iHoverReg[$iC][8] Then GUICtrlSetState($iHoverReg[$iC][0], 16) $iHoverReg[$iC][8] = True EndIf Case 4 If $iHoverReg[$iC][8] Then GUICtrlSetState($iHoverReg[$iC][0], 32) $iHoverReg[$iC][8] = False EndIf EndSwitch EndIf Next EndSwitch EndIf Case 0x0024 ;Prevent Windows from misplacing the GUI when maximized. (Due to missing borders.) and set minimum window size. Local $tMinMax = DllStructCreate("int;int;int;int;int;int;int;int;int;dword", $lParam) Local $WrkSize = _GetDesktopWorkArea($hWnd) DllStructSetData($tMinMax, 3, $WrkSize[2]) DllStructSetData($tMinMax, 4, $WrkSize[3]) DllStructSetData($tMinMax, 5, $WrkSize[0] + 1) DllStructSetData($tMinMax, 6, $WrkSize[1] + 1) ;Set win min size DllStructSetData($tMinMax, 7, $iGUI_LIST[$gID][3]) DllStructSetData($tMinMax, 8, $iGUI_LIST[$gID][4]) Case 0x0084 ;Set mouse cursor for resizing etc. / Allow the upper GUI (28 pixel from top) to act as a control bar (doubleclick to maximize, move gui around..) If $iGUI_LIST[$gID][2] And Not $iGUI_LIST[$gID][11] Then ;If resize is allowed and not in fullscreen mode Local $iSide = 0, $iTopBot = 0, $Cur Local $wPos = WinGetPos($hWnd) Local $curInf = GUIGetCursorInfo($hWnd) ;Check if Mouse is over Border, Margin = 5 If Not @error Then If $curInf[0] < $bMarg Then $iSide = 1 If $curInf[0] > $wPos[2] - $bMarg Then $iSide = 2 If $curInf[1] < $bMarg Then $iTopBot = 3 If $curInf[1] > $wPos[3] - $bMarg Then $iTopBot = 6 $Cur = $iSide + $iTopBot Else $Cur = 0 EndIf If WinGetState($hWnd) <> 47 Then ;If not maximized ;Set resize cursor and return the correct $HT for gui resizing Local $Return_HT = 2, $Set_Cur = 2 Switch $Cur Case 1 $Set_Cur = 13 $Return_HT = 10 Case 2 $Set_Cur = 13 $Return_HT = 11 Case 3 $Set_Cur = 11 $Return_HT = 12 Case 4 $Set_Cur = 12 $Return_HT = 13 Case 5 $Set_Cur = 10 $Return_HT = 14 Case 6 $Set_Cur = 11 $Return_HT = 15 Case 7 $Set_Cur = 10 $Return_HT = 16 Case 8 $Set_Cur = 12 $Return_HT = 17 EndSwitch GUISetCursor($Set_Cur, 1) If $Return_HT <> 2 Then Return $Return_HT EndIf ;Return HTCAPTION if mouse is in the non-client area (28px from top) for doubleclick + drag If Abs(BitAND(BitShift($lParam, 16), 0xFFFF) - $wPos[1]) < (28 * $gDPI) Then Return $HTCAPTION EndIf Case 0x0201 ;Allow moving the GUI using LBUTTON down+drag If $iGUI_LIST[$gID][1] And Not $iGUI_LIST[$gID][11] And Not (WinGetState($hWnd) = 47) Then Local $aCurInfo = GUIGetCursorInfo($hWnd) If ($aCurInfo[4] = 0) Then ; Mouse not over a control ;Allow drag DllCall("user32.dll", "int", "ReleaseCapture") DllCall("user32.dll", "long", "SendMessageA", "hwnd", $hWnd, "int", 0x00A1, "int", 2, "int", 0) Return 0 EndIf EndIf Case 0x001C ;Set Active/Inactive color for control buttons when the app is being activated/deactivated For $iC = 0 To UBound($iHoverReg) - 1 Switch $iHoverReg[$iC][3] Case 0, 3, 4, 8, 9, 10 If $wParam Then _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$iC][0], 0x0172, 0, $iHoverReg[$iC][5])) ;Button default image Else _WinAPI_DeleteObject(GUICtrlSendMsg($iHoverReg[$iC][0], 0x0172, 0, $iHoverReg[$iC][7])) EndIf EndSwitch Next Case 0x0020 ;Reset cursor back to defaul to prevent from resize cursors getting stuck If MouseGetCursor() <> 2 Then Local $curInf = GUIGetCursorInfo($hWnd) If Not @error And $curInf[4] <> 0 Then Local $iSide = 0, $iTopBot = 0, $Cur = 0 Local $wPos = WinGetPos($hWnd) If $curInf[0] < $bMarg Then $iSide = 1 If $curInf[0] > $wPos[2] - $bMarg Then $iSide = 2 If $curInf[1] < $bMarg Then $iTopBot = 3 If $curInf[1] > $wPos[3] - $bMarg Then $iTopBot = 6 $Cur = $iSide + $iTopBot If $Cur = 0 Then If $curInf[4] <> $iGUI_LIST[$gID][12] And $curInf[4] <> $iGUI_LIST[$gID][13] And $curInf[4] <> $iGUI_LIST[$gID][14] And $curInf[4] <> $iGUI_LIST[$gID][15] Then ;If mouse not over border labels GUISetCursor(2, 0, $hWnd) EndIf EndIf EndIf EndIf EndSwitch Return DllCall("comctl32.dll", "lresult", "DefSubclassProc", "hwnd", $hWnd, "uint", $imsg, "wparam", $wParam, "lparam", $lParam)[0] EndFunc ;==>_iEffectControl ; #FUNCTION# ==================================================================================================================== ; Name ..........: _iMExit ; Description ...: Removes all WindowSubclasses of all GUIs before exiting, in order to prevent a program crash ; =============================================================================================================================== Func _iMExit() For $i_HR = 0 To UBound($iGUI_LIST) - 1 Step +1 _Metro_GUIDelete($iGUI_LIST[$i_HR][0]) Next DllCallbackFree($m_hDll) _GDIPlus_Shutdown() EndFunc ;==>_iMExit ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GetDesktopWorkArea ; Description ...: Calculate the desktop workarea for a specific window to maximize it. Supports multi display and taskbar detection. ; Syntax ........: _GetDesktopWorkArea($hWnd) ; Parameters ....: $hWnd - Handle to the window. ; Return values .: Array in following format: ; : [0] = X-Pos for maximizing ; : [1] = Y-Pos for maximizing ; : [2] = Max. Width ; : [3] = Max. Height ; Author ........: BB_19 ; Note ..........: The x/y position is not the real position of the window if you have multi display. It is just for setting the maximize info for WM_GETMINMAXINFO ; =============================================================================================================================== Func _GetDesktopWorkArea($hWnd, $FullScreen = False) Local $MonSizePos[4], $MonNumb = 1 $MonSizePos[0] = 0 $MonSizePos[1] = 0 $MonSizePos[2] = @DesktopWidth $MonSizePos[3] = @DesktopHeight ;Get Monitors Local $aPos, $MonList = _WinAPI_EnumDisplayMonitors() If @error Then Return $MonSizePos ReDim $MonList[$MonList[0][0] + 1][5] For $i = 1 To $MonList[0][0] $aPos = _WinAPI_GetPosFromRect($MonList[$i][1]) For $j = 0 To 3 $MonList[$i][$j + 1] = $aPos[$j] Next Next ;Check on which monitor our window is Local $GUI_Monitor = _WinAPI_MonitorFromWindow($hWnd) ;Check on which monitor the taskbar is Local $TaskbarMon = _WinAPI_MonitorFromWindow(WinGetHandle("[CLASS:Shell_TrayWnd]")) ;Write the width and height info of the correct monitor into an array For $iM = 1 To $MonList[0][0] Step +1 If $MonList[$iM][0] = $GUI_Monitor Then If $FullScreen Then $MonSizePos[0] = $MonList[$iM][1] $MonSizePos[1] = $MonList[$iM][2] Else $MonSizePos[0] = 0 $MonSizePos[1] = 0 EndIf $MonSizePos[2] = $MonList[$iM][3] $MonSizePos[3] = $MonList[$iM][4] $MonNumb = $iM EndIf Next ;Check if Taskbar autohide is enabled, if so then we will remove 1px from the correct side so that the taskbar will reapear when moving mouse to the side Local $TaskBarAH = DllCall("shell32.dll", "int", "SHAppBarMessage", "int", 0x00000004, "ptr*", 0) If Not @error Then $TaskBarAH = $TaskBarAH[0] Else $TaskBarAH = 0 EndIf ;Check if Taskbar is on this Monitor, if so, then recalculate the position, max. width and height of the WorkArea If $TaskbarMon = $GUI_Monitor Then Local $TaskBarPos = WinGetPos("[CLASS:Shell_TrayWnd]") If @error Then Return $MonSizePos If $FullScreen Then Return $MonSizePos ;Win 7 classic theme compatibility If ($TaskBarPos[0] = $MonList[$MonNumb][1] - 2) Or ($TaskBarPos[1] = $MonList[$MonNumb][2] - 2) Then $TaskBarPos[0] += 2 $TaskBarPos[1] += 2 $TaskBarPos[2] -= 4 $TaskBarPos[3] -= 4 EndIf ;Recalc width/height and pos If $TaskBarPos[2] = $MonSizePos[2] Then If $TaskBarAH = 1 Then If ($TaskBarPos[1] > 0) Then $MonSizePos[3] -= 1 Else $MonSizePos[1] += 1 $MonSizePos[3] -= 1 EndIf Return $MonSizePos EndIf $MonSizePos[3] = $MonSizePos[3] - $TaskBarPos[3] If ($TaskBarPos[0] = $MonList[$MonNumb][1]) And ($TaskBarPos[1] = $MonList[$MonNumb][2]) Then $MonSizePos[1] = $TaskBarPos[3] Else If $TaskBarAH = 1 Then If ($TaskBarPos[0] > 0) Then $MonSizePos[2] -= 1 Else $MonSizePos[0] += 1 $MonSizePos[2] -= 1 EndIf Return $MonSizePos EndIf $MonSizePos[2] = $MonSizePos[2] - $TaskBarPos[2] If ($TaskBarPos[0] = $MonList[$MonNumb][1]) And ($TaskBarPos[1] = $MonList[$MonNumb][2]) Then $MonSizePos[0] = $TaskBarPos[2] EndIf EndIf Return $MonSizePos EndFunc ;==>_GetDesktopWorkArea Func _iGetGUIID($mGUI) For $iG = 0 To UBound($iGUI_LIST) - 1 If $iGUI_LIST[$iG][0] = $mGUI Then Return $iG EndIf Next Return SetError(1, 0, "") ; EndFunc ;==>_iGetGUIID Func _iFullscreenToggleBtn($idCtrl, $hWnd) If $ControlBtnsAutoMode Then _Metro_FullscreenToggle($hWnd) EndFunc ;==>_iFullscreenToggleBtn ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_CreateTab ; Description ...: Creates aparet tab object with modern look using the colors of the selected theme. ; Syntax ........: _Metro_CreateTab($Title, $Width, $Height) ; Parameters ....: $hWnd - Parent form/window tab will be built in ; $Left - Window pos X. ; $Top - Window pos Y. ; $Width - Width ; $Height - Height ; Return values .: Handle to the created gui ; Example .......: _Metro_CreateGUI($Form1, 50, 5, 500, 300) ; =============================================================================================================================== Func _Metro_CreateTab($hWnd, $Left, $Top, $Width, $Height) Local $FrameColor = "0xFF" & Hex($GUIBorderColor, 6) Local $TabColor = "0xFF" & Hex($ButtonBKColor, 6) Local $TabFont = "0xFF" & Hex($FontThemeColor, 6) Local $TabBGColor = "0xFF" & Hex($GUIThemeColor, 6) Local $BGFont = "0xFF" & Hex($FontThemeColor, 6) GUISwitch($hWnd) Local $oObj = DllStructCreate($tObjTabEx) _ArrayAdd($____aTabList, $oObj) $____aTabList[0] += 1 $oObj.hwnd = $hWnd $oObj.ctrl = GUICtrlCreatePic("", $Left, $Top+25, $Width, $Height-50) GUICtrlSetResizing($oObj.ctrl, 802) GUICtrlSetState($oObj.ctrl, 128) $oObj.ctab = GUICtrlCreateTab(-99, -99, 1, 1) GUICtrlSetState($oObj.ctab, 128) Local $aBmp = _GDIPlus_BitmapCreateFromScan0($Width, $Height-50) Local $hGfx = _GDIPlus_ImageGetGraphicsContext($aBmp) Local $hPen = _GDIPlus_PenCreate($FrameColor, 4) Local $hBrush = _GDIPlus_BrushCreateSolid($FrameColor) _GDIPlus_GraphicsDrawRect($hGfx, 0, 0, $Width, $Height-50, $hPen) _GDIPlus_GraphicsFillRect($hGfx, 0, 0, $Width, $Height-50, $hBrush) _GDIPlus_GraphicsClear($hGfx, $FrameColor) Local $hBmp = _GDIPlus_BitmapCreateDIBFromBitmap($aBmp) _GDIPlus_BitmapDispose($aBmp) _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_PenDispose($hPen) _WinAPI_DeleteObject(GUICtrlSendMsg($oObj.ctrl, 0x0172, 0, $hBmp)) _WinAPI_DeleteObject($hBmp) $oObj.width = $Width $oObj.x = $Left $oObj.y = $Top $oObj.current = "" $oObj.count = 0 $oObj.next = $Left Return $oObj EndFunc ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Metro_AddTab ; Description ...: Adds a tab to the tab object created by _Metro_CreateTabith the colors of the selected theme. ; Syntax ........: _Metro_AddTab($Ctrl, $Text) ; Parameters ....: $Ctrl - Parent tab object ; $Text - Text to use for tab label ; Return values .: Handle to the created gui ; Example .......: _Metro_AddTab($Tab1, "Test") ; =============================================================================================================================== Func _Metro_AddTab($Ctrl, $Text) Local $FrameColor = "0xFF" & Hex($GUIBorderColor, 6) Local $TabColor = "0xFF" & Hex($ButtonBKColor, 6) Local $TabFont = "0xFF" & Hex($ButtonTextColor, 6) Local $TabBGColor = "0xFF" & Hex($GUIThemeColor, 6) Local $TabBGFont = "0xFF" & Hex($FontThemeColor, 6) GUISwitch($Ctrl.hwnd) GUICtrlCreateTabItem("") $Width = (StringLen($Text) *6)+60 Local $oObj = DllStructCreate($tObjTabBtnEx) _ArrayAdd($____aTabBtnList, $oObj) $____aTabBtnList[0] += 1 $oObj.ctrl = GUICtrlCreatePic("", $Ctrl.next, $Ctrl.y, $Width, 25) GUICtrlSetResizing($oObj.ctrl, 802) _GUICtrl_OnHoverRegister($oObj.ctrl, 'FlatTab_EventHover', 'FlatTab_EventHover', 'FlatTab_EventClick', 'FlatTab_EventClick') $Ctrl.count +=1 $oObj.idtab = GUICtrlCreateTabItem($oObj.count) $oObj.text = $Text If $Ctrl.count = 1 Then FlatTab_Draw($oObj.ctrl, $Text, $TabFont, $TabColor) $Ctrl.current = $oObj.ctrl $oObj.ctab = $Ctrl.ctab $Ctrl.next += $Width ;GUICtrlSetState($oObj.idtab, 16) Return $oObj.idtab Else FlatTab_Draw($oObj.ctrl, $Text, $TabBGFont, $TabBGColor) ;$Ctrl.current = $oObj.ctrl $oObj.ctab = $Ctrl.ctab $Ctrl.next += $Width ;GUICtrlSetState($oObj.idtab, 16) Return $oObj.idtab EndIf EndFunc Func FlatTab_EventHover($Ctrl, $Mode) Local $FrameColor = "0xFF" & Hex($GUIBorderColor, 6) Local $TabColor = "0xFF" & Hex($ButtonBKColor, 6) Local $TabFont = "0xFF" & Hex($ButtonTextColor, 6) Local $TabBGColor = "0xFF" & Hex($GUIThemeColor, 6) Local $TabBGFont = "0xFF" & Hex($FontThemeColor, 6) Local $Obj1 = FlatTab_GetObjTabFromCtrl($Ctrl) If $Obj1.current = $Ctrl Then Return Local $Obj2 = FlatTab_GetObjTabBtnFromCtrl($Ctrl) Switch $Mode Case 1 FlatTab_Draw($Ctrl, $Obj2.text, $TabBGFont, $TabBGColor+0xFF151515) Case 2 FlatTab_Draw($Ctrl, $Obj2.text, $TabBGFont, $TabBGColor) EndSwitch EndFunc Func FlatTab_EventClick($Ctrl, $Mode) Local $FrameColor = "0xFF" & Hex($GUIBorderColor, 6) Local $TabColor = "0xFF" & Hex($ButtonBKColor, 6) Local $TabFont = "0xFF" & Hex($ButtonTextColor, 6) Local $TabBGColor = "0xFF" & Hex($GUIThemeColor, 6) Local $TabBGFont = "0xFF" & Hex($FontThemeColor, 6) If $Mode = 2 Then Local $Obj1 = FlatTab_GetObjTabFromCtrl($Ctrl) If $Obj1.current = $Ctrl Then Return Local $Obj2 = FlatTab_GetObjTabBtnFromCtrl($Ctrl) Local $Obj3 = FlatTab_GetObjTabBtnFromCtrl($Obj1.current) FlatTab_Draw($Ctrl, $Obj2.text, $TabFont, $TabColor) FlatTab_Draw($Obj3.ctrl, $Obj3.text, $TabBGFont, $TabBGColor) GUICtrlSetState($Obj2.idtab, 16) $Obj1.current = $Ctrl EndIf EndFunc Func FlatTab_GetObjTabFromCtrl($Ctrl) Local $Obj2, $Index Local $Obj = FlatTab_GetObjTabBtnFromCtrl($Ctrl) If $____aTabList[0] = 0 Then Return False For $Index = $____aTabList[0] To 1 Step -1 $Obj2 = $____aTabList[$Index] If $Obj2.ctab == $Obj.ctab Then Return $____aTabList[$Index] Next Return False EndFunc Func FlatTab_GetObjTabBtnFromCtrl($Ctrl) Local $Obj, $Index If $____aTabBtnList[0] = 0 Then Return False For $Index = $____aTabBtnList[0] To 1 Step -1 $Obj = $____aTabBtnList[$Index] If $Obj.ctrl == $Ctrl Then Return $____aTabBtnList[$Index] Next Return False EndFunc Func FlatTab_Draw($iCtrl, $Text, $Color = 0xFFFFFFFF, $BgColor = 0x00FFFFFF) Local $hWnd = _WinAPI_GetParent(GUICtrlGetHandle($iCtrl)) Local $aPos = ControlGetPos($hWnd, "", $iCtrl) Local $hFormat = _GDIPlus_StringFormatCreate() Local $hFamily = _GDIPlus_FontFamilyCreate("Segoe UI Semibold") Local $hFont = _GDIPlus_FontCreate($hFamily, 10, 0) Local $tLayout = _GDIPlus_RectFCreate(0, 0, $aPos[2], $aPos[3]) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) Local $aBitmaps = _GDIPlus_BitmapCreateFromScan0($aPos[2], $aPos[3]) Local $aGfxCtxt = _GDIPlus_ImageGetGraphicsContext($aBitmaps) _GDIPlus_GraphicsSetSmoothingMode($aGfxCtxt, 2) _GDIPlus_GraphicsSetTextRenderingHint($aGfxCtxt, 5) _GDIPlus_GraphicsClear($aGfxCtxt, $BgColor) Local $hBrushColor = _GDIPlus_BrushCreateSolid($Color) _GDIPlus_GraphicsDrawStringEx($aGfxCtxt, $Text, $hFont, $tLayout, $hFormat, $hBrushColor) Local $aHBitmaps = _GDIPlus_BitmapCreateDIBFromBitmap($aBitmaps) _GDIPlus_BrushDispose($hBrushColor) _GDIPlus_FontDispose($hFont) _GDIPlus_BitmapDispose($aBitmaps) _GDIPlus_GraphicsDispose($aGfxCtxt) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _WinAPI_DeleteObject(GUICtrlSendMsg($iCtrl, 0x0172, 0, $aHBitmaps)) _WinAPI_DeleteObject($aHBitmaps) EndFunc