Jump to content

Recommended Posts

Posted

You made my day happy today
Thank you.

Kind regards and stay healthy,
mLipok

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted (edited)

I was playing with your code.
Little refactoring (less Global's , Au3Check compliance, enclosing in function, function parametrization).

#AutoIt3Wrapper_Run_AU3Check=Y
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7

#include <GUIConstants.au3>
#include <WinAPISys.au3>
Global $g_hGUI_ChristmasTree

_Christmas_Tree_Create('Merry Christmas', 310, 290, 1000, 0xFFFFFF, 255)

Func _Christmas_Tree_Create($sInfo, $iWidth = 310, $iHeight = 290, $iSleep = 2000, $iTransColor = 0x000000, $iTransparencyLevel = 0)
    HotKeySet("{ESC}", _Christmas_Tree_End)
    Local Const $aColors[6] = [0x00FF00, 0XFF0000, 0X0040FF, 0XFFFF00, 0X00FFFF, 0XFF00FF] ; 0xRRGGBB
    Local Const $sBall = '♥'
    Local $hLayer[6]
    Local $a[] = ['.', '~', "'", $sBall, "'", '~', '.', '*', '               ']
    Local $tree = $a[8] & $a[7] & @CRLF
    Local $ndx, $sGotString, $sGetString, $ChristmasBalls, $sRandomBalls, $iNrOfBalls
    Local $vDummy
    #forceref $vDummy

    $g_hGUI_ChristmasTree = GUICreate($sInfo, $iWidth, $iHeight, Default, Default, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
    GUISetBkColor($iTransColor, $g_hGUI_ChristmasTree)
    _WinAPI_SetLayeredWindowAttributes($g_hGUI_ChristmasTree, $iTransColor, $iTransparencyLevel, $LWA_COLORKEY)
    GUISetState()
    For $i = 0 To 14
        $tree &= StringRight($a[8], 15 - ($i + 1))
        For $x = 0 To ($i + 1) * 2
            $tree &= $a[Mod($ndx, 7)]
            $ndx += 1
        Next
        $tree &= @CRLF
        If $i < 6 Then
            $hLayer[$i] = GUICtrlCreateLabel("", 0, 0, $iWidth, $iHeight, -1, $GUI_WS_EX_PARENTDRAG)
            $vDummy = GUICtrlSetFont(-1, 12, 800, 0, "Courier new") + GUICtrlSetColor(-1, $aColors[$i]) + GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
        EndIf
    Next ; RegExp thanks to @seadoggie01 https://www.autoitscript.com/forum/topic/200770-how-to-clean-a-string-by-regexp/?do=findComment&comment=1440488
    $ChristmasBalls = StringRegExpReplace($tree, "(*UCP)(?s)[^\Q" & $sBall & @CRLF & "\E]", " ") ; keep only balls
    StringReplace($ChristmasBalls, $sBall, $sBall)
    $iNrOfBalls = @extended
    GUICtrlSetData($hLayer[0], $tree) ; StringRegExpReplace($tree, "(*UCP)(?s)[\Q" & $a[7] & "\E]", " "))
    Local $RemainingBalls
    While Sleep($iSleep)
        $sRandomBalls = $ChristmasBalls
        $RemainingBalls = $iNrOfBalls
        For $i = 1 To Random(5, $RemainingBalls - 5, 1)
            $sRandomBalls = StringReplace($sRandomBalls, StringInStr($sRandomBalls, $sBall, 0, Random(1, $RemainingBalls, 1)), " ")
            $RemainingBalls -= 1
        Next
        For $i = 1 To 5
            $sGetString = GUICtrlRead($hLayer[$i]) ; StringReplace(GUICtrlRead($hLayer[$i]), $a[7], " ")
            $sGotString = $sGetString
            For $ii = 1 To $RemainingBalls
                If StringMid($sGetString, StringInStr($sRandomBalls, $sBall, 0, $ii), 1) = $sBall Then
                    $sGetString = StringReplace($sGetString, StringInStr($sRandomBalls, $sBall, 0, $ii), " ")
                EndIf
            Next
            If $sGotString <> $sGetString Then GUICtrlSetData($hLayer[$i], $sGetString)
        Next
        GUICtrlSetData($hLayer[Random(1, 5, 1)], $sRandomBalls)
    WEnd
EndFunc   ;==>_Christmas_Tree_Create

Func _Christmas_Tree_End()
    If WinActive("[ACTIVE]") = $g_hGUI_ChristmasTree Then Exit GUIDelete($g_hGUI_ChristmasTree)
EndFunc   ;==>_Christmas_Tree_End

 

I was in hope to change Transparency level and show the title, but I have no success in this regards.
Could you take a look ?

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted
  On 12/20/2020 at 1:51 PM, mLipok said:

You made my day happy today
Thank you.

Expand  

Hi @mLipok, I'm happy for that! :)

as regards the effect to be obtained, that is the variable transparency and giving a title to the window, it is necessary to modify both the style of the GUI and the method to make the entire window transparent; also I see that you have also parameterized the window width and height values, and so I think you would like to be able to vary the window size at will, but this cannot be done this way because the window size depends on the font size used. . So what would be better to parameterize is the font size. However, finding the size of the window based on the font, size and the "string" it must contain is not an easy thing. Luckily there is a nice UDF created by @Melba23 that does just that. (thank You Melba)
So I tweaked your 'fork' a bit to get those effects.
Obviously you need to download Melba's StringSize UDF and save it along with the script (https://www.autoitscript.com/forum/topic/114034-stringsize-m23-new-version-16-aug-11/)
I hope the result is what you wanted to achieve .... have fun

#AutoIt3Wrapper_Run_AU3Check=Y
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7

#include <GUIConstants.au3>
; #include <WinAPISys.au3>
#include <StringSize.au3>
Global $g_hGUI_ChristmasTree
;                      title       Font Size, Delay, BckClr, Transparency (the low the more transp)
_Christmas_Tree_Create('Merry Christmas', 18, 500, 0x000000, 200)

Func _Christmas_Tree_Create($sInfo, $iFontSize = 12, $iSleep = 2000, $iBackgroundColor = 0x000000, $iTransparencyLevel = 255)
    HotKeySet("{ESC}", _Christmas_Tree_End)
    Local $iWidth = 310, $iHeight = 290
    Local Const $aColors[6] = [0x00FF00, 0XFF0000, 0X0040FF, 0XFFFF00, 0X00FFFF, 0XFF00FF] ; 0xRRGGBB
    Local Const $sBall = '♥'
    Local $hLayer[6]
    Local $a[] = ['.', '~', "'", $sBall, "'", '~', '.', '*', '               ']
    Local $tree = $a[8] & $a[7] & @CRLF
    Local $ndx, $sGotString, $sGetString, $ChristmasBalls, $sRandomBalls, $iNrOfBalls
    Local $vDummy
    #forceref $vDummy

    $g_hGUI_ChristmasTree = GUICreate($sInfo, $iWidth, $iHeight, Default, Default, 0, BitOR(0, $WS_EX_TOPMOST)) ;$WS_EX_LAYERED
    GUISetBkColor($iBackgroundColor, $g_hGUI_ChristmasTree)
    ;_WinAPI_SetLayeredWindowAttributes($g_hGUI_ChristmasTree, $iTransparencyColor, $iTransparencyLevel, $LWA_COLORKEY)
    WinSetTrans($g_hGUI_ChristmasTree, "", $iTransparencyLevel)
    GUISetState()
    For $i = 0 To 14
        $tree &= StringRight($a[8], 15 - ($i + 1))
        For $x = 0 To ($i + 1) * 2
            $tree &= $a[Mod($ndx, 7)]
            $ndx += 1
        Next
        $tree &= @CRLF
        If $i < 6 Then
            $hLayer[$i] = GUICtrlCreateLabel("", 0, 0, $iWidth, $iHeight, -1, $GUI_WS_EX_PARENTDRAG)
            $vDummy = GUICtrlSetFont(-1, $iFontSize, 800, 0, "Courier new") + GUICtrlSetColor(-1, $aColors[$i]) + GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
            GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
        EndIf
    Next ; RegExp thanks to @seadoggie01 https://www.autoitscript.com/forum/topic/200770-how-to-clean-a-string-by-regexp/?do=findComment&comment=1440488
    $ChristmasBalls = StringRegExpReplace($tree, "(*UCP)(?s)[^\Q" & $sBall & @CRLF & "\E]", " ") ; keep only balls
    StringReplace($ChristmasBalls, $sBall, $sBall)
    $iNrOfBalls = @extended
    ;---- _StringSize() by Melba23 ----
    Local $aDims = _StringSize($tree, $iFontSize, 800, 0, "Courier new")
    WinMove($g_hGUI_ChristmasTree, '', Default, Default, $aDims[2], $aDims[3])
    ;----------------------------------
    GUICtrlSetData($hLayer[0], $tree) ; StringRegExpReplace($tree, "(*UCP)(?s)[\Q" & $a[7] & "\E]", " "))
    Local $RemainingBalls
    While Sleep($iSleep)
        $sRandomBalls = $ChristmasBalls
        $RemainingBalls = $iNrOfBalls
        For $i = 1 To Random(5, $RemainingBalls - 5, 1)
            $sRandomBalls = StringReplace($sRandomBalls, StringInStr($sRandomBalls, $sBall, 0, Random(1, $RemainingBalls, 1)), " ")
            $RemainingBalls -= 1
        Next
        For $i = 1 To 5
            $sGetString = GUICtrlRead($hLayer[$i]) ; StringReplace(GUICtrlRead($hLayer[$i]), $a[7], " ")
            $sGotString = $sGetString
            For $ii = 1 To $RemainingBalls
                If StringMid($sGetString, StringInStr($sRandomBalls, $sBall, 0, $ii), 1) = $sBall Then
                    $sGetString = StringReplace($sGetString, StringInStr($sRandomBalls, $sBall, 0, $ii), " ")
                EndIf
            Next
            If $sGotString <> $sGetString Then GUICtrlSetData($hLayer[$i], $sGetString)
        Next
        GUICtrlSetData($hLayer[Random(1, 5, 1)], $sRandomBalls)
    WEnd
