Moderators Melba23 Posted February 23, 2012 Author Moderators Posted February 23, 2012 z0iid, Not sure I like that comparison! I have taken a look and it does not seem too difficult to meet your requirements. Would Sir like the ability to determine the Slide/Fade setting and the In/Out timings for each Notification separately or would he accept a Global setting for them all? M23 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
Moderators Melba23 Posted February 24, 2012 Author Moderators Posted February 24, 2012 (edited) z0iid,I went ahead and made it possible to do both. I attach the modified UDF and example - read the function headers for _Notify_Set and _Notify_Show to see how I have implemented it. The example explains how the various setting are changed as the script progresses.Let me know what you think - I am pretty happy with it. M23P.S. And if anyone else wants to comment - feel free! Edited February 24, 2012 by Melba23 Added P.S. 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
z0iid Posted February 24, 2012 Posted February 24, 2012 (edited) lol - no, the comparison was with regards to the "Some people are never satisifed!" comment. (She was never satisfied - now her lack of satisfaction is someone elses problem)I certainly don't want to be known as a demanding/trouble forum user.... let other users (the community) decide how to implement the feature. (although, Global is certainly acceptable for me, and how I will use the feature.)btw - your UDF's are great training resources for me since i don't know standards....I hope to learn by example.**edit**looked at the changes, and example - fantastic, love it.I may spend some time integrating this into a systemwide app (similar to growl) that can accept "feeds" from other apps, event logs, etc - what ever the user wants to subscribe to for notifications. *shrug*.... but with the existence of growl, it probably wouldn't be used many places except for the organization i work for. z0iid,Not sure I like that comparison! I have taken a look and it does not seem too difficult to meet your requirements. Would Sir like the ability to determine the Slide/Fade setting and the In/Out timings for each Notification separately or would he accept a Global setting for them all? M23 Edited February 24, 2012 by z0iid
Moderators Melba23 Posted February 24, 2012 Author Moderators Posted February 24, 2012 z0iid,I certainly don't want to be known as a demanding/trouble forum userYou are not - I enjoy the challenge. But I think I have done enough on this UDF for a while (hint!). i don't know standards....I hope to learn by exampleWell do not take me as a paragon of perfection - all I had were some university programming classes in Fortran about 40 years ago! But I hope my code is clear and logical - I try to do that so upgrading it is easy later on. I think I have proved the point over the past few days. How do you find the Slide/Fade implementation? Using negative/positive parameters is one of my favourite tricks to prevent having too many of the damn things. M23 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
z0iid Posted February 24, 2012 Posted February 24, 2012 z0iid,You are not - I enjoy the challenge. But I think I have done enough on this UDF for a while (hint!). Well do not take me as a paragon of perfection - all I had were some university programming classes in Fortran about 40 years ago! But I hope my code is clear and logical - I try to do that so upgrading it is easy later on. I think I have proved the point over the past few days. How do you find the Slide/Fade implementation? Using negative/positive parameters is one of my favourite tricks to prevent having too many of the damn things. M23When I saw the implementation using negative/positive parameters, it was an "AhHA!" moment for me. Like "why didn't I think of that..."
Moderators Melba23 Posted February 24, 2012 Author Moderators Posted February 24, 2012 z0iid, I take it you like the idea, then... M23 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
Rogue5099 Posted March 22, 2012 Posted March 22, 2012 Great work, I can't wait till I find a use for this in some type of program. Usually I just write code for personal use but would be nice to show your stuff to friends that share the same interest. My projects: Inventory / Mp3 Inventory, Computer Stats
rcmaehl Posted April 6, 2012 Posted April 6, 2012 Why you no have screenshots!? Anyway, Suggestion: Allow the notifications to partly stick out from the side of the screen (idk 10px shown) and then show when the user clicks on them. My UDFs are generally for me. If they aren't updated for a while, it means I'm not using them myself. As soon as I start using them again, they'll get updated.My Projects WhyNotWin11Cisco Finesse, Github, IRC UDF, WindowEx UDF
qwert Posted April 6, 2012 Posted April 6, 2012 My thoughts, exactly. But an alternative would be to have them pop into view if the mouse is moved to the right edge of the screen for one second.
Moderators Melba23 Posted April 9, 2012 Author Moderators Posted April 9, 2012 rcmaehl & qwert, Does this beta version meet your requirements? expandcollapse popup#include-once ; #INDEX# ============================================================================================================ ; Title .........: Notify ; AutoIt Version : 3.3.2.0+ - uses AdlibRegister/Unregister ; Language ......: English ; Description ...: Show and hides pop-out notifications from the side of the screen in user defined colours and fonts ; Author(s) .....: Melba23 - credit to UEZ for the PNG code ; ==================================================================================================================== ;#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 ; #INCLUDES# ========================================================================================================= #include <StringSize.au3> #include <GDIPlus.au3> ; #GLOBAL VARIABLES# ================================================================================================= ; Create array to hold data for Notifications ; [0][0] = Count [n][0] = Handle ; [0][1] = Max avail [n][1] = Timer duration ; [0][2] = X-coord [n][2] = Timer stamp ; [0][3] = Low Y-coord [n][3] = Clickable ; [0][4] = Location [n][4] = X-Coord ; [0][5] = Not Index [n][5] = Extended X-Coord ; [n][6] = Hide timing and style Global $aNotify_Data[1][7] = [[0, Int((@DesktopHeight - 60) / 50), @DesktopWidth - 10, @DesktopHeight - 10, 0, 0, 0]] ; Adjust values according to taskbar position and desired location _Notify_Locate(0) ; Create array to hold default and current Notification values - [0][n] = Default, [1][n] = Current ; [n][0] Style [n][1] Col [n][2] BkCol [n][3] Font [n][4] Slide [n][5] In time [n][6] Out time [n][7] Margin show Global $aNotify_Settings[2][8] = [[1, 0, 0, _Notify_GetDefFont(), False, 1000, 500, 0],[0, 0, 0, 0, 0, 0, 0, 0]] ; Create array to show active retraction modes - ; [0] Timer active [1] Click active [2][2] Global $aNotify_RetractMode[2] = [False, False] Global $aNotify_Ret = DllCall("User32.dll", "int", "GetSysColor", "int", 8) ; $COLOR_WINDOWTEXT = 8 $aNotify_Settings[0][1] = $aNotify_Ret[0] $aNotify_Ret = DllCall("User32.dll", "int", "GetSysColor", "int", 5) ; $COLOR_WINDOW = 5 $aNotify_Settings[0][2] = $aNotify_Ret[0] ; Use the defaults as current settings For $i = 0 To UBound($aNotify_Settings, 2) - 1 $aNotify_Settings[1][$i] = $aNotify_Settings[0][$i] Next ; #CURRENT# ========================================================================================================== ; _Notify_Locate: Determine notification start position, direction of movement and maximum number ; _Notify_Set: Sets justification, colours, font and display options for notifications ; _Notify_Show: Shows a notification and optionally sets show/hide options ; _Notify_Hide: Hides a notification programatically ; _Notify_RegMsg: Registers the WM_MOUSEACTIVATE message to enable retraction of the notification on clicking ; ==================================================================================================================== ; #INTERNAL_USE_ONLY#================================================================================================= ; _Notify_Timer: Checks whether a notification has timed out ; _Notify_WM_MOUSEACTIVATE: Message handler to check if notification clicked ; _Notify_Extend: Extend a notification when initially shown in margin ; _Notify_Delete: Retract a notification when timed out or clicked ; _Notify_Reset: Reposition remaining notifications on screen ; _Notify_GetDefFont: Determine system default MsgBox font ; _Show_PNG: Set PNG as image ; _BitmapCreateDIB: Create bitmap ; ==================================================================================================================== ; #FUNCTION# ========================================================================================================= ; Name...........: _Notify_Locate ; Description ...: Determine notification start position, direction of movement and maximum number ; Syntax ........: _Notify_Locate($iLocation) ; Parameters ....: $iLocation - Start point and direction for Notifications ; 0 = Bottom right upwards (default) ; 1 = Top right downwards ; 2 = Top left downwards ; 3 = Bottom left upwards ; Requirement(s).: v3.3.2.0 or higher - AdlibRegister/Unregister used in _Notify_Show ; Return values .: Success - Returns 1 ; Failure - Returns 0 and sets @error as follows ; 1 = Notificatiosn displayed ; 2 = Invalid parameter ; Author ........: Melba23 ; Remarks .......: This function will only set or reset the location if no notifications are displayed ; Example........: Yes ; =============================================================================================================================== Func _Notify_Locate($iLocation) ; Can only reset notification location when no notifications are displayed If $aNotify_Data[0][0] Then Return SetError(1, 0, 0) EndIf ; Check valid parameter Switch $iLocation Case 0 To 3 $aNotify_Data[0][4] = $iLocation Case Else Return SetError(2, 0, 0) EndSwitch Local $tWorkArea ; Determine which struct syntax to use to use If @AutoItVersion < "3.3.8.0" Then $tWorkArea = DllStructCreate("long Left;long Top;long Right;long Bottom") Else $tWorkArea = DllStructCreate("struct;long Left;long Top;long Right;long Bottom;endstruct") EndIf ; Check if Taskbar is hidden Local $aRet = DllCall("shell32.dll", "uint", "SHAppBarMessage", "dword", 0x00000004, "ptr*", 0) ; $ABM_GETSTATE If BitAND($aRet[0], 0x01) Then ; Set max number available $aNotify_Data[0][1] = Int((@DesktopHeight - 60) / 50) ; Adjust data array depending on required location Switch $iLocation Case 0 ; From bottom right $aNotify_Data[0][3] = @DesktopHeight - 10 ; bottom Y $aNotify_Data[0][2] = @DesktopWidth - 10 ; right X Case 1 ; From top right $aNotify_Data[0][3] = 10 ; top Y $aNotify_Data[0][2] = @DesktopWidth - 10 ; right X Case 2 ; From top left $aNotify_Data[0][3] = 10 ; top Y $aNotify_Data[0][2] = 10 ; left X Case 3 ; From bottom left $aNotify_Data[0][3] = @DesktopHeight - 10 ; bottom Y $aNotify_Data[0][2] = 10 ; left X EndSwitch Else ; Determine available work area ; $SPI_GETWORKAREA = 48 DllCall("user32.dll", "bool", "SystemParametersInfoW", "uint", 48, "uint", 0, "ptr", DllStructGetPtr($tWorkArea), "uint", 0) If @error Then Return SetError(2, 0, -1) Local $aWorkArea[4] = [DllStructGetData($tWorkArea, "Left"), DllStructGetData($tWorkArea, "Top"), _ DllStructGetData($tWorkArea, "Right"), DllStructGetData($tWorkArea, "Bottom")] ; Set max number available $aNotify_Data[0][1] = Int(($aWorkArea[3] - $aWorkArea[1] - 60) / 50) ; Adjust data array depending on required location Switch $iLocation Case 0 ; From bottom right $aNotify_Data[0][3] = $aWorkArea[3] - 10 ; bottom Y $aNotify_Data[0][2] = $aWorkArea[2] - 10 ; right X Case 1 ; From top right $aNotify_Data[0][3] = $aWorkArea[1] + 10 ; top Y $aNotify_Data[0][2] = $aWorkArea[2] - 10 ; right X Case 2 ; From top left $aNotify_Data[0][3] = $aWorkArea[1] + 10 ; top Y $aNotify_Data[0][2] = $aWorkArea[0] + 10 ; left X Case 3 ; From bottom left $aNotify_Data[0][3] = $aWorkArea[3] - 10 ; bottom Y $aNotify_Data[0][2] = $aWorkArea[0] + 10 ; left X EndSwitch EndIf Return 1 EndFunc ;==>_Notify_Locate ; #FUNCTION# ========================================================================================================= ; Name...........: _Notify_Set ; Description ...: Sets justification, colours, font and display options for notifications ; Syntax.........: _Notify_Set($vJust, [$iCol, [$iBkCol, [$iFont_Name, [$fSlide, [$iShow, [$iHide]]]]]]) ; Parameters ....: $vJust - 0 = Left justified, 1 = Centred (Default), 2 = Right justified ; Can use $SS_LEFT, $SS_CENTER, $SS_RIGHT ; + 4 = Partial initial extension - click for full extension ; >>>>> Setting this parameter to "Default" will reset ALL parameters to default values <<<<< ; $iCol - [Optional] The colour for the notification text ; $iBkCol - [Optional] The colour for the notification background ; Either colour parameter not set or -1 = Unchanged ; Either colour parameter = Default - Resets the system colour ; $sFont_Name - [Optional] The font to use for the notification ; Not set or "" = unchanged (default) ; Default - Resets the system message box font ; $fSlide - [Optional] Movement of notifications into new position when one retracts ; False = Instant (default) ; True = Slide ; £iShow - [Optional] Speed and type of display (minimum 250ms) - Default = 1000ms Slide ; Positive integer = Slide in time in ms ; Negative integer = Fade in time in ms ; £iHide - [Optional] Speed and type of retraction (minimum 250ms) - Default = 500ms Slide ; Positive integer = Slide out time in ms ; Negative integer = Fade out time in ms ; Requirement(s).: v3.3.2.0 or higher - AdlibRegister/Unregister used in _Notify_Show ; Return values .: Success - Returns 1 ; Failure - Returns 0 and sets @error to 1 with @extended set to parameter index number ; Author ........: Melba23 ; Example........; Yes ;===================================================================================================================== Func _Notify_Set($vJust, $iCol = -1, $iBkCol = -1, $sFont_Name = "", $fSlide = False, $iShow = Default, $iHide = Default) ; Set parameters Select Case $vJust = Default ; Do nothing ; $aNotify_Settings[1][7] = 0 Case BitAND($vJust, 4) $aNotify_Settings[1][7] = 1 $vJust -= 4 Case Else $aNotify_Settings[1][7] = 0 EndSelect Switch $vJust Case Default For $i = 0 To UBound($aNotify_Settings, 2) - 1 $aNotify_Settings[1][$i] = $aNotify_Settings[0][$i] Next Return Case 0, 1, 2 $aNotify_Settings[1][0] = $vJust Case Else Return SetError(1, 1, 0) EndSwitch Switch $iCol Case Default $aNotify_Settings[1][1] = $aNotify_Settings[0][1] Case 0 To 0xFFFFFF $aNotify_Settings[1][1] = $iCol Case -1 ; Do nothing Case Else Return SetError(1, 2, 0) EndSwitch Switch $iBkCol Case Default $aNotify_Settings[1][2] = $aNotify_Settings[0][2] Case 0 To 0xFFFFFF $aNotify_Settings[1][2] = $iBkCol Case -1 ; Do nothing Case Else Return SetError(1, 3, 0) EndSwitch Switch $sFont_Name Case Default $aNotify_Settings[1][3] = $aNotify_Settings[0][3] Case "" ; Do nothing Case Else If IsString($sFont_Name) Then $aNotify_Settings[1][3] = $sFont_Name Else Return SetError(1, 4, 0) EndIf EndSwitch If $fSlide = True Then $aNotify_Settings[0][4] = True Else $aNotify_Settings[0][4] = False EndIf Select Case $iShow = Default $aNotify_Settings[1][5] = $aNotify_Settings[0][5] Case IsInt($iShow) = 0 Return SetError(1, 6, 0) Case Abs($iShow) < 250 If $iShow < 0 Then $aNotify_Settings[1][5] = -250 Else $aNotify_Settings[1][5] = 250 EndIf Case Else $aNotify_Settings[1][5] = $iShow EndSelect Select Case $iHide = Default $aNotify_Settings[1][6] = $aNotify_Settings[0][6] Case IsInt($iHide) = 0 Return SetError(1, 7, 0) Case Abs($iHide) < 250 If $iHide < 0 Then $aNotify_Settings[1][6] = -250 Else $aNotify_Settings[1][6] = 250 EndIf Case Else $aNotify_Settings[1][6] = $iHide EndSelect Return 1 EndFunc ;==>_Notify_Set ; #FUNCTION# ========================================================================================================= ; Name...........: _Notify_Show ; Description ...: Shows a notification and optionally sets show/hide options ; Syntax.........: _Notify_Show($vIcon, $sTitle, $sMessage, [$iDelay [, $iClick, [$iShow, [$iHide]]]]) ; Parameters ....: $vIcon - 0 - No icon, 8 - UAC, 16 - Stop, 32 - Query, 48 - Exclamation, 64 - Information ; The $MB_ICON constant can also be used for the last 4 above ; If set to the name of an exe, the main icon of that exe will be displayed ; If set to the name of an image file, that image will be displayed ; Any other value returns -1, error 1 ; $sTitle - Text to display as title in bold ; $sMessage - Text to display as message ; If $sTitle = "" then $sText can take 2 lines ; $iDelay - The delay in seconds before the notification retracts (Default = 0 = Remains indefinitely) ; $iClick - If notification will retact when clicked (Default = 1 = Clickable) ; £iShow - [Optional] Speed and type of display (minimum 250ms) - will override current _Notify_Set setting ; Positive integer = Slide in time in ms ; Negative integer = Fade in time in ms ; Default = Use current _Notify_Set setting ; £iHide - [Optional] Speed and type of retraction (minimum 250ms) - will override current _Notify_Set setting ; Positive integer = Slide out time in ms ; Negative integer = Fade out time in ms ; Default = Use current _Notify_Set setting ; Requirement(s).: v3.3.1.5 or higher - AdlibRegister/Unregister used in _Notify_Show ; Return values .: Success: Returns the handle of the Notification ; Failure: Returns -1 and sets @error as follows: ; 1 = Maximum number of notification that can be displayed ; 2 = Icon parameter invalid ; 3 = Other parameter invalid (@extended 1=$iDelay, 2=$iClick, 3=$iShow, 4=$iHide) ; 4 = StringSize error ; 5 = Title/text will not fit in widest message (@extended = 0/1 = Title/Text) ; 6 = Notification GUI creation failed ; Author ........: Melba23 ; Notes .........; ; Example........; Yes ;===================================================================================================================== Func _Notify_Show($vIcon, $sTitle, $sMessage, $iDelay = 0, $iClick = 1, $iShow = Default, $iHide = Default) ; Check for space to show If $aNotify_Data[0][0] = $aNotify_Data[0][1] Then Return SetError(1, 0, -1) EndIf Local $aLabel_Pos, $iLabel_Width, $iLabel_Height = 20 ; Set default auto-sizing Notify dimensions Local $iNotify_Width_max = 300 Local $iNotify_Width_min = 150 Local $iNotify_Height = 40 ; Check for icon Local $iIcon_Style = 0 Local $iIcon_Reduction = 36 Local $sDLL = "user32.dll" Local $sImg = "" If StringIsDigit($vIcon) Then Switch $vIcon Case 0 $iIcon_Reduction = 0 Case 8 $sDLL = "imageres.dll" $iIcon_Style = 78 Case 16 ; Stop $iIcon_Style = -4 Case 32 ; Query $iIcon_Style = -3 Case 48 ; Exclam $iIcon_Style = -2 Case 64 ; Info $iIcon_Style = -5 Case Else Return SetError(1, 0, -1) EndSwitch Else Switch StringLower(StringRight($vIcon, 3)) Case "exe", "ico" $sDLL = $vIcon $iIcon_Style = 0 Case "bmp", "jpg", "gif", "png" $sImg = $vIcon EndSwitch EndIf ; Check other parameters If $iDelay < 0 Then Return SetError(3, 1, -1) Else $iDelay = Int($iDelay) EndIf Switch $iClick Case 0, 1 ; Valid Case Else Return SetError(3, 2, -1) EndSwitch Select Case $iShow = Default $iShow = $aNotify_Settings[1][5] Case IsInt($iShow) = 0 Return SetError(3, 3, -1) Case Abs($iShow) < 250 If $iShow < 0 Then $iShow = -250 Else $iShow = 250 EndIf EndSelect Select Case $iHide = Default $iHide = $aNotify_Settings[1][6] Case IsInt($iHide) = 0 Return SetError(3, 4, -1) Case Abs($iHide) < 250 If $iHide < 0 Then $iHide = -250 Else $iHide = 250 EndIf EndSelect ; Determine max message width Local $iMax_Label_Width = $iNotify_Width_max - $iIcon_Reduction - 8 ; Get text size If $sTitle Then ; Measure title $aLabel_Pos = _StringSize($sTitle, 9, Default, Default, $aNotify_Settings[1][3]) If @error Then Return SetError(4, 0, -1) EndIf ; Check fits horizontally If $aLabel_Pos[2] > $iMax_Label_Width Then Return SetError(5, 0, -1) Else ; Set width required $iLabel_Width = $aLabel_Pos[2] EndIf ; Measure message $aLabel_Pos = _StringSize($sMessage, 9, Default, Default, $aNotify_Settings[1][3]) If @error Then Return SetError(4, 0, -1) EndIf ; Check fits horizontally If $aLabel_Pos[2] > $iMax_Label_Width Then Return SetError(5, 1, -1) Else ; Adjust width required if needed If $aLabel_Pos[2] > $iLabel_Width Then $iLabel_Width = $aLabel_Pos[2] EndIf EndIf Else ; Measure message $aLabel_Pos = _StringSize($sMessage, 9, Default, Default, $aNotify_Settings[1][3], $iMax_Label_Width) If @error Then Return SetError(4, 0, -1) EndIf ; If wrapped check still fits vertically If $aLabel_Pos[3] > 40 Then Return SetError(5, 1, -1) EndIf ; Check fits horizontally If $aLabel_Pos[2] > $iMax_Label_Width Then Return SetError(5, 1, -1) Else ; Set Notification size and label position If $aLabel_Pos[2] > $iLabel_Width Then $iLabel_Width = $aLabel_Pos[2] EndIf $sMessage = $aLabel_Pos[0] ; Adjust vertical position to centre lines Local $iLabel_Y = Int((40 - $aLabel_Pos[3]) / 2) EndIf EndIf ; Set Notify size Local $iNotify_Width = $iLabel_Width + 8 + $iIcon_Reduction ; Increase if below min size If $iNotify_Width < $iNotify_Width_min + $iIcon_Reduction Then $iNotify_Width = $iNotify_Width_min + $iIcon_Reduction $iLabel_Width = $iNotify_Width_min - 8 EndIf ; Set Notify coords depending on location Local $iNotify_X, $iNotify_Y, $iFinal_X = 0 Switch $aNotify_Data[0][4] Case 0 ; From bottom right If $aNotify_Settings[1][7] Then $iNotify_X = @DesktopWidth - 10 $iFinal_X = $aNotify_Data[0][2] - $iNotify_Width Else $iNotify_X = $aNotify_Data[0][2] - $iNotify_Width EndIf $iNotify_Y = $aNotify_Data[0][3] - (50 * ($aNotify_Data[0][0] + 1)) Case 1 ; From top right If $aNotify_Settings[1][7] Then $iNotify_X = @DesktopWidth - 10 $iFinal_X = $aNotify_Data[0][2] - $iNotify_Width Else $iNotify_X = $aNotify_Data[0][2] - $iNotify_Width EndIf $iNotify_Y = $aNotify_Data[0][3] + (50 * ($aNotify_Data[0][0])) Case 2 ; From top left If $aNotify_Settings[1][7] Then $iNotify_X = -($iNotify_Width - 10) $iFinal_X = $aNotify_Data[0][2] Else $iNotify_X = $aNotify_Data[0][2] EndIf $iNotify_Y = $aNotify_Data[0][3] + (50 * ($aNotify_Data[0][0])) Case 3 ; From bottom left If $aNotify_Settings[1][7] Then $iNotify_X = -($iNotify_Width - 10) $iFinal_X = $aNotify_Data[0][2] Else $iNotify_X = $aNotify_Data[0][2] EndIf $iNotify_Y = $aNotify_Data[0][3] - (50 * ($aNotify_Data[0][0] + 1)) EndSwitch ; Create Notify slice with $WS_POPUPWINDOW style and $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST and $WS_EX_STATICEDGE extended style Local $hNotify_Handle = GUICreate("", $iNotify_Width, $iNotify_Height, $iNotify_X, $iNotify_Y, 0x80880000, BitOR(0x00020000, 0x00000080, 0x00000008)) If @error Then Return SetError(6, 0, -1) EndIf GUISetBkColor($aNotify_Settings[1][2]) ; Create icon If $iIcon_Reduction Then Switch StringLower(StringRight($sImg, 3)) Case "bmp", "jpg", "gif" GUICtrlCreatePic($sImg, 4, 4, 32, 32) Case "png" _Show_PNG($sImg) Case Else GUICtrlCreateIcon($sDLL, $iIcon_Style, 4, 4) EndSwitch EndIf ; Create labels If $sTitle Then ; Title GUICtrlCreateLabel($sTitle, 4 + $iIcon_Reduction, 0, $iLabel_Width, $iLabel_Height) GUICtrlSetFont(-1, 9, 800, 0, $aNotify_Settings[1][3]) GUICtrlSetBkColor(-1, $aNotify_Settings[1][2]) GUICtrlSetColor(-1, $aNotify_Settings[1][1]) GUICtrlSetStyle(-1, $aNotify_Settings[1][0]) ; Message GUICtrlCreateLabel($sMessage, 4 + $iIcon_Reduction, 20, $iLabel_Width, $iLabel_Height) GUICtrlSetFont(-1, 9, 400, 0, $aNotify_Settings[1][3]) GUICtrlSetBkColor(-1, $aNotify_Settings[1][2]) GUICtrlSetColor(-1, $aNotify_Settings[1][1]) GUICtrlSetStyle(-1, $aNotify_Settings[1][0]) Else ; Message GUICtrlCreateLabel($sMessage, 4 + $iIcon_Reduction, $iLabel_Y, $iLabel_Width, 40 - $iLabel_Y) GUICtrlSetFont(-1, 9, 400, 0, $aNotify_Settings[1][3]) GUICtrlSetBkColor(-1, $aNotify_Settings[1][2]) GUICtrlSetColor(-1, $aNotify_Settings[1][1]) GUICtrlSetStyle(-1, $aNotify_Settings[1][0]) EndIf ; Slide/Fade Notify Slice into view and activate If Not $aNotify_Settings[1][7] Then Local $iTime = Abs($iShow) If $iShow >= 0 Then Switch $aNotify_Data[0][4] Case 0, 1 DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hNotify_Handle, "int", $iTime, "long", 0x00040002) ; $AW_SLIDE_IN_RIGHT Case 2, 3 DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hNotify_Handle, "int", $iTime, "long", 0x00040001) ; $AW_SLIDE_IN_LEFT EndSwitch Else DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hNotify_Handle, "int", $iTime, "long", 0x00080000) ; $AW_FADE_IN EndIf EndIf ; Activate Notify without stealing focus GUISetState(@SW_SHOWNOACTIVATE, $hNotify_Handle) ; Store Notify data $aNotify_Data[0][0] += 1 ReDim $aNotify_Data[$aNotify_Data[0][0] + 1][7] $aNotify_Data[$aNotify_Data[0][0]][0] = $hNotify_Handle $aNotify_Data[$aNotify_Data[0][0]][1] = $iDelay * 1000 $aNotify_Data[$aNotify_Data[0][0]][2] = TimerInit() $aNotify_Data[$aNotify_Data[0][0]][3] = $iClick $aNotify_Data[$aNotify_Data[0][0]][4] = $iNotify_X $aNotify_Data[$aNotify_Data[0][0]][5] = $iFinal_X $aNotify_Data[$aNotify_Data[0][0]][6] = $iHide ; Start Adlib function for Notify retraction If $aNotify_Data[0][0] = 1 Then AdlibRegister("_Notify_Timer", 1000) EndIf Return $hNotify_Handle EndFunc ;==>_Notify_Show ; #FUNCTION# ========================================================================================================= ; Name...........: _Notify_Hide ; Description ...: Hide a notification ; Syntax.........: _Notify_Show($hWnd) ; Parameters ....: None ; Requirement(s).: v3.3.1.5 or higher - AdlibRegister/Unregister used in _Notify_Show ; Return values .: Success: Returns 1 ; Failure: Returns 0 and sets @error as follows: ; 1 = Invalid handle passed ; 2 = Handle not found in Notification array ; Author ........: Melba23 ; Notes .........; ; Example........; Yes ;===================================================================================================================== Func _Notify_Hide($hWnd) ; Check for valid handle If Not IsHWnd($hWnd) Then Return SetError(1, 0, 0) ; Look for handle in array For $i = 1 To $aNotify_Data[0][0] If $aNotify_Data[$i][0] = $hWnd Then $aNotify_Data[0][5] = $i ; If found then retract _Notify_Delete() _Notify_Reset() Return 1 EndIf Next ; Handle was not found Return SetError(2, 0, 0) EndFunc ;==>_Notify_Hide ; #FUNCTION# ========================================================================================================= ; Name...........: _Notify_RegMsg ; Description ...: Registers WM_MOUSEACTIVATE message needed for the UDF ; Syntax.........: _Notify_RegMsg() ; Parameters ....: None ; Requirement(s).: v3.3.1.5 or higher - AdlibRegister/Unregister used in _Notify_Show ; Return values .: None ; Author ........: Melba23 ; Modified ......: ; Remarks .......: If another WM_MOUSEACTIVATE handler already registered, call the _Notify_WM_MOUSEACTIVATE handler ; function from within that handler ; If notifications not to retract when clicked the WM_MOUSEACTIVATE message need not be registered ; Example........: Yes ;===================================================================================================================== Func _Notify_RegMsg() GUIRegisterMsg(0x0021, "_Notify_WM_MOUSEACTIVATE") ; $WM_MOUSEACTIVATE $aNotify_Data[0][4] = 1 EndFunc ;==>_Notify_RegMsg ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _Notify_Timer ; Description ...: Checks whether a notification has timed out ; Syntax ........: _Notify_Timer() ; Author ........: Melba23 ; Modified.......: ; Remarks .......: ; =============================================================================================================================== Func _Notify_Timer() ; Check if other retractions occuring If $aNotify_RetractMode[1] Then Return EndIf If $aNotify_RetractMode[0] Then Return EndIf ; Set Prevent simultaneous click $aNotify_RetractMode[0] = True ; Pause Adlib as retraction and movement could overrun delay time AdlibUnRegister("_Notify_Timer") ; Run through notifications For $i = $aNotify_Data[0][0] To 1 Step -1 ; Check timer if needed If $aNotify_Data[$i][1] And TimerDiff($aNotify_Data[$i][2]) > $aNotify_Data[$i][1] Then $aNotify_Data[0][5] = $i _Notify_Delete() _Notify_Reset() ExitLoop EndIf Next ; Restart Adlib if needed If $aNotify_Data[0][0] Then AdlibRegister("_Notify_Timer", 1000) EndIf ; Re-enable clicks $aNotify_RetractMode[0] = False EndFunc ;==>_Notify_Timer ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _Notify_WM_MOUSEACTIVATE ; Description ...: Message handler to check if notification clicked ; Syntax ........: _Notify_WM_MOUSEACTIVATE($hWnd, $Msg, $wParam, $lParam) ; Parameters ....: Standard message handler parameters ; Author ........: Melba23 ; Modified.......: ; Remarks .......: ; =============================================================================================================================== Func _Notify_WM_MOUSEACTIVATE($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $wParam, $lParam ; Check timer is not checking If $aNotify_RetractMode[0] Then Return EndIf ; Check handler not already retracting If $aNotify_RetractMode[1] Then Return EndIf ; Set flag to show handler retracting $aNotify_RetractMode[1] = True For $i = $aNotify_Data[0][0] To 1 Step -1 ; Is it a click on a notification? If $hWnd = $aNotify_Data[$i][0] Then $aNotify_Data[0][5] = $i If $aNotify_Data[$i][5] Then ; Extend the notification AdlibRegister("_Notify_Extend", 100) Else ; Delete the notification if clickable If $aNotify_Data[$i][3] Then AdlibRegister("_Notify_Delete", 100) EndIf EndIf ExitLoop EndIf Next ; Clear Running flag $aNotify_RetractMode[1] = False Return "GUI_RUNDEFMSG" EndFunc ;==>_Notify_WM_MOUSEACTIVATE ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _Notify_Extend ; Description ...: Extend a notification when initially shown in margin ; Syntax ........: _Notify_Extend() ; Parameters ....: Nove ; Author ........: Melba23 ; Modified.......: ; Remarks .......: ; =============================================================================================================================== Func _Notify_Extend() ; Check if retractions occuring If $aNotify_RetractMode[1] Then Return EndIf If $aNotify_RetractMode[0] Then Return EndIf ; Cancel the Adlib call AdlibUnRegister("_Notify_Extend") ; Read index Local $i = $aNotify_Data[0][5] ; Hide notification GUISetState(@SW_HIDE, $aNotify_Data[$i][0]) ; Move it to final position Switch $aNotify_Data[0][4] Case 0, 3 WinMove($aNotify_Data[$i][0], "", $aNotify_Data[$i][5], $aNotify_Data[0][3] - (50 * $i)) Case 1, 2 WinMove($aNotify_Data[$i][0], "", $aNotify_Data[$i][5], $aNotify_Data[0][3] + (50 * ($i - 1))) EndSwitch ; Slide into place Switch $aNotify_Data[0][4] Case 0, 1 DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $aNotify_Data[$i][0], "int", $aNotify_Settings[1][5], "long", 0x00040002) ; $AW_SLIDE_IN_RIGHT Case 2, 3 DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $aNotify_Data[$i][0], "int", $aNotify_Settings[1][5], "long", 0x00040001) ; $AW_SLIDE_IN_LEFT EndSwitch ; Reset position data $aNotify_Data[$i][4] = $aNotify_Data[$i][5] $aNotify_Data[$i][5] = 0 EndFunc ;==>_Notify_Extend ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _Notify_Delete ; Description ...: Retract a notification when timed out or clicked ; Syntax ........: _Notify_Delete() ; Parameters ....: None ; Author ........: Melba23 ; Modified.......: ; Remarks .......: ; =============================================================================================================================== Func _Notify_Delete() ; Cancel Adlib call AdlibUnRegister("_Notify_Delete") ; Read index Local $i = $aNotify_Data[0][5] ; Retract/Fade and delete notification Local $iTime = Abs($aNotify_Data[$i][6]) If $aNotify_Data[$i][6] > 0 Then Switch $aNotify_Data[0][4] Case 0, 1 DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $aNotify_Data[$i][0], "int", $iTime, "long", 0x00050001) ; $AW_SLIDE_OUT_RIGHT Case 2, 3 DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $aNotify_Data[$i][0], "int", $iTime, "long", 0x00050002) ; $AW_SLIDE_OUT_LEFT EndSwitch Else DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $aNotify_Data[$i][0], "int", $iTime, "long", 0x00090000) ; $AW_FADE_OUT EndIf GUIDelete($aNotify_Data[$i][0]) ; Adjust array For $j = $i + 1 To $aNotify_Data[0][0] For $k = 0 To UBound($aNotify_Data, 2) - 1 $aNotify_Data[$j - 1][$k] = $aNotify_Data[$j][$k] Next Next ReDim $aNotify_Data[$aNotify_Data[0][0]][7] $aNotify_Data[0][0] -= 1 ; Cancel timer if not needed If $aNotify_Data[0][0] = 0 Then AdlibUnRegister("_Notify_Timer") Else ; Adjust positions of Notifications _Notify_Reset() EndIf EndFunc ;==>_Notify_Delete ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _Notify_Reset ; Description ...: Reposition remaining notifications on screen ; Syntax ........: _Notify_Reset() ; Parameters ....: None ; Author ........: Melba23 ; Modified.......: ; Remarks .......: ; =============================================================================================================================== Func _Notify_Reset() ; Read index Local $iIndex = $aNotify_Data[0][5] If $aNotify_Settings[0][4] Then ; Set step size depending on number of notifications to move Local $iStep = 1 + Int(($aNotify_Data[0][0] - $iIndex) / 3) ; Slide notifications into new positions depending on location Switch $aNotify_Data[0][4] Case 0, 3 For $j = 1 To 50 Step $iStep For $i = $iIndex To $aNotify_Data[0][0] WinMove($aNotify_Data[$i][0], "", $aNotify_Data[$i][4], $aNotify_Data[0][3] - (50 * ($i + 1)) + $j) Next Next Case 1, 2 For $j = 1 To 50 Step $iStep For $i = $iIndex To $aNotify_Data[0][0] WinMove($aNotify_Data[$i][0], "", $aNotify_Data[$i][4], $aNotify_Data[0][3] + (50 * $i) - $j) Next Next EndSwitch Else ; Move notifications into new positions instantly depending on location Switch $aNotify_Data[0][4] Case 0, 3 For $i = 1 To $aNotify_Data[0][0] WinMove($aNotify_Data[$i][0], "", $aNotify_Data[$i][4], $aNotify_Data[0][3] - (50 * $i)) Next Case 1, 2 For $i = 1 To $aNotify_Data[0][0] WinMove($aNotify_Data[$i][0], "", $aNotify_Data[$i][4], $aNotify_Data[0][3] + (50 * ($i - 1))) Next EndSwitch EndIf EndFunc ;==>_Notify_Reset ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _Notify_GetDefFont ; Description ...: Determine system default MsgBox font ; Syntax ........: _Notify_GetDefFont() ; Parameters ....: None ; Author ........: Melba23 ; Modified.......: ; Remarks .......: ; =============================================================================================================================== Func _Notify_GetDefFont() ; Get default system font data Local $tNONCLIENTMETRICS = DllStructCreate("uint;int;int;int;int;int;byte[60];int;int;byte[60];int;int;byte[60];byte[60];byte[60]") DllStructSetData($tNONCLIENTMETRICS, 1, DllStructGetSize($tNONCLIENTMETRICS)) DllCall("user32.dll", "int", "SystemParametersInfo", "int", 41, "int", DllStructGetSize($tNONCLIENTMETRICS), "ptr", DllStructGetPtr($tNONCLIENTMETRICS), "int", 0) ; Read font data for MsgBox font Local $tLOGFONT = DllStructCreate("long;long;long;long;long;byte;byte;byte;byte;byte;byte;byte;byte;char[32]", DllStructGetPtr($tNONCLIENTMETRICS, 15)) ; Font name Return DllStructGetData($tLOGFONT, 14) EndFunc ;==>_Notify_GetDefFont ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _Show_PNG ; Description ...: Set PNG as image ; Syntax ........: _Show_PNG($sImg) ; Parameters ....: $sImg - Path of image file ; Author ........: UEZ ; Modified.......: Melba23 ; Remarks .......: ; =============================================================================================================================== Func _Show_PNG($sImg) _GDIPlus_Startup() Local $hPic = GUICtrlCreatePic("", 4, 4, 32, 32) Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sImg) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", 32, "int", 32, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0) Local $hBitmap_Resized = $aResult[6] Local $hBMP_Ctxt = _GDIPlus_ImageGetGraphicsContext($hBitmap_Resized) DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hBMP_Ctxt, "int", 7) _GDIPlus_GraphicsDrawImageRect($hBMP_Ctxt, $hBitmap, 0, 0, 32, 32) Local $hHBitmap = _BitmapCreateDIB($hBitmap_Resized) _WinAPI_DeleteObject(GUICtrlSendMsg($hPic, 0x0172, 0, $hHBitmap)) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_BitmapDispose($hBitmap_Resized) _GDIPlus_GraphicsDispose($hBMP_Ctxt) _WinAPI_DeleteObject($hHBitmap) _GDIPlus_Shutdown() EndFunc ;==>_Show_PNG ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: _BitmapCreateDIB ; Description ...: Create bitmap ; Syntax ........: _BitmapCreateDIB($hBitmap) ; Parameters ....: $hBitmap - Handle of bitmap ; Author ........: UEZ ; Modified.......: ; Remarks .......: ; =============================================================================================================================== Func _BitmapCreateDIB($hBitmap) Local $hRet = 0 Local $aRet1 = DllCall($ghGDIPDll, "uint", "GdipGetImageDimension", "ptr", $hBitmap, "float*", 0, "float*", 0) If (@error) Or ($aRet1[0]) Then Return 0 Local $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $aRet1[2], $aRet1[3], $GDIP_ILMREAD, $GDIP_PXF32ARGB) Local $pBits = DllStructGetData($tData, "Scan0") If Not $pBits Then Return 0 Local $tBIHDR = DllStructCreate("dword;long;long;ushort;ushort;dword;dword;long;long;dword;dword") DllStructSetData($tBIHDR, 1, DllStructGetSize($tBIHDR)) DllStructSetData($tBIHDR, 2, $aRet1[2]) DllStructSetData($tBIHDR, 3, $aRet1[3]) DllStructSetData($tBIHDR, 4, 1) DllStructSetData($tBIHDR, 5, 32) DllStructSetData($tBIHDR, 6, 0) Local $aRet2 = DllCall("gdi32.dll", "ptr", "CreateDIBSection", "hwnd", 0, "ptr", DllStructGetPtr($tBIHDR), "uint", 0, "ptr*", 0, "ptr", 0, "dword", 0) If (Not @error) And ($aRet2[0]) Then DllCall("gdi32.dll", "dword", "SetBitmapBits", "ptr", $aRet2[0], "dword", $aRet1[2] * $aRet1[3] * 4, "ptr", DllStructGetData($tData, "Scan0")) $hRet = $aRet2[0] EndIf _GDIPlus_BitmapUnlockBits($hBitmap, $tData) Return $hRet EndFunc ;==>_BitmapCreateDIB And an example: expandcollapse popup#include "Notify_Mod.au3" ; Press ESC to exit script HotKeySet("{ESC}", "On_Exit") Global $fNot_1_Vis = True, $iBegin = 0 Opt("TrayAutoPause", 0) $sAutoIt_Path = StringRegExpReplace(@AutoItExe, "(^.*)(.*)", "1") ; Register message for click event _Notify_RegMsg() ; Set notification location _Notify_Locate(0) ; Show notifications ; Set all values to default _Notify_Set(Default) _Notify_Show(@AutoItExe, "Not Clickable with EXE", "Retracts after 20 secs", 20, 0) ; Set Show time to 250 ms - note fast entry _Notify_Set(0, 0xFF0000, 0xFFFF00, "Courier New", False, 250) _Notify_Show(0, "Clickable", "Coloured - stays 40 secs if not clicked", 40) _Notify_Set(4, 0x0000FF, 0xCCFFCC, "Arial") ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< _Notify_Show(0, "Clickable", "Only in margin until clicked - click again to retract", 50) ; Reset all values to default _Notify_Set(Default) _Notify_Show($sAutoIt_Path & "ExamplesGUITorus.png", "Clickable with PNG", "Reset to default colours") ; Change justification, colours, font, Reset mode to Slide and Show mode to "fade in" 1000ms _Notify_Set(6, 0x0000FF, 0xCCCCFF, "Comic MS", True, -1000) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< _Notify_Show(48, "Not Clickable", "With an icon - stays 30 secs", 30, 0) ; Change them all again _Notify_Set(0, Default, 0xCCFF00, "Arial", True, Default) ; This one is clickable, but will only remain in the margin until clicked $hNot_1 = _Notify_Show(0, "", "No title so the message can span both lines without problem if it is long enough to need it") ; And again _Notify_Set(0, Default, 0xFF80FF, "MS Comic Sans", True) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ; This one can only be retracted programatically 2 secs after the one above and will fade out, overriding the default setting $hNot_2 = _Notify_Show(0, "Programmed Retract", "This will disappear 2 seconds after the 'No Title' one", 0, 0, Default, -1000) While 1 Sleep(10) If Not WinExists($hNot_1) And $fNot_1_Vis = True Then $iBegin = TimerInit() $fNot_1_Vis = False EndIf If $iBegin And TimerDiff($iBegin) > 2000 And WinExists($hNot_2) Then _Notify_Hide($hNot_2) $iBegin = 0 EndIf WEnd Func On_Exit() Exit EndFunc Let me know how you get on. M23 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
qwert Posted April 25, 2012 Posted April 25, 2012 Thanks for the update and reminder. I've been overloaded and have only been able to download your beta and run the example file. I'll have more time this weekend to give it a closer look. I will say that what I think I'll eventually need is some sort of Dismiss button, where the user can call up a message as often as they want and then cause it to disappear when they don't need it any more. But let me see what I can do with what you've provided. I do appreciate your response to my original request. It's nice to have a popup message alternative that makes good use of screen space.
BrewManNH Posted May 23, 2012 Posted May 23, 2012 (edited) I found a small bug.From the header for _Notify_Locate:; Parameters ....: $iLocation - Start point and direction for Notifications; 0 = Bottom right upwards (default)And from the first line of the function itself:Func _Notify_Locate($iLocation)There's no default set in there, you have have to call the function with _Notify_Locate(some number) or it will fail. Simple change needed, Func _Notify_Locate($iLocation = 0) for it to have a default value, or the header info needs to be redone.EDIT: I do realize you call the _Notify_Locate function at the start of the UDF itself with a 0 as the parameter, but reading the header one might assume that the 0 value is defaulted when using the function. Edited May 23, 2012 by BrewManNH If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
BrewManNH Posted May 23, 2012 Posted May 23, 2012 Sorry to say, found another bug in there. In the function _Notify_Show, where you call the _StringSize function, one of the parameters is wrong, so the title of the notifications are the wrong size. This is only noticable if you have a title longer than the message because part of the title is wrapped to the next line and the message text overlaps it. Below is the corrected line. $aLabel_Pos = _StringSize($sTitle, 9, 800, Default, $aNotify_Settings[1][3]) ; This line is from the title section (Line 317), and the font weight was originally set to Default instead of bold If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
Moderators Melba23 Posted May 28, 2012 Author Moderators Posted May 28, 2012 BrewManNH, I have only just noticed your reports - thanks for taking the time to tell me. I will amend the UDF when I release the next version. M23 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
BrewManNH Posted May 28, 2012 Posted May 28, 2012 Glad I could be of help. This made a nice add on for my current pet media player project. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
MKANET Posted June 14, 2012 Posted June 14, 2012 (edited) Could someone please tell me what I'm cofing wrong? All I want to do is for the application to echo $CmdLine[1] (command line argument) in the notification window. Thanks in advance! #include "Notify.au3" If $CmdLine[0] > 0 Then $Message=$CmdLine[1] EndIf $localappdata = EnvGet ("localappdata") ;$APPEXE = $localappdata & "ULStart.exe" $APPEXE = @ScriptDir & "ULStart.exe" Opt("TrayAutoPause", 0) ; Register message for click event _Notify_RegMsg() ; Set notification location _Notify_Locate(0) ; _Notify_Set(2, 0xFF9C18, 0x000073, "Comic MS") _Notify_Show($APPEXE, "Title", $Message, 3, 5) sleep(6000) Edited June 14, 2012 by MKANET
ValeryVal Posted June 14, 2012 Posted June 14, 2012 to echo $CmdLine[1] (command line argument) in the notification window. Enjoy: #include "Notify.au3" $Message = "" for $i = 1 to $CmdLine[0] $Message &= $CmdLine[$i] & " " next ; Register message for click event _Notify_RegMsg() ; Set notification location _Notify_Locate(0) ; ; Show notifications _Notify_Set(2, 0xFF9C18, 0x000073, "Comic MS") _Notify_Show(@AutoItExe, "Title", $Message, 3, 5) sleep(6000) MKANET 1 The point of world view
MKANET Posted June 15, 2012 Posted June 15, 2012 Melba23 I really love this Notify UDF! I'm glad you asked me to check out the UDF's you created in your signature. I know you probably thought of this already, but could you please add a fade in/fade out effect (just like how MS Outlook notify works)? I am guessing this would be relatively easy to do.
Moderators Melba23 Posted June 15, 2012 Author Moderators Posted June 15, 2012 MKANET, The beta version in this post already has a fade in/out option. You cannot get better service than that! M23 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
BrewManNH Posted June 15, 2012 Posted June 15, 2012 I'm not sure what is causing it, but I am using this UDF as a pop up notification for a media player and occasionally the Notification label text and background colors are being applied to one of the GUIs I have on my media player. It ony happened rarely, but I think it has something to do with the way I have the windows appearing/disappearing when the player is in use. I added a line "GUISwitch($hNotify_Handle )" just before the comment about creating labels in the _Notify_Show function and it seems to have eliminated the problem. Just thought you might want to know. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
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