Moderators Melba23 Posted December 20, 2008 Moderators Share Posted December 20, 2008 After the Tray Message Box UDF that Valuater provided a few days ago, I hesitated to post this rather more complex script on the same theme. But I thought I might as well go public as it has a number of differences beyond the obvious one of size! The principle of the script is much the same; your message is displayed in a "Toast" appearing from the system tray. However, in this case the colours and font size of the title bar and main window are user-definable, as are the text justification of the message and the delay before the Toast hides again (which can be cut short using a close button if required). But perhaps the main differences are that these Toasts will display correctly wherever the taskbar is around the screen (you can reposition the taskbar to the top or to either side, although I do not know many people who do) and that the Toasts are sized automatically to fit the message to be displayed. The main UDF contains 3 functions: _Toast_Set to define the style, colours and font for subsequent Toasts; _Toast_Show to display the Toast and to set the delay before the script resumes; and _Toast_Hide to make it disappear. The script is pretty well commented and there is an example to crib from if necessary ;-):expandcollapse popup#include-once #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <GDIPlus.au3> #include <WinAPI.au3> #include <Memory.au3> #include <GetDefaultFont.au3> #include <LabelSize.au3> Global $aDefMsgBoxFont = _GetDefaultFont() Global $sDef_Toast_Font_Name = $aDefMsgBoxFont[0] Global $iDef_Toast_Font_Size = $aDefMsgBoxFont[1] ; Declare Toast Global variables Global $hToast_handle = 0 Global $sToast_Direction = "Up" Global $iToast_Style = $SS_CENTER Global $iToast_Header_BkCol = _WinAPI_GetSysColor($COLOR_WINDOWTEXT) Global $iToast_Header_Col = _WinAPI_GetSysColor($COLOR_WINDOW) Global $iToast_Header_Bold = 0 Global $iToast_Message_BkCol = $iToast_Header_Col Global $iToast_Message_Col = $iToast_Header_BkCol Global $sToast_Font_Name = $sDef_Toast_Font_Name Global $iToast_Font_Size = $iDef_Toast_Font_Size ;Example Local $sMsg, $hProgress, $aRet[2] $sMsg = "The message text goes in this area" & @CRLF & @CRLF $sMsg &= "This Toast uses the System colours and font" $aRet = _Toast_Show("The Title text goes here", $sMsg, 5) ConsoleWrite("Toast size: " & $aRet[0] & " x " & $aRet[1] & @CRLF) _Toast_Hide() $sMsg = "This Toast uses colours and font defined in a _Toast_Set call. " $sMsg &= "The header text is also displayed in bold weight" & @CRLF & @CRLF $sMsg &= "Subsequent Toasts will use these values until they are reset by another _Toast_Set call" & @CRLF & @CRLF $sMsg &= "The next Toast has a very small message to show the pre-set minimum size" _Toast_Set(5, 0xFF00FF, 0xFFFF00, 0x0000FF, 0xFFFFFF, 10, "Arial") $aRet = _Toast_Show("User-defined Colours and Bold Header", $sMsg, 10) ConsoleWrite("Toast size: " & $aRet[0] & " x " & $aRet[1] & @CRLF) _Toast_Hide() $aRet = _Toast_Show("Mini Size", "Tiny", 2) ConsoleWrite("Toast size: " & $aRet[0] & " x " & $aRet[1] & @CRLF) _Toast_Hide() $sMsg = "These lines are of medium length" & @CRLF & @CRLF $sMsg &= "The width is set by the longest" & @CRLF & @CRLF $sMsg &= "No wrapping occurs here" & @CRLF & @CRLF $sMsg &= "Note increased font size" _Toast_Set(-1, -1, -1, -1, -1, 15) $aRet = _Toast_Show("Mid Width", $sMsg, 5) ConsoleWrite("Toast size: " & $aRet[0] & " x " & $aRet[1] & @CRLF) _Toast_Hide() $sMsg = "This is a very long message set to left justified and a much larger font using _Toast_Set" & @CRLF & @CRLF $sMsg &= "The Toast is automatically set to the maximum preset width and the message text " $sMsg &= "is wrapped as necessary to fit within the margins of the Toast" & @CRLF & @CRLF $sMsg &= "The Message area colours have been changed, " $sMsg &= "but the Header colours have been left unaltered although the text is now normal weight" & @CRLF & @CRLF $sMsg &= "Note the closure [X] on the title bar. This Toast will time out in 30 secs " $sMsg &= "but clicking the [X] will resume the script immediately" & @CRLF & @CRLF $sMsg &= "Toasts adjust automatically in height to display all of the message " $sMsg &= "regardless of the font, the number of lines or whether wrapping occurs" _Toast_Set(0, -1, 0xFFFF00, 0x00FF00, 0x000000, 15, "Courier New") $aRet = _Toast_Show("Max Width and Normal Header", $sMsg, -30) ConsoleWrite("Toast size: " & $aRet[0] & " x " & $aRet[1] & @CRLF) _Toast_Hide() $sMsg = "This Toast has several blank lines inserted. " $sMsg &= "This can be useful if you want to leave space to add other controls, " $sMsg &= "such as a progress bar, to the Toast once it is displayed" & @CRLF & @CRLF & @CRLF & @CRLF $sMsg &= "The Toast size is returned by the function so you can calculate " $sMsg &= "where to place the other controls. " $sMsg &= "This example script writes the size in the SciTE console" & @CRLF & @CRLF $sMsg &= "Note that Toast colours and font have been reset to Default" _Toast_Set(Default) $aRet = _Toast_Show("Progress Bar", $sMsg, 0) ConsoleWrite("Toast size: " & $aRet[0] & " x " & $aRet[1] & @CRLF) $hProgress = GUICtrlCreateProgress(10, 65, $aRet[0] - 20, 20) For $i = 1 To 100 GUICtrlSetData($hProgress, $i) Sleep(50) Next Sleep(5000) _Toast_Hide() Exit ; End of example ; #FUNCTION# ====================================================================== ; Name............: _Toast_Set ; Description ....: Sets the centring parameter, and optionally the colours and font, for _Toast_Show function calls ; Syntax..........: _Toast_Set($vStyle, [$iHdr_BkCol, [$iHdr_Col, [$iMsg_BkCol, [$iMsg_Col, [$sFont_Size, [$iFont_Name]]]]]]) ; Parameters .....: $vStyle -> 0 = Left justified, 1 = Centred (Default), 2 = Right justified ; Can use $SS_LEFT, $SS_CENTER, $SS_RIGHT ; + 4 = Header text in bold ; >>>>> Setting this parameter to' Default' will reset ALL parameters to default values <<<<< ; $iHdr_BkCol -> The colour for the title bar background ; $iHdr_Col -> The colour for the title bar text ; $iMsg_BkCol -> The colour for the message background ; $iMsg_Col -> The colour for the message text ; Omitting a colour parameter or setting it to -1 leaves it unchanged ; Setting a colour parameter to Default resets the system colour ; $iFont_Size -> The font size in points to use for the Toast ; $sFont_Name -> The font to use for the Toast ; Omitting a font parameter or setting size to -1 or name to "" leaves it unchanged ; Setting a font parameter to Default resets the system message box font or size ; Requirement(s)..: v3.2.12.1 or higher ; Return values ..: Success: Returns 0 ; Author .........: Melba23 ; Example.........; Yes ; ================================================================================ Func _Toast_Set($vStyle, $iHdr_BkCol = -1, $iHdr_Col = -1, $iMsg_BkCol = -1, $iMsg_Col = -1, $iFont_Size = -1, $sFont_Name = "") ; Set parameters If $vStyle = Default Then $iToast_Style = $SS_CENTER $iToast_Header_BkCol = _WinAPI_GetSysColor($COLOR_WINDOWTEXT) $iToast_Header_Col = _WinAPI_GetSysColor($COLOR_WINDOW) $iToast_Message_BkCol = $iToast_Header_Col $iToast_Message_Col = $iToast_Header_BkCol $sToast_Font_Name = $sDef_Toast_Font_Name $iToast_Font_Size = $iDef_Toast_Font_Size Return ElseIf $vStyle = -1 Then ; Do nothing Else $iToast_Style = $vStyle EndIf Select Case $iHdr_BkCol = Default $iToast_Header_BkCol = _WinAPI_GetSysColor($COLOR_WINDOWTEXT) Case $iHdr_BkCol >= 0 And $iHdr_BkCol <= 0xFFFFFF $iToast_Header_BkCol = $iHdr_BkCol Case Else EndSelect If $iHdr_Col <> -1 Then If StringLeft($iHdr_Col, 1) = "+" Then $iToast_Header_Bold = 1 $iHdr_Col = StringTrimLeft($iHdr_Col, 1) Else $iToast_Header_Bold = 0 EndIf Select Case $iHdr_Col = Default $iToast_Header_Col = _WinAPI_GetSysColor($COLOR_WINDOW) $iToast_Header_Bold = 0 Case $iHdr_Col >= 0 And $iHdr_Col <= 0xFFFFFF $iToast_Header_Col = $iHdr_Col Case Else EndSelect EndIf Select Case $iMsg_BkCol = Default $iToast_Message_BkCol = _WinAPI_GetSysColor($COLOR_WINDOW) Case $iMsg_BkCol >= 0 And $iMsg_BkCol <= 0xFFFFFF $iToast_Message_BkCol = $iMsg_BkCol Case Else EndSelect Select Case $iMsg_Col = Default $iToast_Message_Col = _WinAPI_GetSysColor($COLOR_WINDOWTEXT) Case $iMsg_Col >= 0 And $iMsg_Col <= 0xFFFFFF $iToast_Message_Col = $iMsg_Col Case Else EndSelect Select Case $iFont_Size = Default $iToast_Font_Size = $iDef_Toast_Font_Size Case $iFont_Size > 0 $iToast_Font_Size = $iFont_Size Case Else EndSelect Select Case $sFont_Name = Default $sToast_Font_Name = $sDef_Toast_Font_Name Case $sFont_Name = "" Case Else $sToast_Font_Name = $sFont_Name EndSelect EndFunc; => _Toast_Set ; #FUNCTION# ================================================================================= ; Name............: _Toast_Show ; Description ....: Shows a slice message from the systray ; Syntax..........: _Toast_Show($sTitle, $sMessage, [$iDelay]) ; Parameters .....: $sTitle -> Text to display on Title bar ; $sMessage -> Text to display in Toast body ; $iDelay -> The pause in seconds before the script continues (Default = 0) ; If negative, an [X] is added to the title bar. Clicking [X] continues immediately ; Requirement(s)..: v3.2.12.1 or higher ; Return values ..: Success: Returns 2-element array: [Toast width, Toast height] ; Failure: Returns -1 -- Error 1 = Toast GUI creation failed ; -- Error 2 = Taskbar not found ; Author .........: Melba23, based on some original code by GioVit for the Toast, Prog@ndy and Zedna for the [X] ; Example.........; Yes ; =========================================================================================== Func _Toast_Show($sTitle, $sMessage, $iDelay = 0) ; Define Local variables Local $iTitle_Height, $iTitle_Width, $iLabel_style Local $iClose_Height, $hClose_Pic, $hClose_Image ; Define Local arrays Local $aLabel_Pos[4], $aToast_XY[2], $aLines[1], $aLine_Len[1] ; Store current OnEventMode mode and set Message mode Local $nOldOpt = Opt('GUIOnEventMode', 0) ; Set default auto-sizing Toast widths Local $iToast_Width_max = 500 Local $iToast_Width_min = 150 ; Get message label size $aLabel_Pos = _Label_Size($sMessage, $iToast_Font_Size, $sToast_Font_Name, $iToast_Width_max - 20) ;Set line height for this font Local $iLine_Height = $aLabel_Pos[1] ; Set label size Local $iLabelwidth = $aLabel_Pos[2] Local $iLabelheight = $aLabel_Pos[3] ; Set Toast size Local $iToast_Width = $iLabelwidth + 20 If $iToast_Width < $iToast_Width_min Then ; Increase if below min size $iToast_Width = $iToast_Width_min $iLabelwidth = $iToast_Width_min - 20 EndIf ; Set title bar height to min of 19 to fit eventual [X] If $iLine_Height < 19 Then $iTitle_Height = 19 Else $iTitle_Height = $iLine_Height EndIf ; Set Toast height as label height + title bar + bottom margin Local $iToast_Height = $iLabelheight + $iTitle_Height + 20 ; Get Toast starting position and direction $aToast_XY = _Toast_Locate($iToast_Width, $iToast_Height) ; Create Toast slice $hToast_handle = GUICreate("", $iToast_Width, $iToast_Height, $aToast_XY[0], $aToast_XY[1], $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW) If @error Then $nOldOpt = Opt('GUIOnEventMode', $nOldOpt) Return SetError(1, 0, -1) EndIf GUISetFont($iToast_Font_Size, 400, 0, $sToast_Font_Name) GUISetBkColor($iToast_Message_BkCol) ; Set centring parameter If BitAND($iToast_Style, 1) = 1 Then $iLabel_style = $SS_CENTER ElseIf BitAND($iToast_Style, 2) = 2 Then $iLabel_style = $SS_RIGHT Else $iLabel_style = $SS_LEFT EndIf ; Create background title bar and disable to permit eventual [X] GUICtrlCreateLabel("", 0, 0, $iToast_Width, $iTitle_Height) GUICtrlSetBkColor(-1, $iToast_Header_BkCol) GUICtrlSetState(-1, $GUI_DISABLE) ; Create closure [X] if needed - and set title bar width If $iDelay < 0 Then ; Create pic holder and fill with bin code $iClose_Height = Int(($iTitle_Height - 15) / 2) $hClose_Pic = GUICtrlCreatePic("", $iToast_Width - 30, $iClose_Height, 28, 15) $hClose_Image = _X_Bin() _Toast_BinToImage($hClose_Pic, $hClose_Image) ; Reduce title bar width to allow [X] to activate $iTitle_Width = $iToast_Width - 40 Else ; Set placeholder and keep full width title bar $hClose_Pic = 9999 $iTitle_Width = $iToast_Width - 10 EndIf ; Create Title label with bold text, centred vertically in case bar is higher than line GUICtrlCreateLabel($sTitle, 10, 0, $iTitle_Width, $iTitle_Height, $SS_CENTERIMAGE) GUICtrlSetBkColor(-1, $iToast_Header_BkCol) GUICtrlSetColor(-1, $iToast_Header_Col) If BitAND($iToast_Style, 4) = 4 Then GUICtrlSetFont(-1, $iToast_Font_Size, 600) ; Create Message label GUICtrlCreateLabel($sMessage, 10, 10 + $iLine_Height, $iLabelwidth, $iLabelheight) GUICtrlSetStyle(-1, $iLabel_Style) If $iToast_Message_Col <> Default Then GUICtrlSetColor(-1, $iToast_Message_Col) ; Show Toast GUI GUISetState(@SW_SHOW, $hToast_handle) ; Slide Toast Slice into view from behind systray Select Case $sToast_Direction = "Down" _Toast_Move(0, $iToast_Height) Case $sToast_Direction = "Up" _Toast_Move(0, -$iToast_Height) Case $sToast_Direction = "Left" _Toast_Move(-$iToast_Width, 0) Case $sToast_Direction = "Right" _Toast_Move($iToast_Width, 0) EndSelect ; Begin timeout counter Local $iTimeout_begin = TimerInit() ; Wait for timeout or closure While 1 Local $aMsg = GUIGetMsg(1) If $aMsg[1] = $hToast_handle And $aMsg[0] = $hClose_Pic Then ExitLoop ; Timeout If TimerDiff($iTimeout_begin) / 1000 >= Abs($iDelay) Then ExitLoop WEnd ; Reset OnEventMode mode $nOldOpt = Opt('GUIOnEventMode', $nOldOpt) ; Create array to return Toast dimensions Dim $aToast_XY[2] = [$iToast_Width, $iToast_Height] Return $aToast_XY EndFunc; => _Toast_Show ; #FUNCTION# ====================================================================== ; Name............: _Toast_Hide ; Description ....: Hides a slice message from the systray ; Syntax..........: _Toast_Hide() ; Requirement(s)..: v3.2.12.1 or higher ; Return values ..: Success: Returns 0 ; Failure: Returns -1 -- Error 1 = Toast does not exist ; Author .........: Melba23, based on some original code by GioVit ; Example.........; Yes ; ================================================================================ Func _Toast_Hide() ; Define Local array Local $aToast_Pos[4] ; If no Toast to hide, return If $hToast_handle = 0 Then Return SetError(1, 0, -1) ; Get Toast data $aToast_Pos = WinGetPos($hToast_handle) ; Slide Toast back behind systray Select Case $sToast_Direction = "Down" _Toast_Move(0, -$aToast_Pos[1] - $aToast_Pos[3], 500) Case $sToast_Direction = "Up" _Toast_Move(0, @DesktopHeight - $aToast_Pos[1], 500) Case $sToast_Direction = "Left" _Toast_Move(@DesktopWidth - $aToast_Pos[0], 0, 500) Case $sToast_Direction = "Right" _Toast_Move(-$aToast_Pos[0] - $aToast_Pos[2], 0, 500) EndSelect ; Delete Toast slice GUIDelete($hToast_handle) ; Set flag for "no Toast" $hToast_handle = 0 EndFunc; => _Toast_Hide ; ================================================================================= ; Internal functions ; ================================================================================= ; Move the Toast in and out Func _Toast_Move($iXpos, $iYpos, $iTimer = 1000) ; Define Local variables Local $iMoves, $iDeltaX, $iDeltaY ; Define Local array Local $aToast_Pos[4] ; Calculate number of moves needed $iMoves = Round($iTimer / 15) ; Set increments $iDeltaX = $iXpos/$iMoves $iDeltaY = $iYpos/$iMoves ; Get Toast position data $aToast_Pos = WinGetPos($hToast_handle) ; Slide Toast For $i = 1 To $iMoves; - 1 WinMove($hToast_handle, "", $aToast_Pos[0] + $iDeltaX * $i, $aToast_Pos[1] + $iDeltaY * $i) Sleep(15) Next EndFunc; => _Toast_Move ; ------- ; Find Systray and determine Toast start position and movement direction Func _Toast_Locate($iToast_Width, $iToast_Height) ; Define Local variable Local $iPrevMode ; Define Local arrays Local $aTray_Pos[4], $aToast_XY[2] ; Find systray $iPrevMode = AutoItSetOption("WinTitleMatchMode", 4) $aTray_Pos = WinGetPos("classname=Shell_TrayWnd") AutoItSetOption("WinTitleMatchMode", $iPrevMode) ; If error in finding systray If @error Then Return SetError(2, 0, -1) ; Determine direction of Toast motion and starting position If $aTray_Pos[1] > 0 Then $sToast_Direction = "Up" $aToast_XY[0] = @DesktopWidth - $iToast_Width - 10 $aToast_XY[1] = $aTray_Pos[1] Elseif $aTray_Pos[0] > 0 Then $sToast_Direction = "Left" $aToast_XY[0] = $aTray_Pos[0] $aToast_XY[1] = @DesktopHeight - $iToast_Height - 10 ElseIf $aTray_Pos[2] = @DesktopWidth Then $sToast_Direction = "Down" $aToast_XY[0] = @DesktopWidth - $iToast_Width - 10 $aToast_XY[1] = $aTray_Pos[1] + $aTray_Pos[3] - $iToast_Height ElseIf $aTray_Pos[3] = @DesktopHeight Then $sToast_Direction = "Right" $aToast_XY[0] = $aTray_Pos[0] + $aTray_Pos[2] - $iToast_Width $aToast_XY[1] = @DesktopHeight - $iToast_Height - 10 EndIf Return $aToast_XY EndFunc; => _Toast_Locate ; ------------ ; Adds the [X] to the title bar - Modified from an original script by Prog@ndy and Zedna Func _Toast_BinToImage($CtrlId, ByRef $Binary) Local $hData, $pData, $pStream, $pBitmap, $hBitmap Local Const $STM_SETIMAGE = 0x0172, $IMAGE_BITMAP = 0, $SS_BITMAP = 0xE, $GWL_STYLE = -16 ; Get bin data into structure Local $picdata = Binary($Binary) Local $piclength = BinaryLen($picdata) Local $picstruct = DllStructCreate("byte[" & $piclength & "]") DllStructSetData($picstruct, 1, $picdata) ; Get bin data into memory Local $picmemory = DllStructGetPtr($picstruct) $hData = _MemGlobalAlloc($piclength, 2) $pData = _MemGlobalLock($hData) _MemMoveMemory($picmemory, $pData, $piclength) _MemGlobalUnlock($hData) ; Create stream $pStream = DllCall( "ole32.dll", "int", "CreateStreamOnHGlobal", "int", $hData, "long", 1, "Int*", 0) $pStream = $pStream[3] ; Create image from stream _GDIPlus_Startup() $pBitmap = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0) $pBitmap = $pBitmap[2] $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap) ; Set image in control Local $hWnd = GUICtrlGetHandle($CtrlId) If $hWnd = 0 Then Return SetError(1, 0, -1) Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE) If @error Then Return SetError(2, 0, -1) DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP)) If @error Then Return SetError(3, 0, -1) Local $oldBmp = DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hWnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap) If @error Then Return SetError(4, 0, -1) ; Clear up If $oldBmp[0] <> 0 Then _WinAPI_DeleteObject($oldBmp[0]) _GDIPlus_BitmapDispose($pBitmap) _GDIPlus_Shutdown() _WinAPI_DeleteObject($pStream) _MemGlobalFree($hData) DllStructSetData($picstruct, 1, 0) $picstruct = "" EndFunc; =>_Toast_BinToImage ; ------------ Func _X_Bin() ; The [X] jpg in bin form Local $FileName = "0x" $FileName &= "ffd8ffe000104a46494600010101006000600000ffdb00430008060607060508" $FileName &= "0707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720" $FileName &= "222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909" $FileName &= "090c0b0c180d0d1832211c213232323232323232323232323232323232323232" $FileName &= "323232323232323232323232323232323232323232323232323232323232ffc0" $FileName &= "001108000f001c03012200021101031101ffc4001f0000010501010101010100" $FileName &= "000000000000000102030405060708090a0bffc400b510000201030302040305" $FileName &= "0504040000017d01020300041105122131410613516107227114328191a10823" $FileName &= "42b1c11552d1f02433627282090a161718191a25262728292a3435363738393a" $FileName &= "434445464748494a535455565758595a636465666768696a737475767778797a" $FileName &= "838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7" $FileName &= "b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1" $FileName &= "f2f3f4f5f6f7f8f9faffc4001f01000301010101010101010100000000000001" $FileName &= "02030405060708090a0bffc400b5110002010204040304070504040001027700" $FileName &= "0102031104052131061241510761711322328108144291a1b1c109233352f015" $FileName &= "6272d10a162434e125f11718191a262728292a35363738393a43444546474849" $FileName &= "4a535455565758595a636465666768696a737475767778797a82838485868788" $FileName &= "898a92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4" $FileName &= "c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9" $FileName &= "faffda000c03010002110311003f00b3a169be154f0e6926e34fd10dc358c0f2" $FileName &= "19e088b9631a924ee19c9249c9f5a9f4dd0b4fd4adae278b4ff0a110b1fb597b" $FileName &= "189069cb82c257249134454310cbb32540217e7f2b87b5bed327d36c58ea7046" $FileName &= "c9696f13a3c72e55844aa47087ae3ae48adad3fc5f3e93696b6da76bda6da476" $FileName &= "d299f10da4e0dcb9182d3920f9991c606d001e00da9b12e6bea8f66ae1297b28" $FileName &= "3a4d3935adeda686e69f6be1796d8b5c587879b2e76482c2184c89d98c6db8c7" $FileName &= "9fee96271827692557cc7e2adb69b69e24b2fecbb7b386096c55d85ac6810b79" $FileName &= "920cf031d001f856f3dd698f24b2ff006969d6eaf21c456f6f3a45193d914ab1" $FileName &= "51df19207418180390f1b5e59dc6a160b6f7293ac569b0baab019f3646eea3fb" $FileName &= "c3b524e5d858ac361e3423284bded2eb4ec7ffd9" Return $FileName EndFunc; =>_X_Bin()  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now