EndFunc   ;==>_Christmas_Tree_Create

Func _Christmas_Tree_End()
    If WinActive("[ACTIVE]") = $g_hGUI_ChristmasTree Then Exit GUIDelete($g_hGUI_ChristmasTree)
EndFunc   ;==>_Christmas_Tree_End

 

 

image.jpeg.9f1a974c98e9f77d824b358729b089b0.jpeg Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Posted

Variation:

#AutoIt3Wrapper_Run_AU3Check=Y
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7

#include <GUIConstants.au3>
; #include <WinAPISys.au3>
#include <StringSize.au3>
Global $g_hGUI_ChristmasTree
_Christmas_Tree_Create('Merry Christmas SplashScreen', 5000, 500, 18, 0x000000, 210)

Func _Christmas_Tree_Create($sInfo, $iTimeToExit = 5000, $iSleep = 2000, $iFontSize = 12, $iBackgroundColor = 0x000000, $iTransparencyLevel = 255)
    HotKeySet("{ESC}", _Christmas_Tree_End)
    Local $iWidth = 310, $iHeight = 290
    Local Const $aColors[6] = [0x00FF00, 0XFF0000, 0X0040FF, 0XFFFF00, 0X00FFFF, 0XFF00FF] ; 0xRRGGBB
;~  Local Const $sBall = '♥'
    Local Const $sBall = '۝'
