dynamitemedia Posted March 30, 2016 Share Posted March 30, 2016 I am using this code to do a basic thumbnail loading counter... what i want to do is change the count each time without changing everything else, i think just the number count flashing would be better than the whole thing flashing. i tried it with the whole label inside the loop but it flashed too much so i was thinking of just put a label over the top of the blank area... if its in triple digits it flashes horribly weird when gets to double digits, and then on single digits and i want to have it do its more like finding the position of where to place label on top of the other label , i know this needs cleaning up a ton but here is what i have which is semi working expandcollapse popup#include "GUIScrollbars_Ex.au3" #include <Skin.au3> #include <GDIPlus.au3> #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <GuiListView.au3> #include <GuiTab.au3> #include <StaticConstants.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> #include <File.au3> #include <Array.au3> #include <Process.au3> #include <Constants.au3> #include <String.au3> #include <Date.au3> #include <GDIplus.au3> #include <GuiButton.au3> #Include "Curl.au3" #include "GUIScrollbars_Ex.au3" #include <Skin.au3> #include <GuiButton.au3> #include <GuiListView.au3> #include <GuiTab.au3> #include <StaticConstants.au3> #include <WinAPI.au3> #include <WinAPIGdi.au3> #include "StringSize.au3" Global $iDialog_Width = 1280 Global $iDialog_Depth = 720 Global $blueness = 0xff0066ff $thumbCount = 110 $folder = "testing" $hDialog = GUICreate("", $iDialog_Width, $iDialog_Depth, -1, -1) GUISetState() _GDIPlus_Startup() ;initialize GDI+ Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hDialog) _GDIPlus_GraphicsSetSmoothingMode($hGraphics, $GDIP_SMOOTHINGMODE_HIGHQUALITY) Local $hPen = _GDIPlus_PenCreate($blueness, 6) ; Get the size of label needed to hold the text $aRet = _StringSize("Both vertically" & @CRLF & "and horizontally centered", 30) $iX = ($iDialog_Width - $aRet[2]) / 2 $iY = ($iDialog_Depth - $aRet[3]) / 2 _GDIPlus_GraphicsDrawRect($hGraphics, $iX - 30, $iY - 30, $aRet[2] + 60, $aRet[3] + 60, $hPen) $thumbLength = StringLen($thumbCount) $string2add = "Loading " & " " & " thumbnail(s) from " & $folder $paddLblDate = GUICtrlCreateLabel($string2add, $iX, $iY, $aRet[2], $aRet[3], $SS_CENTER) ConsoleWrite("label Left position : " & $iX & @CRLF) Local $countPosition = StringInStr($string2add, $thumbCount) ConsoleWrite("count position : " & $countPosition & @CRLF) Local $thumbPosition = StringInStr($string2add, "thumbnail(s)") ConsoleWrite("thumb position : " & $thumbPosition & @CRLF) GUICtrlSetFont(-1, 22, 600, 0, "Arial") GUICtrlSetColor($paddLblDate, $COLOR_WHITE) $labelStart = $iX + 130 ConsoleWrite("labelStart : " & $labelStart & @CRLF) For $i = 1 To $thumbCount - 1 $thumbCount = $thumbCount - 1 $thumbLabel = GUICtrlCreateLabel($thumbCount, $labelStart , $iY + 4, 50, 28, $SS_CENTER) GUICtrlSetFont(-1, 20, 700, 0, "Arial") GUICtrlSetColor($thumbLabel, $COLOR_RED) ConsoleWrite("New count : " & $thumbCount & @CRLF) sleep (600) next GUICtrlDelete($paddLblDate) GUICtrlDelete($paddLblDate) GUICtrlDelete($paddLblDate) _GDIPlus_PenDispose($hPen) _GDIPlus_GraphicsDispose($hGraphics) Link to comment Share on other sites More sharing options...
BrewManNH Posted March 30, 2016 Share Posted March 30, 2016 Instead of creating $thumbcount - 1 labels, create the label once, then use GUICtrlSetData to update the label's contents. In other words, get the GUICtrlCreateLabel out of your loop and only create it once. 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 Link to comment Share on other sites More sharing options...
dynamitemedia Posted March 30, 2016 Author Share Posted March 30, 2016 i had tried that but wanted to change the color of the number countdown... i guess i should have made that more obvious in my question, but i had been trying to do the " GUICtrlSetData" to JUST the numbers to get the color change, i may just have to settle lol.. Link to comment Share on other sites More sharing options...
UEZ Posted March 31, 2016 Share Posted March 31, 2016 (edited) Something like that here maybe? expandcollapse popup#include <GDIPlus.au3> #include <GuiConstantsEx.au3> _GDIPlus_Startup() Global $iDialog_Width = 1280 Global $iDialog_Depth = 720 Global $blueness = 0xff0066ff Global Const $hGUI = GUICreate("Test", $iDialog_Width, $iDialog_Depth) Global Const $iPic = GUICtrlCreatePic("", $iDialog_Width / 4, $iDialog_Depth / 4, $iDialog_Width / 2, $iDialog_Depth / 2), $hPic = GUICtrlGetHandle($iPic) GUISetState() Global $iCounter = 0 Do _DisplayProgress($iCounter, "c:\Windows\SysWOW64\Resources\", $iPic) $iCounter += 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE GUIDelete() _GDIPlus_Shutdown() Exit EndSwitch Until False Func _DisplayProgress($iNumber, $sPath, $iCtrl, $iColorBorder = 0xff0066ff, $iColorText = 0xFFFFFFFF, $iColorCounter = 0xFFFF0000, $iColorBg = 0xFF808080, $iBorder_Size = 16) Local $aSize = ControlGetPos("", "", $iCtrl) If @error Then Return SetError(1, 0, 0) Local Const $hBitmap = _GDIPlus_BitmapCreateFromScan0($aSize[2], $aSize[3]) Local Const $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, 2) _GDIPlus_GraphicsClear($hGfx, $iColorBg) Local Const $hPath = _GDIPlus_PathCreate() Local Const $hPen_Border = _GDIPlus_PenCreate($iColorBorder, $iBorder_Size), $hBrush_Txt = _GDIPlus_BrushCreateSolid($iColorText), _ $hBrush_Counter = _GDIPlus_BrushCreateSolid($iColorCounter) Local Const $hFamily = _GDIPlus_FontFamilyCreate("Segoe UI"), $hFormat = _GDIPlus_StringFormatCreate() _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) Local $tLayout = _GDIPlus_RectFCreate(0, 0, $aSize[2], $aSize[3]) _GDIPlus_PathAddString($hPath, "Loading " & StringFormat(" %" & StringLen($iNumber)& "i ", $iNumber) & " thumbnail(s) from " & @CRLF & $sPath, $tLayout, $hFamily, 0, 24, $hFormat) _GDIPlus_GraphicsFillPath($hGfx, $hPath, $hBrush_Txt) _GDIPlus_GraphicsDrawRect($hGfx, $iBorder_Size, $iBorder_Size, $aSize[2] - 2 * $iBorder_Size, $aSize[3] - 2 * $iBorder_Size, $hPen_Border) Local Const $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) _WinAPI_DeleteObject(GUICtrlSendMsg($iCtrl, 0x0172, $IMAGE_BITMAP, $hHBitmap)) _WinAPI_DeleteObject($hHBitmap) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_PenDispose($hPen_Border) _GDIPlus_BrushDispose($hBrush_Txt) _GDIPlus_BrushDispose($hBrush_Counter) _GDIPlus_PathDispose($hPath) _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_BitmapDispose($hBitmap) EndFunc Tested only on Win10 x64. Edited March 31, 2016 by UEZ dynamitemedia 1 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
dynamitemedia Posted April 1, 2016 Author Share Posted April 1, 2016 wow that is pretty impressive! i may have to see if that will look good in my gui... Link to comment Share on other sites More sharing options...
dynamitemedia Posted April 18, 2016 Author Share Posted April 18, 2016 wow seems like forever since i was working with this... @UEZ this works great by itself, but when trying to use this in my gui it wont work till i click on the gui and then it displays... i have tried several things like even faking the mouse click.. i know it has something to do with being ui and maybe using gui switch but just wondering before i made this a popup you had any info i prefer it inside my gui as a child Link to comment Share on other sites More sharing options...
UEZ Posted April 18, 2016 Share Posted April 18, 2016 You can use e.g. AdlibRegister to display the progressbar which runs "multi threaded". Some more examples: GDI+ animated loading screens build 2014-06-20 (32 examples) Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
dynamitemedia Posted April 18, 2016 Author Share Posted April 18, 2016 awesome thanks... i was looking at the loading spinner ... is that possible to add right inside a gui as a child? and one other question... i want it to start on a button click so i made it another function. if i called this by using "downloadingSpinner()" in a for loop how would i break and delete the gui then? also any chance it can countdown the number instead of just "loading"? expandcollapse popup;coded by UEZ build 2014-02-08, idea taken from http://codepen.io/Fahrenheit/pen/Kbyxu ;AutoIt v3.3.9.21 or higher needed! #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> downloadingSpinner() func downloadingSpinner() _GDIPlus_Startup() Global Const $STM_SETIMAGE = 0x0172; $IMAGE_BITMAP = 0 Global $iW = 400, $iH = 250 Global Const $spinGUI = GUICreate("Loading Spinner", $iW, $iH, -1, -1, $WS_POPUP, $WS_EX_TOPMOST) Global Const $iPic = GUICtrlCreatePic("", 0, 0, $iW, $iH) GUICtrlSetState(-1, $GUI_DISABLE) GUISetState() Global $hHBmp_BG, $hB, $iPerc = 0, $iSleep = 30, $s = 0, $t, $m = 0 GUIRegisterMsg($WM_TIMER, "PlayAnim") DllCall("user32.dll", "int", "SetTimer", "hwnd", $spinGUI, "int", 0, "int", $iSleep, "int", 0) Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE GUIRegisterMsg($WM_TIMER, "") _WinAPI_DeleteObject($hHBmp_BG) _GDIPlus_Shutdown() GUIDelete($spinGUI) Exit EndSwitch Until False EndFunc Func PlayAnim() $hHBmp_BG = _GDIPlus_MultiColorLoader($iW, $iH, "LOADING") $hB = GUICtrlSendMsg($iPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBmp_BG) If $hB Then _WinAPI_DeleteObject($hB) _WinAPI_DeleteObject($hHBmp_BG) EndFunc ;==>PlayAnim Func _GDIPlus_MultiColorLoader($iW, $iH, $sText = "LOADING", $sFont = "Arial", $bHBitmap = True) Local Const $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) Local Const $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4 + (@OSBuild > 5999)) _GDIPlus_GraphicsSetTextRenderingHint($hGfx, 3) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) _GDIPlus_GraphicsClear($hGfx, 0xFF464655) Local $iRadius = ($iW > $iH) ? $iH * 0.6 : $iW * 0.6 Local Const $hPath = _GDIPlus_PathCreate() _GDIPlus_PathAddEllipse($hPath, ($iW - ($iRadius + 24)) / 2, ($iH - ($iRadius + 24)) / 2, $iRadius + 24, $iRadius + 24) Local $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath) _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFFFFFF) _GDIPlus_PathBrushSetSurroundColor($hBrush, 0x08101010) _GDIPlus_PathBrushSetGammaCorrection($hBrush, True) Local $aBlend[4][2] = [[3]] $aBlend[1][0] = 0 ;0% center color $aBlend[1][1] = 0 ;position = boundary $aBlend[2][0] = 0.33 ;70% center color $aBlend[2][1] = 0.1 ;10% of distance boundary->center point $aBlend[3][0] = 1 ;100% center color $aBlend[3][1] = 1 ;center point _GDIPlus_PathBrushSetBlend($hBrush, $aBlend) Local $aRect = _GDIPlus_PathBrushGetRect($hBrush) _GDIPlus_GraphicsFillRect($hGfx, $aRect[0], $aRect[1], $aRect[2], $aRect[3], $hBrush) _GDIPlus_PathDispose($hPath) _GDIPlus_BrushDispose($hBrush) Local Const $hBrush_Black = _GDIPlus_BrushCreateSolid(0xFF464655) _GDIPlus_GraphicsFillEllipse($hGfx, ($iW - ($iRadius + 10)) / 2, ($iH - ($iRadius + 10)) / 2, $iRadius + 10, $iRadius + 10, $hBrush_Black) Local Const $hBitmap_Gradient = _GDIPlus_BitmapCreateFromScan0($iRadius, $iRadius) Local Const $hGfx_Gradient = _GDIPlus_ImageGetGraphicsContext($hBitmap_Gradient) _GDIPlus_GraphicsSetSmoothingMode($hGfx_Gradient, 4 + (@OSBuild > 5999)) Local Const $hMatrix = _GDIPlus_MatrixCreate() Local Static $r = 0 _GDIPlus_MatrixTranslate($hMatrix, $iRadius / 2, $iRadius / 2) _GDIPlus_MatrixRotate($hMatrix, $r) _GDIPlus_MatrixTranslate($hMatrix, -$iRadius / 2, -$iRadius / 2) _GDIPlus_GraphicsSetTransform($hGfx_Gradient, $hMatrix) $r += 10 Local Const $hBrush_Gradient = _GDIPlus_LineBrushCreate($iRadius, $iRadius / 2, $iRadius, $iRadius, 0xFF000000, 0xff0066ff, 1) _GDIPlus_LineBrushSetGammaCorrection($hBrush_Gradient) _GDIPlus_GraphicsFillEllipse($hGfx_Gradient, 0, 0, $iRadius, $iRadius, $hBrush_Gradient) _GDIPlus_GraphicsFillEllipse($hGfx_Gradient, 4, 4, $iRadius - 8, $iRadius - 8, $hBrush_Black) _GDIPlus_GraphicsDrawImageRect($hGfx, $hBitmap_Gradient, ($iW - $iRadius) / 2, ($iH - $iRadius) / 2, $iRadius, $iRadius) _GDIPlus_BrushDispose($hBrush_Gradient) _GDIPlus_BrushDispose($hBrush_Black) _GDIPlus_GraphicsDispose($hGfx_Gradient) _GDIPlus_BitmapDispose($hBitmap_Gradient) _GDIPlus_MatrixDispose($hMatrix) Local Const $hFormat = _GDIPlus_StringFormatCreate() Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFont) Local Const $hFont = _GDIPlus_FontCreate($hFamily, $iRadius / 10) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) Local $tLayout = _GDIPlus_RectFCreate(0, 0, $iW, $iH) Local Static $iColor = 0x00, $iDir = 13 Local $hBrush_txt = _GDIPlus_BrushCreateSolid(0xFF000000 + 0x010000 * $iColor + 0x0100 * $iColor + $iColor) _GDIPlus_GraphicsDrawStringEx($hGfx, $sText, $hFont, $tLayout, $hFormat, $hBrush_txt) $iColor += $iDir If $iColor > 0xFF Then $iColor = 0xFF $iDir *= -1 ElseIf $iColor < 0x16 Then $iDir *= -1 $iColor = 0x16 EndIf _GDIPlus_BrushDispose($hBrush_txt) _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_GraphicsDispose($hGfx) If $bHBitmap Then Local $hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hHBITMAP EndIf Return $hBitmap EndFunc Link to comment Share on other sites More sharing options...
dynamitemedia Posted April 19, 2016 Author Share Posted April 19, 2016 i was able to get inside the gui no problem but i see that it does not play well with a for loop i already have in place... it will only go thru the loop once and stop but the animation keeps going ... when i un comment the "dllcall" ....it will go thru the loop no problem but wont show the animation... i thought it was the iSleep but its not. i have it all outside the for loop as you do in your example _GDIPlus_Startup() ;GUICtrlSetState(-1, $GUI_DISABLE) Global Const $STM_SETIMAGE = 0x0172; $IMAGE_BITMAP = 0 Global $iW = $iDialog_Width, $iH = $iDialog_Depth Global Const $spinGUI = GUICreate("Loading", $iDialog_Width, $iDialog_Depth, 0,100, $WS_POPUP, $WS_EX_MDICHILD, $hGUI) Global Const $iPic = GUICtrlCreatePic("", 0, 0, $iW, $iH) Global $hHBmp_BG, $hB, $iPerc = 0, $iSleep = 30, $s = 0, $t, $m = 0 GUISetState (@SW_SHOW, $spinGUI) GUISetState(@SW_ENABLE, $hGUI) WinActivate($hGUI) GUIRegisterMsg($WM_TIMER, "PlayAnim") DllCall("user32.dll", "int", "SetTimer", "hwnd", $spinGUI, "int", 0, "int", $iSleep, "int", 0) $iCounter = 0 For $i = 1 To $thumbCount - 1 $thumbCount -= 1 ConsoleWrite("Count Down : " & $thumbCount & @CRLF) $var = StringSplit ($image2load, "/") Local $sOldImage = $var[UBound ($var) - 1] Local $imgLabel = $aTitle[$i] Local $sNewImage = $sImagePath & "\" & $imgLabel & ".bmp" ConsoleWrite("New Image : " & $sNewImage & @CRLF) sleep (500) next Link to comment Share on other sites More sharing options...
UEZ Posted April 19, 2016 Share Posted April 19, 2016 (edited) You can do something like this here: expandcollapse popup;coded by UEZ build 2014-02-08, idea taken from http://codepen.io/Fahrenheit/pen/Kbyxu ;AutoIt v3.3.9.21 or higher needed! #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $hGUI_Main = GUICreate("Main GUI", 300, 200) Global $iBtn = GUICtrlCreateButton("Start", 200, 150, 50, 30) GUISetState() Global $iTimer, $iW = 400, $iH = 250, $iPic, $hHBmp_BG, $hB, $STM_SETIMAGE = 0x0172, $fTimer, $iTimer_Stop = 15 * 1000, $bFinished = False Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE GUIDelete() Exit Case $iBtn $fTimer = TimerInit() downloadingSpinner() $bFinished = False EndSwitch Until False downloadingSpinner() Func downloadingSpinner() _GDIPlus_Startup() Local Const $spinGUI = GUICreate("Loading Spinner", $iW, $iH, -1, -1, $WS_POPUP, $WS_EX_TOPMOST) $iPic = GUICtrlCreatePic("", 0, 0, $iW, $iH) GUICtrlSetState(-1, $GUI_DISABLE) GUISetState(@SW_SHOW, $spinGUI) Global $iSleep = 30, $s = 0, $t, $m = 0 GUIRegisterMsg($WM_TIMER, "PlayAnim") DllCall("user32.dll", "int", "SetTimer", "hwnd", $spinGUI, "int", 0, "int", $iSleep, "int", 0) Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch If $bFinished Then ExitLoop Until Not Sleep(50) GUIRegisterMsg($WM_TIMER, "") _WinAPI_DeleteObject($hHBmp_BG) _GDIPlus_Shutdown() GUIDelete($spinGUI) Return EndFunc ;==>downloadingSpinner Func PlayAnim() Local $iTimeDiff = $iTimer_Stop - TimerDiff($fTimer) If $iTimeDiff < 0 Then GUIRegisterMsg($WM_TIMER, "") $bFinished = True Else $hHBmp_BG = _GDIPlus_MultiColorLoader($iW, $iH, StringFormat("%.2f sec", $iTimeDiff / 1000)) $hB = GUICtrlSendMsg($iPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBmp_BG) If $hB Then _WinAPI_DeleteObject($hB) _WinAPI_DeleteObject($hHBmp_BG) EndIf EndFunc ;==>PlayAnim Func _GDIPlus_MultiColorLoader($iW, $iH, $sText = "LOADING", $sFont = "Arial", $bHBitmap = True) Local Const $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) Local Const $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4 + (@OSBuild > 5999)) _GDIPlus_GraphicsSetTextRenderingHint($hGfx, 3) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) _GDIPlus_GraphicsClear($hGfx, 0xFF464655) Local $iRadius = ($iW > $iH) ? $iH * 0.6 : $iW * 0.6 Local Const $hPath = _GDIPlus_PathCreate() _GDIPlus_PathAddEllipse($hPath, ($iW - ($iRadius + 24)) / 2, ($iH - ($iRadius + 24)) / 2, $iRadius + 24, $iRadius + 24) Local $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath) _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFFFFFF) _GDIPlus_PathBrushSetSurroundColor($hBrush, 0x08101010) _GDIPlus_PathBrushSetGammaCorrection($hBrush, True) Local $aBlend[4][2] = [[3]] $aBlend[1][0] = 0 ;0% center color $aBlend[1][1] = 0 ;position = boundary $aBlend[2][0] = 0.33 ;70% center color $aBlend[2][1] = 0.1 ;10% of distance boundary->center point $aBlend[3][0] = 1 ;100% center color $aBlend[3][1] = 1 ;center point _GDIPlus_PathBrushSetBlend($hBrush, $aBlend) Local $aRect = _GDIPlus_PathBrushGetRect($hBrush) _GDIPlus_GraphicsFillRect($hGfx, $aRect[0], $aRect[1], $aRect[2], $aRect[3], $hBrush) _GDIPlus_PathDispose($hPath) _GDIPlus_BrushDispose($hBrush) Local Const $hBrush_Black = _GDIPlus_BrushCreateSolid(0xFF464655) _GDIPlus_GraphicsFillEllipse($hGfx, ($iW - ($iRadius + 10)) / 2, ($iH - ($iRadius + 10)) / 2, $iRadius + 10, $iRadius + 10, $hBrush_Black) Local Const $hBitmap_Gradient = _GDIPlus_BitmapCreateFromScan0($iRadius, $iRadius) Local Const $hGfx_Gradient = _GDIPlus_ImageGetGraphicsContext($hBitmap_Gradient) _GDIPlus_GraphicsSetSmoothingMode($hGfx_Gradient, 4 + (@OSBuild > 5999)) Local Const $hMatrix = _GDIPlus_MatrixCreate() Local Static $r = 0 _GDIPlus_MatrixTranslate($hMatrix, $iRadius / 2, $iRadius / 2) _GDIPlus_MatrixRotate($hMatrix, $r) _GDIPlus_MatrixTranslate($hMatrix, -$iRadius / 2, -$iRadius / 2) _GDIPlus_GraphicsSetTransform($hGfx_Gradient, $hMatrix) $r += 10 Local Const $hBrush_Gradient = _GDIPlus_LineBrushCreate($iRadius, $iRadius / 2, $iRadius, $iRadius, 0xFF000000, 0xff0066ff, 1) _GDIPlus_LineBrushSetGammaCorrection($hBrush_Gradient) _GDIPlus_GraphicsFillEllipse($hGfx_Gradient, 0, 0, $iRadius, $iRadius, $hBrush_Gradient) _GDIPlus_GraphicsFillEllipse($hGfx_Gradient, 4, 4, $iRadius - 8, $iRadius - 8, $hBrush_Black) _GDIPlus_GraphicsDrawImageRect($hGfx, $hBitmap_Gradient, ($iW - $iRadius) / 2, ($iH - $iRadius) / 2, $iRadius, $iRadius) _GDIPlus_BrushDispose($hBrush_Gradient) _GDIPlus_BrushDispose($hBrush_Black) _GDIPlus_GraphicsDispose($hGfx_Gradient) _GDIPlus_BitmapDispose($hBitmap_Gradient) _GDIPlus_MatrixDispose($hMatrix) Local Const $hFormat = _GDIPlus_StringFormatCreate() Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFont) Local Const $hFont = _GDIPlus_FontCreate($hFamily, $iRadius / 10) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) Local $tLayout = _GDIPlus_RectFCreate(0, 0, $iW, $iH) Local Static $iColor = 0x00, $iDir = 13 Local $hBrush_txt = _GDIPlus_BrushCreateSolid(0xFF000000 + 0x010000 * $iColor + 0x0100 * $iColor + $iColor) _GDIPlus_GraphicsDrawStringEx($hGfx, $sText, $hFont, $tLayout, $hFormat, $hBrush_txt) $iColor += $iDir If $iColor > 0xFF Then $iColor = 0xFF $iDir *= -1 ElseIf $iColor < 0x16 Then $iDir *= -1 $iColor = 0x16 EndIf _GDIPlus_BrushDispose($hBrush_txt) _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_GraphicsDispose($hGfx) If $bHBitmap Then Local $hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hHBITMAP EndIf Return $hBitmap EndFunc ;==>_GDIPlus_MultiColorLoader Edited April 19, 2016 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
dynamitemedia Posted April 19, 2016 Author Share Posted April 19, 2016 ok i have tried changing this up a bit , i want to be able to stop it and delete that child gui but its not working... thanks for your help thus far you can see i changed it to a child of the main gui... but it does not let me stop it... if i click the x first it will delete the spinner then second close the entire thing expandcollapse popup;coded by UEZ build 2014-02-08, idea taken from http://codepen.io/Fahrenheit/pen/Kbyxu ;AutoIt v3.3.9.21 or higher needed! #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $hGUI= GUICreate("Main GUI", 600, 500) Global $cGo = GUICtrlCreateButton("Start", 100, 450, 50, 30) Global $cStop = GUICtrlCreateButton("Stop", 400, 450, 50, 30) GUISetState() Global $spinGUI,$iTimer, $iW = 400, $iH = 250, $iPic, $hHBmp_BG, $hB, $STM_SETIMAGE = 0x0172, $fTimer, $iTimer_Stop = 15 * 1000, $bFinished = False Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE GUIDelete($spinGUI) Exit Case $cGo $fTimer = TimerInit() downloadingSpinner() $bFinished = False GUISetState(@SW_ENABLE, $hGUI) WinActivate($hGUI) Case $cStop $bFinished = True GUIDelete($spinGUI) ExitLoop EndSwitch Until False downloadingSpinner() Func downloadingSpinner() _GDIPlus_Startup() Local Const $spinGUI = GUICreate("Loading Spinner", $iW, $iH, 100, 100, $WS_POPUP, $WS_EX_MDICHILD, $hGUI) $iPic = GUICtrlCreatePic("", 0, 0, $iW, $iH) GUICtrlSetState(-1, $GUI_DISABLE) GUISetState(@SW_SHOW, $spinGUI) Global $iSleep = 30, $s = 0, $t, $m = 0 GUIRegisterMsg($WM_TIMER, "PlayAnim") DllCall("user32.dll", "int", "SetTimer", "hwnd", $spinGUI, "int", 0, "int", $iSleep, "int", 0) Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch If $bFinished Then ExitLoop Until Not Sleep(50) GUIRegisterMsg($WM_TIMER, "") _WinAPI_DeleteObject($hHBmp_BG) _GDIPlus_Shutdown() GUIDelete($spinGUI) Return EndFunc ;==>downloadingSpinner Func PlayAnim() Local $iTimeDiff = $iTimer_Stop - TimerDiff($fTimer) If $iTimeDiff < 0 Then GUIRegisterMsg($WM_TIMER, "") $bFinished = True Else $hHBmp_BG = _GDIPlus_MultiColorLoader($iW, $iH, StringFormat("%.2f sec", $iTimeDiff / 1000)) $hB = GUICtrlSendMsg($iPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBmp_BG) If $hB Then _WinAPI_DeleteObject($hB) _WinAPI_DeleteObject($hHBmp_BG) EndIf EndFunc ;==>PlayAnim Func _GDIPlus_MultiColorLoader($iW, $iH, $sText = "LOADING", $sFont = "Arial", $bHBitmap = True) Local Const $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) Local Const $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4 + (@OSBuild > 5999)) _GDIPlus_GraphicsSetTextRenderingHint($hGfx, 3) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) _GDIPlus_GraphicsClear($hGfx, 0xFF464655) Local $iRadius = ($iW > $iH) ? $iH * 0.6 : $iW * 0.6 Local Const $hPath = _GDIPlus_PathCreate() _GDIPlus_PathAddEllipse($hPath, ($iW - ($iRadius + 24)) / 2, ($iH - ($iRadius + 24)) / 2, $iRadius + 24, $iRadius + 24) Local $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath) _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFFFFFF) _GDIPlus_PathBrushSetSurroundColor($hBrush, 0x08101010) _GDIPlus_PathBrushSetGammaCorrection($hBrush, True) Local $aBlend[4][2] = [[3]] $aBlend[1][0] = 0 ;0% center color $aBlend[1][1] = 0 ;position = boundary $aBlend[2][0] = 0.33 ;70% center color $aBlend[2][1] = 0.1 ;10% of distance boundary->center point $aBlend[3][0] = 1 ;100% center color $aBlend[3][1] = 1 ;center point _GDIPlus_PathBrushSetBlend($hBrush, $aBlend) Local $aRect = _GDIPlus_PathBrushGetRect($hBrush) _GDIPlus_GraphicsFillRect($hGfx, $aRect[0], $aRect[1], $aRect[2], $aRect[3], $hBrush) _GDIPlus_PathDispose($hPath) _GDIPlus_BrushDispose($hBrush) Local Const $hBrush_Black = _GDIPlus_BrushCreateSolid(0xFF464655) _GDIPlus_GraphicsFillEllipse($hGfx, ($iW - ($iRadius + 10)) / 2, ($iH - ($iRadius + 10)) / 2, $iRadius + 10, $iRadius + 10, $hBrush_Black) Local Const $hBitmap_Gradient = _GDIPlus_BitmapCreateFromScan0($iRadius, $iRadius) Local Const $hGfx_Gradient = _GDIPlus_ImageGetGraphicsContext($hBitmap_Gradient) _GDIPlus_GraphicsSetSmoothingMode($hGfx_Gradient, 4 + (@OSBuild > 5999)) Local Const $hMatrix = _GDIPlus_MatrixCreate() Local Static $r = 0 _GDIPlus_MatrixTranslate($hMatrix, $iRadius / 2, $iRadius / 2) _GDIPlus_MatrixRotate($hMatrix, $r) _GDIPlus_MatrixTranslate($hMatrix, -$iRadius / 2, -$iRadius / 2) _GDIPlus_GraphicsSetTransform($hGfx_Gradient, $hMatrix) $r += 10 Local Const $hBrush_Gradient = _GDIPlus_LineBrushCreate($iRadius, $iRadius / 2, $iRadius, $iRadius, 0xFF000000, 0xff0066ff, 1) _GDIPlus_LineBrushSetGammaCorrection($hBrush_Gradient) _GDIPlus_GraphicsFillEllipse($hGfx_Gradient, 0, 0, $iRadius, $iRadius, $hBrush_Gradient) _GDIPlus_GraphicsFillEllipse($hGfx_Gradient, 4, 4, $iRadius - 8, $iRadius - 8, $hBrush_Black) _GDIPlus_GraphicsDrawImageRect($hGfx, $hBitmap_Gradient, ($iW - $iRadius) / 2, ($iH - $iRadius) / 2, $iRadius, $iRadius) _GDIPlus_BrushDispose($hBrush_Gradient) _GDIPlus_BrushDispose($hBrush_Black) _GDIPlus_GraphicsDispose($hGfx_Gradient) _GDIPlus_BitmapDispose($hBitmap_Gradient) _GDIPlus_MatrixDispose($hMatrix) Local Const $hFormat = _GDIPlus_StringFormatCreate() Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFont) Local Const $hFont = _GDIPlus_FontCreate($hFamily, $iRadius / 10) _GDIPlus_StringFormatSetAlign($hFormat, 1) _GDIPlus_StringFormatSetLineAlign($hFormat, 1) Local $tLayout = _GDIPlus_RectFCreate(0, 0, $iW, $iH) Local Static $iColor = 0x00, $iDir = 13 Local $hBrush_txt = _GDIPlus_BrushCreateSolid(0xFF000000 + 0x010000 * $iColor + 0x0100 * $iColor + $iColor) _GDIPlus_GraphicsDrawStringEx($hGfx, $sText, $hFont, $tLayout, $hFormat, $hBrush_txt) $iColor += $iDir If $iColor > 0xFF Then $iColor = 0xFF $iDir *= -1 ElseIf $iColor < 0x16 Then $iDir *= -1 $iColor = 0x16 EndIf _GDIPlus_BrushDispose($hBrush_txt) _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_GraphicsDispose($hGfx) If $bHBitmap Then Local $hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hHBITMAP EndIf Return $hBitmap EndFunc ;==>_GDIPlus_MultiColorLoader Link to comment Share on other sites More sharing options...
UEZ Posted April 19, 2016 Share Posted April 19, 2016 Just add $cStop to the check of GUIGetMsg() in function downloadingSpinner() DllCall("user32.dll", "int", "SetTimer", "hwnd", $spinGUI, "int", 0, "int", $iSleep, "int", 0) Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $cStop ExitLoop EndSwitch If $bFinished Then ExitLoop Until Not Sleep(50) and it should work. dynamitemedia 1 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
dynamitemedia Posted April 19, 2016 Author Share Posted April 19, 2016 no matter how i get this in my gui it wont work sorry and i really appreciate your help it seems that it will start when i hit go , but just spin wont start loading images... if i hit stop it will then delte that gui and then start loading the thumbnail is it because of the loops or something in your code? i really like that spinner but man is it just not fitting.. is there a way to put this into an existing for loop and still work? like just be able to toss in this fort loop? like so $iCounter = 0 For $i = 1 To $thumbCount - 1 $thumbCount -= 1 ConsoleWrite("Count Down : " & $thumbCount & @CRLF) $var = StringSplit ($image2load, "/") Local $sOldImage = $var[UBound ($var) - 1] Local $imgLabel = $aTitle[$i] Local $sNewImage = $sImagePath & "\" & $imgLabel & ".bmp" ConsoleWrite("New Image : " & $sNewImage & @CRLF) downloadingSpinner() sleep (500) next and then delete it after the loop is done Link to comment Share on other sites More sharing options...
UEZ Posted April 20, 2016 Share Posted April 20, 2016 (edited) Just check your code: Case $cStop $bFinished = True GUIDelete($spinGUI) ExitLoop EndSwitch Until False downloadingSpinner() When you push the stop button it will delete the spinner GUI and exit the loop and start the spinner GUI again. I assume that's not what you want. The spinner it self is called every 30 milli seconds initiated by GUIRegisterMsg($WM_TIMER, "PlayAnim") DllCall("user32.dll", "int", "SetTimer", "hwnd", $spinGUI, "int", 0, "int", $iSleep, "int", 0) You have to pass the values in a global variable within the function PlayAnim()! $hHBmp_BG = _GDIPlus_MultiColorLoader($iW, $iH, StringFormat("%.2f sec", $iTimeDiff / 1000)) The bold red entry is the parameter for the text. That means for your scenario you have to pass a value within your loop For $i = 1 To $thumbCount - 1 to the call above _GDIPlus_MultiColorLoader. Edited April 20, 2016 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
dynamitemedia Posted April 20, 2016 Author Share Posted April 20, 2016 so like this For $i = 1 To $thumbCount - 1 $thumbCount -= 1 ConsoleWrite("Count Down : " & $thumbCount & @CRLF) $var = StringSplit ($image2load, "/") Local $sOldImage = $var[UBound ($var) - 1] Local $imgLabel = $aTitle[$i] Local $sNewImage = $sImagePath & "\" & $imgLabel & ".bmp" ConsoleWrite("New Image : " & $sNewImage & @CRLF) Global $txt2load = $thumbCount downloadingSpinner() sleep (500) next $hHBmp_BG = _GDIPlus_MultiColorLoader($iW, $iH, $txt2load) Link to comment Share on other sites More sharing options...
UEZ Posted April 20, 2016 Share Posted April 20, 2016 Why are you calling downloadingSpinner() in a loop? You have to display the spinner GUI and start the loop afterward. That means you have to modify the function downloadingSpinner() not to wait for GUI close rather start the GUI and return afterwards. When the loop above is finished then close the spinner GUI. Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
dynamitemedia Posted April 20, 2016 Author Share Posted April 20, 2016 ok and how do i get it to notify the downloadingSpinner() that the loop is finished and to stop it? something like this downloadingSpinner() For $i = 1 To $thumbCount - 1 $thumbCount -= 1 ConsoleWrite("Count Down : " & $thumbCount & @CRLF) $var = StringSplit ($image2load, "/") Local $sOldImage = $var[UBound ($var) - 1] Local $imgLabel = $aTitle[$i] Local $sNewImage = $sImagePath & "\" & $imgLabel & ".bmp" ConsoleWrite("New Image : " & $sNewImage & @CRLF) Global $txt2load = $thumbCount stopDownloadingSpinner() sleep (500) next then to stop it? Func stopDownloadingSpinner() GUIRegisterMsg($WM_TIMER, "") _WinAPI_DeleteObject($hHBmp_BG) _GDIPlus_Shutdown() GUIDelete($spinGUI) EndFunc then to get the text to playanim() Func PlayAnim($text2load) Local $iTimeDiff = $iTimer_Stop - TimerDiff($fTimer) If $iTimeDiff < 0 Then GUIRegisterMsg($WM_TIMER, "") $bFinished = True Else ;$text2load = StringFormat("%.2f sec", $iTimeDiff / 1000) $hHBmp_BG = _GDIPlus_MultiColorLoader($iW, $iH, $text2load) $hB = GUICtrlSendMsg($iPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBmp_BG) If $hB Then _WinAPI_DeleteObject($hB) _WinAPI_DeleteObject($hHBmp_BG) EndIf EndFunc ;==>PlayAnim sorry i am not at home to test... thank you! 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