Nemcija 2 Posted August 31, 2011 (edited) Hey, Is it possible to create a progressbar with text on it that turns it color (inverted or something) if the background turns dark? I've made a small sketch of it: Regards Nem Edited August 31, 2011 by Nemcija [url=www.vergessene-welt.de][/url] Share this post Link to post Share on other sites
SandelPerieanu 3 Posted September 1, 2011 try this: Share this post Link to post Share on other sites
Nemcija 2 Posted September 5, 2011 Nope this does not what I want. [url=www.vergessene-welt.de][/url] Share this post Link to post Share on other sites
Zedna 279 Posted September 5, 2011 (edited) Is it possible to create a progressbar with text on it that turns it color (inverted) if the background turns dark? I want to see some simple clever solution for tis too. EDIT: I remember in Delphi there was some standard component for this. Edited September 5, 2011 by Zedna Resources UDF ResourcesEx UDF AutoIt Forum Search Share this post Link to post Share on other sites
rover 50 Posted September 5, 2011 (edited) Nope this does not what I want. Look again That feature was requested in the thread ; Function Name: _ProgressSetFont() ; Description:: Sets the Font and Color of the Text of the Progressbar ; Parameter(s): $ID : ID of Progressbar ; $Font : Name of the font (empty String "" to do not change) ; $size : [Optional] size of the font ( 0 or negative to leave the old) ; $Styles : [Optional] The style of the typeface. Can be a combination of the following: ; 0 - Normal weight or thickness of the typeface ; 1 - Bold typeface ; 2 - Italic typeface ; 4 - Underline ; 8 - Strikethrough ; ( -1, negative to leave the old) ; $ARGBcolor : [Optional] the color of the font, can be RGB or ARGB (depending on $isARGB) ; (empty String "" to do not change) ; $InverseColor: [Optional] should the color be inversed when the bar is under the text? ; $isARGB : [Optional] Sets, whether $ARGBcolor is RGB (False, default) or ARGB (True) ; Requirement(s): This UDF ; Return Value(s): Success: 1, Error: 0 ; Author(s): Prog@ndy #include <StaticConstants.au3> #include <GDIpProgress.au3> Global $Gui, $nMsg, $iPercent, $slid, $sID, $iPos $Gui = GUICreate("Gradient ProgressBar", 400, 350) $slid = GUICtrlCreateSlider(5, 20, 310, 30) GUICtrlSetData(-1, 50) $sID = _ProgressCreate(10, 60, 300, 40) _ProgressSet($sID, 50) _ProgressSetText($sID, "Install %P%%") _ProgressSetColors($sID, 0x89A49B, 0xF0D6C7, 0xFFFFFF, 0xFFFFFF) _ProgressSetFont($sID, "", -1, -1, 0x000000, 1) GUISetState() While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE _ProgressDelete($sID) ; MUST BE DONE ON EXIT _Progress_CallBack_Free(1) ; Force Killing Timer _GDIPlus_Shutdown() Exit Case 0 ;The GUIRegisterMsg() with WM_HSCROLL/WM_VSCROLL on-event method is preferable to polling in the message loop $iPos = GUICtrlRead($slid) If $iPercent <> $iPos Then $iPercent = $iPos _ProgressSet($sID, $iPercent) EndIf EndSwitch WEnd Edited September 5, 2011 by rover I see fascists... Share this post Link to post Share on other sites
monoscout999 10 Posted September 6, 2011 (edited) Well, i came to late, but anyway i just write this, it is far to be perfect and is just an GDI+ exersice. expandcollapse popup#include <WinAPI.au3> #include <GDIPlus.au3> #include <GDIP.au3> Global $iPad = 2 Global $iWidth = 360 Global $iHeight = 30 Global $iMax = 100 Global $iValue = 50 Global $iStep = $iWidth / $iMax $hGui = GUICreate("GDI+ ProgressBar by monoscout999") ;~ GUISetBkColor(0X123456) $iPic = GUICtrlCreatePic("", 20 - $iPad, 100 - $iPad, $iWidth + $iPad * 2, $iHeight + $iPad * 2) _GDIPlus_Startup() $hGraphics = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($iPic)) $BackBufferBMP = _GDIPlus_BitmapCreateFromGraphics($iWidth + $iPad * 2, $iHeight + $iPad * 2, $hGraphics) $BackBufferGr = _GDIPlus_ImageGetGraphicsContext($BackBufferBMP) _GDIPlus_GraphicsSetSmoothingMode($BackBufferGr,2) $hFBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF) ; Fill area $hEBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF) ; Empty area & Fill text area ;~ $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) $hFormat = _GDIPlus_StringFormatCreate() $hFamily = _GDIPlus_FontFamilyCreate("Arial") $tLayout = _GDIPlus_RectFCreate((($iWidth + $iPad * 2) / 2) - 25, $iPad*4) $hPath = _GDIPLus_pathcreate() AdlibRegister("Drawing", 50) GUISetState() For $i = 1 to 100 $iValue = $i Sleep(50) Next Do Until GUIGetMsg() = -3 AdlibUnRegister("Drawing") _GDIPlus_PathDispose($hPath) _GDIPlus_FontFamilyDispose ($hFamily) _GDIPlus_StringFormatDispose ($hFormat) _GDIPlus_BrushDispose($hEBrush) _GDIPlus_BrushDispose($hFBrush) _GDIPlus_GraphicsDispose($BackBufferGr) _GDIPlus_BitmapDispose($BackBufferBMP) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_Shutdown() Func Drawing() _GDIPlus_GraphicsFillRect($BackBufferGr, 0, 0, $iWidth + $iPad * 2, $iHeight + $iPad * 2) _GDIPlus_GraphicsFillRect($BackBufferGr, $iPad, $iPad, round($iValue * $iStep), $iHeight,$hFBrush) _GDIPlus_GraphicsFillRect($BackBufferGr, $iValue * $iStep+$iPad, $iPad, round($iWidth - $iValue * $iStep), $iHeight, $hEBrush) _GDIPlus_PathReset($hPath) _GDIPlus_PathAddString($hPath, $iValue & " %", $tLayout, $hFamily, 3, 16, $hFormat) $RectRgn = _WinAPI_CreateRectRgn($iPad, $iPad, $iPad + round($iValue * $iStep), $iPad + $iHeight) $GDIRectRgn = _GDIPlus_RegionCreateFromHrgn($RectRgn) _GDIPlus_RegionCombinePath($GDIRectRgn, $hPath,1) _WinAPI_DeleteObject($RectRgn) _GDIPlus_GraphicsFillPath($BackBufferGr, $hPath) _GDIPlus_GraphicsFillRegion($BackBufferGr,$GDIRectRgn,$hEBrush) _GDIPlus_GraphicsDrawImageRect($hGraphics, $BackBufferBMP, 0, 0, $iWidth + $iPad * 2, $iHeight + $iPad * 2) _GDIPlus_RegionDispose($GDIRectRgn) EndFunc ;==>Drawing EDIT: It needs GDIP.au3, you can get it from the link in my signature. Edited September 6, 2011 by monoscout999 Share this post Link to post Share on other sites
Zedna 279 Posted September 6, 2011 (edited) Well, i came to late, but anyway i just write this, it is far to be perfect and is just an GDI+ exersice. Very nice example!That's exactly what I meant. It just have got some Round() related flicker bug at right corner area (fill empty rect),right vertical edge of progressbar (empty area) is moving by 1 or 2 pixels while it changes its value. Edited September 6, 2011 by Zedna Resources UDF ResourcesEx UDF AutoIt Forum Search Share this post Link to post Share on other sites
UEZ 1,273 Posted September 6, 2011 @monoscout999: nice example! Br, 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!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Share this post Link to post Share on other sites
monoscout999 10 Posted September 6, 2011 Thanks for the feedback i fix it and i make it good loooking too expandcollapse popup#include <WinAPI.au3> #include <GDIPlus.au3> #include <GDIP.au3> Global $iPad = 2 Global $iWidth = 360 Global $iHeight = 25 Global $iMax = 100 Global $iValue = 50 Global $iStep = $iWidth / $iMax Global $iLoopStep = 1 Global $iFontSize = Round($iHeight * 0.8) $hGui = GUICreate("GDI+ ProgressBar by monoscout999") GUISetBkColor(0X123456) $iPic = GUICtrlCreatePic("", 20 - $iPad, 100 - $iPad, $iWidth + $iPad * 2, $iHeight + $iPad * 2) _GDIPlus_Startup() $hGraphics = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($iPic)) $BackBufferBMP = _GDIPlus_BitmapCreateFromGraphics($iWidth + $iPad * 2, $iHeight + $iPad * 2, $hGraphics) $BackBufferGr = _GDIPlus_ImageGetGraphicsContext($BackBufferBMP) _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2) _GDIPlus_GraphicsSetSmoothingMode($BackBufferBMP, 2) $hCBrush = _GDIPlus_LineBrushCreate(0, 0, 0, $iHeight / 2, 0x11FFFFFF, 0xFF000000, 1) ; Contorn Brush $hFBrush = _GDIPlus_LineBrushCreate(0, 0, 0, $iHeight / 2, 0xFF000055, 0xFF0000FF, 1) ; Fill area $hEBrush = _GDIPlus_LineBrushCreate(0, 0, 0, $iHeight / 2, 0xFF777777, 0xFFFFFFFF, 1) ; Empty area & Fill text area $hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF) $hFormat = _GDIPlus_StringFormatCreate() $hFamily = _GDIPlus_FontFamilyCreate("Comic Sans MS") $tLayout = _GDIPlus_RectFCreate($iWidth / 2 - $iFontSize, $iHeight / 2 - $iFontSize / 1.5) ; Something Like that :S $hPath = _GDIPLus_pathcreate() AdlibRegister("Drawing", 50) GUISetState() For $i = 0 to $iMax step $iLoopStep $iValue = $i Sleep(50) If $iMax - $i < $iLoopStep then $iValue = $iMax Next Do Until GUIGetMsg() = -3 AdlibUnRegister("Drawing") _GDIPlus_PathDispose($hPath) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($hBrush) _GDIPlus_BrushDispose($hEBrush) _GDIPlus_BrushDispose($hFBrush) _GDIPlus_BrushDispose($hCBrush) _GDIPlus_GraphicsDispose($BackBufferGr) _GDIPlus_BitmapDispose($BackBufferBMP) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_Shutdown() Func Drawing() _GDIPlus_GraphicsFillRect($BackBufferGr, 0, 0, $iWidth + $iPad * 2, $iHeight + $iPad * 2,$hCBrush) _GDIPlus_GraphicsFillRect($BackBufferGr, $iPad, $iPad, Round($iValue * $iStep), $iHeight, $hFBrush) _GDIPlus_GraphicsFillRect($BackBufferGr, Round($iValue * $iStep + $iPad), $iPad, Round($iWidth - $iValue * $iStep), $iHeight, $hEBrush) _GDIPlus_PathReset($hPath) _GDIPlus_PathAddString($hPath, Round($iValue * 100 / $iMax) & " %", $tLayout, $hFamily, 2, $iFontSize, $hFormat) $RectRgn = _WinAPI_CreateRectRgn($iPad, $iPad, Round($iValue * $iStep), $iPad + $iHeight) $GDIRectRgn = _GDIPlus_RegionCreateFromHrgn($RectRgn) _GDIPlus_RegionCombinePath($GDIRectRgn, $hPath, 1) _WinAPI_DeleteObject($RectRgn) _GDIPlus_GraphicsFillPath($BackBufferGr, $hPath) _GDIPlus_GraphicsFillRegion($BackBufferGr, $GDIRectRgn, $hBrush) _GDIPlus_GraphicsDrawImageRect($hGraphics, $BackBufferBMP, 0, 0, $iWidth + $iPad * 2, $iHeight + $iPad * 2) _GDIPlus_RegionDispose($GDIRectRgn) EndFunc ;==>Drawing Share this post Link to post Share on other sites
Zedna 279 Posted September 6, 2011 (edited) Well, i came to late, but anyway i just write this, it is far to be perfect and is just an GDI+ exersice. EDIT: It needs GDIP.au3, you can get it from the link in my signature. Original Func Drawing() _GDIPlus_GraphicsFillRect($BackBufferGr, 0, 0, $iWidth + $iPad * 2, $iHeight + $iPad * 2) _GDIPlus_GraphicsFillRect($BackBufferGr, $iPad, $iPad, round($iValue * $iStep), $iHeight,$hFBrush) _GDIPlus_GraphicsFillRect($BackBufferGr, $iValue * $iStep+$iPad, $iPad, round($iWidth - $iValue * $iStep), $iHeight, $hEBrush) ... Fixed bad repainting of right edge: Func Drawing() _GDIPlus_GraphicsFillRect($BackBufferGr, 0, 0, $iWidth + $iPad * 2, $iHeight + $iPad * 2) _GDIPlus_GraphicsFillRect($BackBufferGr, $iPad, $iPad, $iWidth, $iHeight, $hEBrush) _GDIPlus_GraphicsFillRect($BackBufferGr, $iPad, $iPad, round($iValue * $iStep), $iHeight,$hFBrush) ... Edited September 6, 2011 by Zedna Resources UDF ResourcesEx UDF AutoIt Forum Search Share this post Link to post Share on other sites
monoscout999 10 Posted September 6, 2011 Thanks for the correction, I also have corrected that in the last post but in other way. Share this post Link to post Share on other sites