;~  Local Const $sBall = 'Ỗ'
    Local $hLayer[6]
    Local $a[] = ['.', '~', "'", $sBall, "'", '~', '.', '*', '               ']
    Local $tree = $a[8] & $a[7] & @CRLF
    Local $ndx, $sGotString, $sGetString, $ChristmasBalls, $sRandomBalls, $iNrOfBalls
    Local $vDummy
    #forceref $vDummy

    $g_hGUI_ChristmasTree = GUICreate($sInfo, $iWidth, $iHeight, Default, Default, 0, BitOR(0, $WS_EX_TOPMOST)) ;$WS_EX_LAYERED
    GUISetBkColor($iBackgroundColor, $g_hGUI_ChristmasTree)
    ;_WinAPI_SetLayeredWindowAttributes($g_hGUI_ChristmasTree, $iTransparencyColor, $iTransparencyLevel, $LWA_COLORKEY)
    WinSetTrans($g_hGUI_ChristmasTree, "", $iTransparencyLevel)
    GUISetState()
    For $i = 0 To 14
        $tree &= StringRight($a[8], 15 - ($i + 1))
        For $x = 0 To ($i + 1) * 2
            $tree &= $a[Mod($ndx, 7)]
            $ndx += 1
        Next
        $tree &= @CRLF
        If $i < 6 Then
            $hLayer[$i] = GUICtrlCreateLabel("", 0, 0, $iWidth, $iHeight, -1, $GUI_WS_EX_PARENTDRAG)
            $vDummy = GUICtrlSetFont(-1, $iFontSize, 800, 0, "Courier new") + GUICtrlSetColor(-1, $aColors[$i]) + GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
            GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
        EndIf
    Next ; RegExp thanks to @seadoggie01 https://www.autoitscript.com/forum/topic/200770-how-to-clean-a-string-by-regexp/?do=findComment&comment=1440488
    $ChristmasBalls = StringRegExpReplace($tree, "(*UCP)(?s)[^\Q" & $sBall & @CRLF & "\E]", " ") ; keep only balls
    StringReplace($ChristmasBalls, $sBall, $sBall)
    $iNrOfBalls = @extended
    ;---- _StringSize() by Melba23 ----
    Local $aDims = _StringSize($tree, $iFontSize, 800, 0, "Courier new")
    WinMove($g_hGUI_ChristmasTree, '', Default, Default, $aDims[2], $aDims[3])
    ;----------------------------------
    GUICtrlSetData($hLayer[0], $tree) ; StringRegExpReplace($tree, "(*UCP)(?s)[\Q" & $a[7] & "\E]", " "))
    Local $RemainingBalls
    Local $hTimer = TimerInit()
    While Sleep($iSleep)
        If TimerDiff($hTimer) > $iTimeToExit Then ExitLoop
        $sRandomBalls = $ChristmasBalls
        $RemainingBalls = $iNrOfBalls
        For $i = 1 To Random(5, $RemainingBalls - 5, 1)
            $sRandomBalls = StringReplace($sRandomBalls, StringInStr($sRandomBalls, $sBall, 0, Random(1, $RemainingBalls, 1)), " ")
            $RemainingBalls -= 1
        Next
        For $i = 1 To 5
            $sGetString = GUICtrlRead($hLayer[$i]) ; StringReplace(GUICtrlRead($hLayer[$i]), $a[7], " ")
            $sGotString = $sGetString
            For $ii = 1 To $RemainingBalls
                If StringMid($sGetString, StringInStr($sRandomBalls, $sBall, 0, $ii), 1) = $sBall Then
                    $sGetString = StringReplace($sGetString, StringInStr($sRandomBalls, $sBall, 0, $ii), " ")
                EndIf
            Next
            If $sGotString <> $sGetString Then GUICtrlSetData($hLayer[$i], $sGetString)
        Next
        GUICtrlSetData($hLayer[Random(1, 5, 1)], $sRandomBalls)
    WEnd
EndFunc   ;==>_Christmas_Tree_Create

Func _Christmas_Tree_End()
    If WinActive("[ACTIVE]") = $g_hGUI_ChristmasTree Then Exit GUIDelete($g_hGUI_ChristmasTree)
EndFunc   ;==>_Christmas_Tree_End

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...