Leaderboard
Popular Content
Showing content with the highest reputation on 04/18/2014 in all areas
-
mesale0077 asked me whether I could code some CSS loading animations from different web sites. These are the results using GDI+ (AutoIt v3.3.12.0+ required!): _GDIPlus_MonochromaticBlinker.au3 / _GDIPlus_RotatingBokeh.au3 _GDIPlus_SpinningCandy.au3 / _GDIPlus_SteamPunkLoading.au3 _GDIPlus_IncreasingBalls.au3 / _GDIPlus_PacmanProgressbar.au3 _GDIPlus_StripProgressbar.au3 / _GDIPlus_RingProgressbar.au3 _GDIPlus_LineProgressbar.au3 / _GDIPlus_SimpleLoadingAnim.au3 _GDIPlus_TextFillingWithWater.au3 / _GDIPlus_MultiColorLoader.au3 _GDIPlus_LoadingSpinner.au3 / _GDIPlus_SpinningAndPulsing.au3 _GDIPlus_TogglingSphere.au3 / _GDIPlus_CloudySpiral.au3 _GDIPlus_GlowingText.au3 (thanks to Eukalyptus) / _GDIPlus_HypnoticLoader.au3 _GDIPlus_RotatingRectangles.au3 / _GDIPlus_TRONSpinner.au3 _GDIPlus_RotatingBars.au3 / _GDIPlus_AnotherText.au3 (thanks to Eukalyptus) _GDIPlus_CogWheels.au3 (thanks to Eukalyptus) / _GDIPlus_DrawingText.au3 (thanks to Eukalyptus) _GDIPlus_GearsAnim.au3 / _GDIPlus_LEDAnim.au3 _GDIPlus_LoadingTextAnim.au3 / _GDIPlus_MovingRectangles.au3 _GDIPlus_SpinningAndGlowing.au3 (thanks to Eukalyptus) / _GDIPlus_YetAnotherLoadingAnim.au3 _GDIPlus_AnimatedTypeLoader.au3 / _GDIPlus_Carousel.au3 Each animation function has a built-in example how it can be used. AiO download: GDI+ Animated Wait Loading Screens.7z (previous downloads: 1757) Big thanks to Eukalyptus for providing several examples. Maybe useful for some of you Br, UEZ PS: I don't understand CSS - everything is made out of my mind, so it might be different from original CSS examples1 point
-
I initially created this to improve my C# understanding and what a learning curve it was. So I decided to directly translate the C# source code I had into AutoIt as a way of showing off the >Stack UDF (which you will need). Of course it can be changed not to use the Stack UDF, but why reinvent the wheel and make life even more difficult. If you don't understand RPN or the Shunting-Yard algorithm, then please look at the links below. Sources: https://en.wikipedia.org/wiki/Shunting_yard_algorithm, https://en.wikipedia.org/wiki/Reverse_Polish_notation and http://www.slideshare.net/grahamwell/shunting-yard #include <StringConstants.au3> #include "Stack.au3" Example() Func Example() ; Create postfix notation (RPN) from infix notation. ConsoleWrite(StringFormat('%s: == %s', '3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3', ShuntingYard_Parse('3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3')) & @CRLF) ConsoleWrite('Reference: 3 4 2 * 1 5 - 2 3 ^ ^ / +' & @CRLF) ConsoleWrite(@CRLF); A new line. ConsoleWrite(StringFormat('%s: == %s', '3 + 4', ShuntingYard_Parse('3 + 4')) & @CRLF) ConsoleWrite('Reference: 3 4 +' & @CRLF) ConsoleWrite(@CRLF); A new line. ; Expression from: http://www.slideshare.net/grahamwell/shunting-yard. ConsoleWrite(StringFormat('%s: == %s', '2 + (3 * (8 - 4))', ShuntingYard_Parse('2 + (3 * (8 - 4))')) & @CRLF) ConsoleWrite('Reference: 2 3 8 4 - * +' & @CRLF) ConsoleWrite(@CRLF); A new line. ; Calculate postfix notation (RPN) examples. ConsoleWrite('3 4 + == ' & ShuntingYard_Calculate('3 4 +') & @CRLF) ConsoleWrite('3 4 2 * 1 5 - 2 3 ^ ^ / + == ' & ShuntingYard_Calculate('3 4 2 * 1 5 - 2 3 ^ ^ / +') & @CRLF) ConsoleWrite('2 3 8 4 - * + == ' & ShuntingYard_Calculate('2 3 8 4 - * +') & @CRLF) EndFunc ;==>Example Func ShuntingYard_Calculate($sExpression) Local $aChar = StringSplit($sExpression, '', $STR_NOCOUNT), _ $hStack = Stack(), _ ; Create a stack to push/pop to. $iNumber1 = 0, $iNumber2 = 2, _ $sDigits = '', _ ; Hold string digits e.g. in case there are numbers greater than 1 digit long. $sToken = '' ; Token. For $i = 0 To UBound($aChar) - 1 $sToken = $aChar[$i] If StringIsDigit($sToken) Then $sDigits &= $sToken ElseIf __ShuntingYard_IsOperator($sToken) Then $iNumber2 = Stack_Pop($hStack) $iNumber1 = Stack_Pop($hStack) Stack_Push($hStack, __ShuntingYard_Eval($iNumber1, $iNumber2, $sToken)) ElseIf StringIsSpace($sToken) And Not ($sDigits == '') Then If StringIsInt($sDigits) Or StringIsFloat($sDigits) Then $iNumber1 = Number($sDigits) Stack_Push($hStack, $iNumber1) EndIf $sDigits = '' $iNumber1 = 0 EndIf Next Return Stack_Pop($hStack) EndFunc ;==>ShuntingYard_Calculate Func ShuntingYard_Parse($sExpression) Local $aChar = StringSplit($sExpression, '', $STR_NOCOUNT), _ $bIsBracket = False, _ ; Is parenthesis. $hStack = Stack(), _ ; Create a stack to push/pop to. $sOutput, _ ; Output string. $sToken = '' ; Token. For $i = 0 To UBound($aChar) - 1 $sToken = $aChar[$i] If StringIsDigit($sToken) Then ; If a digit add to the output string. $sOutput &= $sToken ElseIf __ShuntingYard_IsOperator($sToken) Then ; Check if a valid token. If __ShuntingYard_IsBracket($sToken) Then $bIsBracket = $sToken == '(' ; True if open bracket else False if closing. If $bIsBracket Then ; Open bracket. Stack_Push($hStack, $sToken) Else ; Closing bracket. $sOutput &= ' ' Do ; Repeat until '(' is found. $sOutput &= Stack_Pop($hStack) Until (Stack_Peek($hStack) == '(') Stack_Pop($hStack) EndIf Else $sOutput &= " " ; Workaround for spacing and certain expressions. If Stack_Count($hStack) > 0 And __ShuntingYard_HasHigherPrecedence($sToken, Stack_Peek($hStack)) Then $sOutput &= Stack_Pop($hStack) Stack_Push($hStack, $sToken) $sOutput &= " " ; Workaround for spacing and certain expressions. Else Stack_Push($hStack, $sToken) EndIf EndIf EndIf Next If Stack_Count($hStack) > 0 Then ; Append what is left on the stack in reverse order. $sOutput &= ' ' While (Stack_Count($hStack) > 0) $sOutput &= Stack_Pop($hStack) & ' ' WEnd EndIf Return $sOutput EndFunc ;==>ShuntingYard_Parse Func __ShuntingYard_Eval($iNumber1, $iNumber2, $sChar) Switch $sChar Case '+' Return $iNumber1 + $iNumber2 Case '-', ChrW(8722) ; Char 8722 is - but the unicode char code Return $iNumber1 - $iNumber2 Case '*' Return $iNumber1 * $iNumber2 Case '/' Return $iNumber1 / $iNumber2 Case '^' Return $iNumber1 ^ $iNumber2 Case Else Return $iNumber1 EndSwitch EndFunc ;==>__ShuntingYard_Eval Func __ShuntingYard_HasHigherPrecedence($sChar1, $sChar2) Local $iChar1 = __ShuntingYard_PrecendenceValue($sChar1), _ $iChar2 = __ShuntingYard_PrecendenceValue($sChar2) If $iChar1 = 0 And $iChar2 = 0 Then Return False EndIf Return $iChar1 <= $iChar2 And Not ($sChar1 == '^') EndFunc ;==>__ShuntingYard_HasHigherPrecedence Func __ShuntingYard_IsBracket($sChar) Return $sChar == '(' Or $sChar == ')' EndFunc ;==>__ShuntingYard_IsBracket Func __ShuntingYard_IsOperator($sChar) Return $sChar == '+' Or $sChar == '-' Or $sChar == ChrW(8722) Or $sChar == '*' Or $sChar == '/' Or $sChar == '^' Or $sChar == '(' Or $sChar == ')'; Char 8722 is - but the unicode char code. EndFunc ;==>__ShuntingYard_IsOperator Func __ShuntingYard_PrecendenceValue($sChar) Switch $sChar Case '+', '-' Return 2 Case '*', '/' Return 3 Case '^' Return 4 Case Else Return 0 EndSwitch EndFunc ;==>__ShuntingYard_PrecendenceValue1 point
-
Jos, Glad to see that the old memory cells are still working! M231 point
-
If you use Autoit3Wrapper and add version resources to your scripts then adding the following directives will ensures that a copy of the source and exe is saved for every version of the script you compile. #AutoIt3Wrapper_Run_Before=MKDIR "%scriptdir%\Release" #AutoIt3Wrapper_Run_After=copy "%in%" "%scriptdir%\Release\%scriptfile%.%fileversion%.au3" #AutoIt3Wrapper_Run_After=copy "%out%" "%scriptdir%\Release\%scriptfile%.%fileversion%.exe" #AutoIt3Wrapper_Run_After=copy "%out%" "%scriptdir%\Release1 point