taietel Posted August 15, 2010 Posted August 15, 2010 (edited) Andreik posted here a question regarding some graphical controls similar with the ones from task manager (which uses DavesFrameClass controls).This is an example to start with (still needs a lot of work):Screenshot:expandcollapse popup#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <Array.au3> ; sample control to monitor something (v2.0) ; by Mihai Iancu (aka taietel at yahoo dot com) ; modify to fit your needs Global $points[1] Global $aControl[8] Global $hGui = GUICreate("A Whatever Monitor", 200, 120) GUISetState(@SW_SHOW) AdlibRegister("_Timer", 1000);register the timer While 1 Sleep(10) Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func _Timer() Local $RandVal = Random(0,100,1); Replace this with your value to monitor ;let's generate graph based on my brain activity at this moment... _MControl_DrawGraph($RandVal) GUICtrlSetData($aControl[1],"taietel's brain: "&$RandVal) EndFunc Func _MControl_Create($iX=10,$iY=10,$iW=180,$iH=80,$GridSpace=10,$GridColor=0x008800,$iBkColor=0x000000) If $iX = -1 Then $iX = 10 If $iY = -1 Then $iY = 10 If $iW < 180 Then $iW = 180 If $iH < 80 Then $iH = 80 Local $hGrafic = GUICtrlCreateGraphic($iX, $iY, $iW, $iH) GUICtrlSetColor(-1, $GridColor) GUICtrlSetBkColor(-1, $iBkColor) GUICtrlSetCursor(-1,0) Local $hValMon = GUICtrlCreateLabel("",$iX, $iY+$IH, $iW,12,BitOR($SS_LEFT,$SS_CENTERIMAGE)) GUICtrlSetFont(-1,6,400,0,"Terminal") GUICtrlSetColor(-1,0x00CC00) GUICtrlSetBkColor(-1,0x000000) ;store the data _ArrayInsert($aControl,0,$hGrafic) _ArrayInsert($aControl,1,$hValMon) _ArrayInsert($aControl,2,$iX) _ArrayInsert($aControl,3,$iY) _ArrayInsert($aControl,4,$iW) _ArrayInsert($aControl,5,$iH) _ArrayInsert($aControl,6,$GridColor) _ArrayInsert($aControl,7,$GridSpace) Return $aControl EndFunc Func _MControl_DrawGraph($iValue) Local $MaxValue = 100 Local $MinValue = 0 Local $maxSteps Local $fromPoint Local $toPoint Local $Step = 3 If $iValue< $MinValue Or $iValue > $MaxValue Then Return False Else $maxSteps = $aControl[4]/$Step If UBound($points) >= $maxSteps Then For $i = 1 To UBound($points)-1 _ArraySwap($points[$i - 1],$points[$i]) _ArrayDelete($points,$i) Return False Next EndIf _ArrayInsert($points,UBound($points),$iValue) GUICtrlDelete($aControl[0]) _MControl_Create() For $i = $aControl[5] To 0 Step - $aControl[7] GUICtrlSetGraphic($aControl[0], $GUI_GR_COLOR, $aControl[6]) GUICtrlSetGraphic($aControl[0], $GUI_GR_MOVE, 0, $i) GUICtrlSetGraphic($aControl[0], $GUI_GR_LINE, $aControl[4], $i) Next For $i = $aControl[7] - 1 To $aControl[4] Step $aControl[7] GUICtrlSetGraphic($aControl[0], $GUI_GR_MOVE, $i,0) GUICtrlSetGraphic($aControl[0], $GUI_GR_LINE, $i,$aControl[5]) Next If UBound($points) > 0 Then For $i = 1 To UBound($points)-1 $fromPoint = $aControl[5] / ($MaxValue - $MinValue) * ($points[$i - 1] - $MinValue) $toPoint = $aControl[5] / ($MaxValue - $MinValue) * ($points[$i] - $MinValue) GUICtrlSetGraphic($aControl[0], $GUI_GR_COLOR, 0xFFFF00) GUICtrlSetGraphic($aControl[0], $GUI_GR_MOVE, $aControl[4] - (UBound($points) - $i + 1) * $Step, $aControl[5] - $fromPoint) GUICtrlSetGraphic($aControl[0], $GUI_GR_LINE, $aControl[4] - (UBound($points) - $i) * $Step, $aControl[5] - $toPoint) Next GUICtrlSetGraphic($aControl[0], $GUI_GR_REFRESH) EndIf Return True EndIf EndFuncFeel free to use it!M.I.[edit] v1: it doesn't move when it reaches the left side. (29 downloads, replaced with v2) v2: Now it slides, but when it reaches the left side, it jumps a value (working on it...) Control_Monitor.au3 Edited August 16, 2010 by taietel Things you should know first...In the beginning there was only ONE! And zero... Progs: Create PDF(TXT2PDF,IMG2PDF) 3D Bar Graph DeskGadget Menu INI Photo Mosaic 3D Text
Ascend4nt Posted August 15, 2010 Posted August 15, 2010 Very cool. Nice job! I'm guessing using the basic AutoIt functions, it wouldn't be possible to scroll the graph too? My contributions: Performance Counters in Windows - Measure CPU, Disk, Network etc Performance | Network Interface Info, Statistics, and Traffic | CPU Multi-Processor Usage w/o Performance Counters | Disk and Device Read/Write Statistics | Atom Table Functions | Process, Thread, & DLL Functions UDFs | Process CPU Usage Trackers | PE File Overlay Extraction | A3X Script Extract | File + Process Imports/Exports Information | Windows Desktop Dimmer Shade | Spotlight + Focus GUI - Highlight and Dim for Eyestrain Relief | CrossHairs (FullScreen) | Rubber-Band Boxes using GUI's (_GUIBox) | GUI Fun! | IE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) | Magnifier (Vista+) Functions UDF | _DLLStructDisplay (Debug!) | _EnumChildWindows (controls etc) | _FileFindEx | _ClipGetHTML | _ClipPutHTML + ClipPutHyperlink | _FileGetShortcutEx | _FilePropertiesDialog | I/O Port Functions | File(s) Drag & Drop | _RunWithReducedPrivileges | _ShellExecuteWithReducedPrivileges | _WinAPI_GetSystemInfo | dotNETGetVersions | Drive(s) Power Status | _WinGetDesktopHandle | _StringParseParameters | Screensaver, Sleep, Desktop Lock Disable | Full-Screen Crash Recovery Wrappers/Modifications of others' contributions: _DOSWildcardsToPCRegEx (original code: RobSaunder's) | WinGetAltTabWinList (original: Authenticity) UDF's added support/programming to: _ExplorerWinGetSelectedItems | MIDIEx UDF (original code: eynstyne) (All personal code/wrappers centrally located at Ascend4nt's AutoIT Code)
taietel Posted August 15, 2010 Author Posted August 15, 2010 Thank you Ascend4nt! I'm working on it ! Things you should know first...In the beginning there was only ONE! And zero... Progs: Create PDF(TXT2PDF,IMG2PDF) 3D Bar Graph DeskGadget Menu INI Photo Mosaic 3D Text
Ascend4nt Posted August 15, 2010 Posted August 15, 2010 Cool. A little birdie (I'm looking at you KaFu ) just told me about the Scrolling Line Graph UDF, which does scrolling and more - but its a bit more code of course, and requires GDIPlus. Most of that could probably be rewritten to use GDI32, but I'm not in dire need of such functionality really.I was pretty surprised you were able to do as much as you have, using basic AutoIt functions I wasn't even aware of My contributions: Performance Counters in Windows - Measure CPU, Disk, Network etc Performance | Network Interface Info, Statistics, and Traffic | CPU Multi-Processor Usage w/o Performance Counters | Disk and Device Read/Write Statistics | Atom Table Functions | Process, Thread, & DLL Functions UDFs | Process CPU Usage Trackers | PE File Overlay Extraction | A3X Script Extract | File + Process Imports/Exports Information | Windows Desktop Dimmer Shade | Spotlight + Focus GUI - Highlight and Dim for Eyestrain Relief | CrossHairs (FullScreen) | Rubber-Band Boxes using GUI's (_GUIBox) | GUI Fun! | IE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) | Magnifier (Vista+) Functions UDF | _DLLStructDisplay (Debug!) | _EnumChildWindows (controls etc) | _FileFindEx | _ClipGetHTML | _ClipPutHTML + ClipPutHyperlink | _FileGetShortcutEx | _FilePropertiesDialog | I/O Port Functions | File(s) Drag & Drop | _RunWithReducedPrivileges | _ShellExecuteWithReducedPrivileges | _WinAPI_GetSystemInfo | dotNETGetVersions | Drive(s) Power Status | _WinGetDesktopHandle | _StringParseParameters | Screensaver, Sleep, Desktop Lock Disable | Full-Screen Crash Recovery Wrappers/Modifications of others' contributions: _DOSWildcardsToPCRegEx (original code: RobSaunder's) | WinGetAltTabWinList (original: Authenticity) UDF's added support/programming to: _ExplorerWinGetSelectedItems | MIDIEx UDF (original code: eynstyne) (All personal code/wrappers centrally located at Ascend4nt's AutoIT Code)
taietel Posted August 15, 2010 Author Posted August 15, 2010 I'm trying NOT to use GDIPlus. And keep it as simple as I can. It's more like a challenge to myself. Things you should know first...In the beginning there was only ONE! And zero... Progs: Create PDF(TXT2PDF,IMG2PDF) 3D Bar Graph DeskGadget Menu INI Photo Mosaic 3D Text
jaberwacky Posted August 15, 2010 Posted August 15, 2010 (edited) WARNING: silly little example follows...expandcollapse popup; sample control to monitor something ; by Mihai Iancu (aka taietel at yahoo dot com) ; modify to fit your needs #region Organize Includes #include <Array.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> HotKeySet("{ESC}", "term") OnAutoItExitRegister("_exit") Global $aControl[6] ; this array stores data regarding the control Global $m = 1 ; initiate timer Global $oldval ; to store previous value of the graph Global COnst $ScriptTitle = "Whatever Monitor" Global Const $MilliSeconds = 86.7 ; an approximate 1.5 hertz square wave -- hah is that possible? I guess, as long as it is not zero hertz =O ;~ Global Const $SquareWaveString = "0,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,20,20,20,20,20,20,20,20,20,20,0,0,0,0,0,0,0,0,0,0,30,30,30,30,30,30,30,30,30,30,0,0,0,0,0,0,0,0,0,0,40,40,40,40,40,40,40,40,40,40,0,0,0,0,0,0,0,0,0,0,50,50,50,50,50,50,50,50,50,50,0,0,0,0,0,0,0,0,0,0,60,60,60,60,60,60,60,60,60,60,0,0,0,0,0,0,0,0,0,0,70,70,70,70,70,70,70,70,70,70,0,0,0,0,0,0,0,0,0,0,80,80,80,80,80,80,80,80,80,80,80,0" ; an approximate one hertz square wave of amplitude 90 ;~ Global Const $SquareWaveString = "0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0,0,90,90,90,90,90,0,0,0,0" ; Global Const $SquareWaveString = "0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,90,0,0,90,0" Global Const $SquareWave = StringSplit($SquareWaveString, ',') Global Const $hGui = GUICreate($ScriptTitle, 520, 132) WinSetTrans($ScriptTitle, '', 230) GUISetState() _MControl_Create(-1, -1, 510, 100, 12) AdlibRegister("_Timer", $MilliSeconds) ; register the timer While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func _MControl_Create($iX = 10, $iY = 10, $iW = 120, $iH = 50, Const $iGridStep = 10, Const $iGridColor = 0x008800) If $iX = -1 Then $iX = 10 If $iY = -1 Then $iY = 10 If $iW < 120 Then $iW = 120 If $iH < 50 Then $iH = 50 If $iGridStep <= 0 Then Return SetError(-1, 0, 1) Local Const $hGrafic = GUICtrlCreateGraphic($iX, $iY, $iW, $iH) GUICtrlSetBkColor(-1, 0x000000) GUICtrlSetCursor(-1, 0) GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $iGridColor) For $i = 0 To $iH Step $iGridStep GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, $i) GUICtrlSetGraphic(-1, $GUI_GR_LINE, $iW, $i) Next For $j = 0 To $iW Step $iGridStep GUICtrlSetGraphic(-1, $GUI_GR_MOVE, $j, 0) GUICtrlSetGraphic(-1, $GUI_GR_LINE, $j, $iH) Next Local Const $hValMon = GUICtrlCreateLabel(' ', $iX, $iY + $iH + 1, $iW + 1, 12, BitOR($SS_LEFT, $SS_CENTERIMAGE)) GUICtrlSetFont(-1, 6, 400, 0, "Terminal") GUICtrlSetColor(-1, 0x00CC00) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; store the data I've told you about in the begining _ArrayInsert($aControl, 0, $hGrafic) _ArrayInsert($aControl, 1, $hValMon) _ArrayInsert($aControl, 2, $iX) _ArrayInsert($aControl, 3, $iY) _ArrayInsert($aControl, 4, $iW) _ArrayInsert($aControl, 5, $iH) Return $aControl EndFunc ;==>_MControl_Create Func _MControl_Graph($Value) If $Value >= $aControl[4] Then $Value = $aControl[4] - 1 Local Const $Step = 3 Local Const $w = $aControl[4] Local Const $h = $aControl[5] GUICtrlSetGraphic($aControl[0], $GUI_GR_COLOR, 0xFFFF00) GUICtrlSetGraphic($aControl[0], $GUI_GR_LINE, $w - $Step * $m, $h - $Value) GUICtrlSetGraphic($aControl[0], $GUI_GR_REFRESH) $oldval = $Value If $m = $SquareWave[0] Then MsgBox(64, $ScriptTitle, "This was just an example." & @CRLF & "Now play with it!") AdlibUnRegister() Exit EndIf EndFunc ;==>_MControl_Graph Func _Timer() ; generate square wave Local Const $v = $SquareWave[$m] _MControl_Graph($v) If $m <= 1 Then GUICtrlSetData($aControl[1], " Value: " & $v & ", Elapsed: " & $m * (100 / 1000) & " second") Else GUICtrlSetData($aControl[1], " Value: " & $v & ", Elapsed: " & $m * (100 / 1000) & " seconds") EndIf $m += 1 ; increment the value EndFunc ;==>_Timer Func term() Exit EndFunc ;==>term Func _exit() OnAutoItExitUnregister("_exit") GUIDelete($hGui) EndFunc Edited August 16, 2010 by jaberwocky6669 Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
taietel Posted August 15, 2010 Author Posted August 15, 2010 jaberwocky6669, nice one! Playing already! Try to set the hGui transparency to 230, increase iH to 12 (the height of the label) and replace bg color of the label from 0x000000 to $GUI_BKCOLOR_TRANSPARENT. When I've changed those in your example, the graph didn't flicker; just the label, a little bit. Things you should know first...In the beginning there was only ONE! And zero... Progs: Create PDF(TXT2PDF,IMG2PDF) 3D Bar Graph DeskGadget Menu INI Photo Mosaic 3D Text
jaberwacky Posted August 16, 2010 Posted August 16, 2010 Try to set the hGui transparency to 230Sorry, unless you mean WinSetTrans() then I don't see a way to set the window transparency. Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
taietel Posted August 16, 2010 Author Posted August 16, 2010 jaberwocky6669, yes, I was referring at WinSetTrans(). Sorry for my laziness!... And thanks for the example. I like the idea with squarewave. Things you should know first...In the beginning there was only ONE! And zero... Progs: Create PDF(TXT2PDF,IMG2PDF) 3D Bar Graph DeskGadget Menu INI Photo Mosaic 3D Text
jaberwacky Posted August 16, 2010 Posted August 16, 2010 Indeed there is far less flicker. Sweet! I got this to work on my machine for 16.2 seconds (+/- one tenth of a second). So now it does an approximate one hertz squarewave. See previous post #6 for the example update ^^^^ Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
Zibit Posted August 16, 2010 Posted August 16, 2010 Amazing. Good job im loving it. Your the -> Creator Of Xtreme DevelopersPixel Pattern UDFTray GUI UDFMathssend & recive register scriptMouse Control via Webcam
taietel Posted August 16, 2010 Author Posted August 16, 2010 Now it moves (see the first post). v1 replaced with v2. Things you should know first...In the beginning there was only ONE! And zero... Progs: Create PDF(TXT2PDF,IMG2PDF) 3D Bar Graph DeskGadget Menu INI Photo Mosaic 3D Text
johnlock Posted August 18, 2010 Posted August 18, 2010 urgent this is something wrong with this scrip : D:\Desktop\autoit joy\moniter.au3(15,29) : ERROR: AdlibRegister(): undefined function. AdlibRegister("_Timer", 1000) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ D:\Desktop\autoit joy\moniter.au3 - 1 error(s), 0 warning(s)
taietel Posted August 18, 2010 Author Posted August 18, 2010 (edited) johnlock, you have an older version of Autoit. Replace AdlibRegister with AdlibEnable. [edit] Download the latest version of AutoIt and run it again, then see if the error occurs again. Edited August 18, 2010 by taietel Things you should know first...In the beginning there was only ONE! And zero... Progs: Create PDF(TXT2PDF,IMG2PDF) 3D Bar Graph DeskGadget Menu INI Photo Mosaic 3D Text
taietel Posted August 18, 2010 Author Posted August 18, 2010 You're welcome! Things you should know first...In the beginning there was only ONE! And zero... Progs: Create PDF(TXT2PDF,IMG2PDF) 3D Bar Graph DeskGadget Menu INI Photo Mosaic 3D Text
Andreik Posted August 18, 2010 Posted August 18, 2010 And what about graphic flick? Is more good prjTrendView object for this kind of work, as you suggest.
Zibit Posted August 18, 2010 Posted August 18, 2010 pfft gonna make a UDF like this xD Creator Of Xtreme DevelopersPixel Pattern UDFTray GUI UDFMathssend & recive register scriptMouse Control via Webcam
taietel Posted August 18, 2010 Author Posted August 18, 2010 Andreik, this was more like a proof of concept. It flickers because it redraw the whole thing once the function is called (I'll use some functions of KaFu (*DeferWindowPos) for solving that). The data is stored in an array as it is processed, every "i" value becoming "i-1". I've tried not to use GDI, using just simple functions.Zibit, I've thought of that, but I have to finish it first, with a little delay (some problems need to be solved first ). If you have more spare time, be my guest! The "problem" with skipping a value when it reaches the left side is almost solved (was related with the array). Things you should know first...In the beginning there was only ONE! And zero... Progs: Create PDF(TXT2PDF,IMG2PDF) 3D Bar Graph DeskGadget Menu INI Photo Mosaic 3D Text
andybiochem Posted August 18, 2010 Posted August 18, 2010 Your problem with flickering can be mostly solved with use of:1)GUI double buffer using 0x2000000 as an extended style2) Put GUISetState(@SW_LOCK) and GUISetState(@SW_UNLOCK) around your re-graphing function, just before it's deleted and until just after it's refreshed.Example:expandcollapse popup#include <GUIConstantsEx.au3> GUICreate("", 586, 314, -1, -1, -1, 0x2000000) Global $aData[101] Global $gGraph = _Graph_Create(50, 18, 513, 254) _Graph_SetRange_X($gGraph, 1, 100, 0) _Graph_SetRange_Y($gGraph, 0, 100, 10) _Redraw() GUISetState() Do Sleep(50) _Randomise() _Redraw() Until GUIGetMsg() = -3 Func _Randomise() For $i = 1 To 99 $aData[$i] = $aData[$i + 1] Next $aData[100] = Random(0, 100) EndFunc ;==>_Randomise Func _Redraw() GUISetState(@SW_LOCK) _Graph_Clear($gGraph) _Graph_SetGrid_X($gGraph, 5, 0x468c2f) _Graph_SetGrid_Y($gGraph, 10, 0x468c2f) _Graph_Set_Color($gGraph, 0xF9F32B) _Graph_Plot_Start($gGraph, 1, $gGraph[1]) For $i = 1 To 100 _Graph_Plot_Line($gGraph, $i, $aData[$i]) _Graph_Plot_Point($gGraph, $i, $aData[$i]) Next _Graph_Refresh($gGraph) GUISetState(@SW_UNLOCK) EndFunc ;==>_Redraw ;#### GRAPH UDF ############################################################################################################### ; #FUNCTION# ============================================================================ ; Name...........: _Graph_Create ; Description ...: Creates graph area, and prepares array of specified data ; Syntax.........: _Graph_Create($iLeft,$iTop,$iWidth,$iHeight) ; Parameters ....: $iLeft - left most position in GUI ; $iTop - top most position in GUI ; $iWidth - width of graph in pixels ; $iHeight - height of graph in pixels ; Return values .: Returns array containing variables for subsequent functions... ; Returned Graph array is: ; [1] graphic control handle ; [2] left ; [3] top ; [4] width ; [5] height ; [6] x low ; [7] x high ; [8] y low ; [9] y high ; [10] x ticks handles ; [11] x labels handles ; [12] y ticks handles ; [13] y labels handles ; [14] Border Colour ; [15] Fill Colour ; ======================================================================================= Func _Graph_Create($iLeft, $iTop, $iWidth, $iHeight, $hColourBorder = 0x000000, $hColorFill = 0xFFFFFF) $hWnd = GUICtrlCreateGraphic($iLeft, $iTop, $iWidth + 1, $iHeight + 1) GUICtrlSetColor(-1, $hColourBorder) GUICtrlSetBkColor(-1, $hColorFill) Local $ahTicksLabelsX[1] Local $ahTicksLabelsY[1] Local $ahTicksX[1] Local $ahTicksY[1] Dim $aGraphArray[16] = ["", $hWnd, $iLeft, $iTop, $iWidth, $iHeight, 0, 1, 0, 1, _ $ahTicksX, $ahTicksLabelsX, $ahTicksY, $ahTicksLabelsY, $hColourBorder, $hColorFill] Return $aGraphArray EndFunc ;==>_Graph_Create ; #FUNCTION# ============================================================================ ; Name...........: _Graph_Delete ; Description ...: Deletes previously created graph and related ticks/labels ; Syntax.........: _Graph_Delete(ByRef $aGraphArray) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; ======================================================================================= Func _Graph_Delete(ByRef $aGraphArray) ;----- delete x ticks/labels ----- $ahTicksX = $aGraphArray[10] $ahTicksLabelsX = $aGraphArray[11] For $i = 1 to (UBound($ahTicksX) - 1) GUICtrlDelete($ahTicksX[$i]) Next For $i = 1 to (UBound($ahTicksLabelsX) - 1) GUICtrlDelete($ahTicksLabelsX[$i]) Next ;----- delete y ticks/labels ----- $ahTicksY = $aGraphArray[12] $ahTicksLabelsY = $aGraphArray[13] For $i = 1 to (UBound($ahTicksY) - 1) GUICtrlDelete($ahTicksY[$i]) Next For $i = 1 to (UBound($ahTicksLabelsY) - 1) GUICtrlDelete($ahTicksLabelsY[$i]) Next Dim $ahTicksLabelsY[1] ;----- delete graphic control ----- GUICtrlDelete($aGraphArray[1]) ;----- close array ----- $aGraphArray = 0 EndFunc ;==>_Graph_Delete ; #FUNCTION# ============================================================================ ; Name...........: _Graph_Clear ; Description ...: Clears graph content ; Syntax.........: _Graph_Clear(ByRef $aGraphArray) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; ======================================================================================= Func _Graph_Clear(ByRef $aGraphArray) GUICtrlDelete($aGraphArray[1]) $aGraphArray[1] = GUICtrlCreateGraphic($aGraphArray[2], $aGraphArray[3], _ $aGraphArray[4] + 1, $aGraphArray[5] + 1) GUICtrlSetBkColor(-1, 0x000000) GUICtrlSetColor(-1, 0x000000) EndFunc ;==>_Graph_Clear ; #FUNCTION# ============================================================================ ; Name...........: _Graph_SetRange_X ; Description ...: Allows user to set the range of the X axis and set ticks and rounding levels ; Syntax.........: _Graph_SetRange_X(ByRef $aGraphArray,$iLow,$iHigh,$iXTicks = 1,$bLabels = 1,$iRound = 0) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $iLow - the lowest value for the X axis (can be negative) ; $iHigh - the highest value for the X axis ; $iXTicks - [optional] number of ticks to show below axis, if = 0 then no ticks created ; $bLabels - [optional] 1=show labels, any other number=do not show labels ; $iRound - [optional] rounding level of label values ; ======================================================================================= Func _Graph_SetRange_X(ByRef $aGraphArray, $iLow, $iHigh, $iXTicks = 1, $bLabels = 1, $iRound = 0) ;----- load user vars to array ----- $aGraphArray[6] = $iLow $aGraphArray[7] = $iHigh ;----- prepare nested array ----- $ahTicksX = $aGraphArray[10] $ahTicksLabelsX = $aGraphArray[11] ;----- delete any existing ticks ----- For $i = 1 to (UBound($ahTicksX) - 1) GUICtrlDelete($ahTicksX[$i]) Next Dim $ahTicksX[1] ;----- create new ticks ----- For $i = 1 To $iXTicks + 1 ReDim $ahTicksX[$i + 1] $ahTicksX[$i] = GUICtrlCreateLabel("", (($i - 1) * ($aGraphArray[4] / $iXTicks)) + $aGraphArray[2], _ $aGraphArray[3] + $aGraphArray[5], 1, 5) GUICtrlSetBkColor(-1, 0x000000) GUICtrlSetState(-1, $GUI_DISABLE) Next ;----- delete any existing labels ----- For $i = 1 to (UBound($ahTicksLabelsX) - 1) GUICtrlDelete($ahTicksLabelsX[$i]) Next Dim $ahTicksLabelsX[1] ;----- create new labels ----- For $i = 1 To $iXTicks + 1 ReDim $ahTicksLabelsX[$i + 1] $ahTicksLabelsX[$i] = GUICtrlCreateLabel("", _ ($aGraphArray[2] + (($aGraphArray[4] / $iXTicks) * ($i - 1))) - (($aGraphArray[4] / $iXTicks) / 2), _ $aGraphArray[3] + $aGraphArray[5] + 10, $aGraphArray[4] / $iXTicks, 13, 1) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) Next ;----- if labels are required, then fill ----- If $bLabels = 1 Then For $i = 1 To (UBound($ahTicksLabelsX) - 1) GUICtrlSetData($ahTicksLabelsX[$i], _ StringFormat("%." & $iRound & "f", _Graph_Reference_Pixel("p", (($i - 1) * ($aGraphArray[4] / $iXTicks)), _ $aGraphArray[6], $aGraphArray[7], $aGraphArray[4]))) Next EndIf ;----- load created arrays back into array ----- $aGraphArray[10] = $ahTicksX $aGraphArray[11] = $ahTicksLabelsX EndFunc ;==>_Graph_SetRange_X ; #FUNCTION# ============================================================================ ; Name...........: _Graph_SetRange_Y ; Description ...: Allows user to set the range of the Y axis and set ticks and rounding levels ; Syntax.........: _Graph_SetRange_Y(ByRef $aGraphArray,$iLow,$iHigh,$iYTicks = 1,$bLabels = 1,$iRound = 0) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $iLow - the lowest value for the Y axis (can be negative) ; $iHigh - the highest value for the Y axis ; $iYTicks - [optional] number of ticks to show next to axis, if = 0 then no ticks created ; $bLabels - [optional] 1=show labels, any other number=do not show labels ; $iRound - [optional] rounding level of label values ; ======================================================================================= Func _Graph_SetRange_Y(ByRef $aGraphArray, $iLow, $iHigh, $iYTicks = 1, $bLabels = 1, $iRound = 0) ;----- load user vars to array ----- $aGraphArray[8] = $iLow $aGraphArray[9] = $iHigh ;----- prepare nested array ----- $ahTicksY = $aGraphArray[12] $ahTicksLabelsY = $aGraphArray[13] ;----- delete any existing ticks ----- For $i = 1 to (UBound($ahTicksY) - 1) GUICtrlDelete($ahTicksY[$i]) Next Dim $ahTicksY[1] ;----- create new ticks ----- For $i = 1 To $iYTicks + 1 ReDim $ahTicksY[$i + 1] $ahTicksY[$i] = GUICtrlCreateLabel("", $aGraphArray[2] - 5, _ ($aGraphArray[3] + $aGraphArray[5]) - (($aGraphArray[5] / $iYTicks) * ($i - 1)), 5, 1) GUICtrlSetBkColor(-1, 0x000000) GUICtrlSetState(-1, $GUI_DISABLE) Next ;----- delete any existing labels ----- For $i = 1 to (UBound($ahTicksLabelsY) - 1) GUICtrlDelete($ahTicksLabelsY[$i]) Next Dim $ahTicksLabelsY[1] ;----- create new labels ----- For $i = 1 To $iYTicks + 1 ReDim $ahTicksLabelsY[$i + 1] $ahTicksLabelsY[$i] = GUICtrlCreateLabel("", $aGraphArray[2] - 40, _ ($aGraphArray[3] + $aGraphArray[5]) - (($aGraphArray[5] / $iYTicks) * ($i - 1)) - 6, 30, 13, 2) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) Next ;----- if labels are required, then fill ----- If $bLabels = 1 Then For $i = 1 To (UBound($ahTicksLabelsY) - 1) GUICtrlSetData($ahTicksLabelsY[$i], StringFormat("%." & $iRound & "f", _Graph_Reference_Pixel("p", _ (($i - 1) * ($aGraphArray[5] / $iYTicks)), $aGraphArray[8], $aGraphArray[9], $aGraphArray[5]))) Next EndIf ;----- load created arrays back into array ----- $aGraphArray[12] = $ahTicksY $aGraphArray[13] = $ahTicksLabelsY EndFunc ;==>_Graph_SetRange_Y ; #FUNCTION# ============================================================================= ; Name...........: _Graph_Plot_Start ; Description ...: Move starting point of plot ; Syntax.........: _Graph_Plot_Start(ByRef $aGraphArray,$iX,$iY) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $iX - x value to start at ; $iY - y value to start at ; ======================================================================================== Func _Graph_Plot_Start(ByRef $aGraphArray, $iX, $iY) ;----- MOVE pen to start point ----- GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_MOVE, _ _Graph_Reference_Pixel("x", $iX, $aGraphArray[6], $aGraphArray[7], $aGraphArray[4]), _ _Graph_Reference_Pixel("y", $iY, $aGraphArray[8], $aGraphArray[9], $aGraphArray[5])) EndFunc ;==>_Graph_Plot_Start ; #FUNCTION# ============================================================================= ; Name...........: _Graph_Plot_Line ; Description ...: draws straight line to x,y from previous point / starting point ; Syntax.........: _Graph_Plot_Line(ByRef $aGraphArray,$iX,$iY) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $iX - x value to draw to ; $iY - y value to draw to ; ======================================================================================== Func _Graph_Plot_Line(ByRef $aGraphArray, $iX, $iY) ;----- Draw line from previous point to new point ----- GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_LINE, _ _Graph_Reference_Pixel("x", $iX, $aGraphArray[6], $aGraphArray[7], $aGraphArray[4]), _ _Graph_Reference_Pixel("y", $iY, $aGraphArray[8], $aGraphArray[9], $aGraphArray[5])) EndFunc ;==>_Graph_Plot_Line ; #FUNCTION# ============================================================================= ; Name...........: _Graph_Plot_Point ; Description ...: draws point at coords ; Syntax.........: _Graph_Plot_Point(ByRef $aGraphArray,$iX,$iY) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $iX - x value to draw at ; $iY - y value to draw at ; ======================================================================================== Func _Graph_Plot_Point(ByRef $aGraphArray, $iX, $iY) ;----- Draw point from previous point to new point ----- GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_DOT, _ _Graph_Reference_Pixel("x", $iX, $aGraphArray[6], $aGraphArray[7], $aGraphArray[4]), _ _Graph_Reference_Pixel("y", $iY, $aGraphArray[8], $aGraphArray[9], $aGraphArray[5])) EndFunc ;==>_Graph_Plot_Point ; #FUNCTION# ============================================================================= ; Name...........: _Graph_Plot_Dot ; Description ...: draws single pixel dot at coords ; Syntax.........: _Graph_Plot_Dot(ByRef $aGraphArray,$iX,$iY) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $iX - x value to draw at ; $iY - y value to draw at ; ======================================================================================== Func _Graph_Plot_Dot(ByRef $aGraphArray, $iX, $iY) ;----- Draw point from previous point to new point ----- GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_PIXEL, _ _Graph_Reference_Pixel("x", $iX, $aGraphArray[6], $aGraphArray[7], $aGraphArray[4]), _ _Graph_Reference_Pixel("y", $iY, $aGraphArray[8], $aGraphArray[9], $aGraphArray[5])) EndFunc ;==>_Graph_Plot_Dot ; #FUNCTION# ============================================================================= ; Name...........: _Graph_Set_Color ; Description ...: sets the color for the next drawing ; Syntax.........: _Graph_Set_Color(ByRef $aGraphArray,$hColor,$hBkGrdColor = $GUI_GR_NOBKCOLOR) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $hColor - the color of the next item ; $hBkGrdColor - the background color of the next item ; ======================================================================================== Func _Graph_Set_Color(ByRef $aGraphArray, $hColor, $hBkGrdColor = $GUI_GR_NOBKCOLOR) GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_COLOR, $hColor, $hBkGrdColor) EndFunc ;==>_Graph_Set_Color ; #FUNCTION# ============================================================================= ; Name...........: _Graph_Set_PenSize ; Description ...: sets the pen for the next drawing ; Syntax.........: _Graph_Set_PenSize(ByRef $aGraphArray,$iSize = 1) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $iSize - size of pen line ; ======================================================================================== Func _Graph_Set_PenSize(ByRef $aGraphArray, $iSize = 1) GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_PENSIZE, $iSize) EndFunc ;==>_Graph_Set_PenSize ; #FUNCTION# ============================================================================= ; Name...........: _Graph_Plot_Bar_X ; Description ...: Draws bar chart bar from the x axis ; Syntax.........: _Graph_Plot_Bar_X(ByRef $aGraphArray,$iStart,$iWidth,$nYValue,$hColor = 0x000000,$hBkGrdColor = $GUI_GR_NOBKCOLOR) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $iStart - the x axis value for start of bar (in x axis units) ; $iWidth - width of the bar (in x axis units) ; $nYValue - 'height' of the bar (in y axis units) ; $hColor - Bar border colour ; $hBkGrdColor - Bar fill colour ; ======================================================================================== Func _Graph_Plot_Bar_X(ByRef $aGraphArray, $iStart, $iWidth, $nYValue, $hColor = 0x000000, $hBkGrdColor = $GUI_GR_NOBKCOLOR) ;----- Draw Bar for BarChart Application ----- _Graph_Set_Color($aGraphArray, $hColor, $hBkGrdColor) GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_RECT, _ _Graph_Reference_Pixel("x", $iStart, $aGraphArray[6], $aGraphArray[7], $aGraphArray[4]), _ ;x $aGraphArray[5] + 1, _ Round(_Graph_Reference_Pixel("x", $iStart + $iWidth, $aGraphArray[6], $aGraphArray[7], $aGraphArray[4]) - _ ;width _Graph_Reference_Pixel("x", $iStart, $aGraphArray[6], $aGraphArray[7], $aGraphArray[4]) + 1), _ -$aGraphArray[5] + _Graph_Reference_Pixel("y", $nYValue, $aGraphArray[8], $aGraphArray[9], $aGraphArray[5]) - 1) ;height ;- redraw axis in case coloured - _Graph_Set_Color($aGraphArray, $aGraphArray[14], $GUI_GR_NOBKCOLOR) GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_RECT, 0, 0, $aGraphArray[4] + 1, $aGraphArray[5] + 1) ;- set colour back to default - _Graph_Set_Color($aGraphArray, 0x000000, $GUI_GR_NOBKCOLOR) EndFunc ;==>_Graph_Plot_Bar_X ; #FUNCTION# ============================================================================= ; Name...........: _Graph_Plot_Bar_Y ; Description ...: Draws bar chart bar from the y axis ; Syntax.........: _Graph_Plot_Bar_Y(ByRef $aGraphArray,$iStart,$iWidth,$nYValue,$hColor = 0x000000,$hBkGrdColor = $GUI_GR_NOBKCOLOR) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $iStart - the y axis value for start of bar (in y axis units) ; $iWidth - width of the bar (in y axis units) ; $nXValue - 'length' of the bar (in x axis units) ; $hColor - Bar border colour ; $hBkGrdColor - Bar fill colour ; ======================================================================================== Func _Graph_Plot_Bar_Y(ByRef $aGraphArray, $iStart, $iWidth, $nYValue, $hColor = 0x000000, $hBkGrdColor = $GUI_GR_NOBKCOLOR) ;----- Draw Bar for BarChart Application ----- _Graph_Set_Color($aGraphArray, $hColor, $hBkGrdColor) GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_RECT, _ 0, _ ;x _Graph_Reference_Pixel("y", $iStart + $iWidth, $aGraphArray[8], $aGraphArray[9], $aGraphArray[5]), _ ;y _Graph_Reference_Pixel("x", $nYValue, $aGraphArray[6], $aGraphArray[7], $aGraphArray[4]) + 1, _ ;width _Graph_Reference_Pixel("y", $iStart, $aGraphArray[8], $aGraphArray[9], $aGraphArray[5]) - _ ;height _Graph_Reference_Pixel("y", $iStart + $iWidth, $aGraphArray[8], $aGraphArray[9], $aGraphArray[5]) + 1) ;- redraw axis in case coloured - _Graph_Set_Color($aGraphArray, $aGraphArray[14], $GUI_GR_NOBKCOLOR) GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_RECT, 0, 0, $aGraphArray[4] + 1, $aGraphArray[5] + 1) ;- set colour back to default - _Graph_Set_Color($aGraphArray, 0x000000, $GUI_GR_NOBKCOLOR) EndFunc ;==>_Graph_Plot_Bar_Y ; #FUNCTION# ============================================================================= ; Name...........: _Graph_SetGrid_X ; Description ...: Adds X gridlines. ; Syntax.........: _Graph_SetGrid(ByRef $aGraphArray, $Ticks=1, $hColor=0xf0f0f0) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $Ticks - sets line at every nth unit assigned to axis ; $hColor - [optional] RGB value, defining color of grid. Default is a light gray ; ======================================================================================= Func _Graph_SetGrid_X(ByRef $aGraphArray, $Ticks = 1, $hColor = 0xf0f0f0) _Graph_Set_Color($aGraphArray, $hColor, $GUI_GR_NOBKCOLOR) Select Case $Ticks > 0 For $i = $aGraphArray[6] To $aGraphArray[7] Step $Ticks If $i = Number($aGraphArray[6]) Or $i = Number($aGraphArray[7]) Then ContinueLoop GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_RECT, _ ;rectangle _Graph_Reference_Pixel("x", $i, $aGraphArray[6], $aGraphArray[7], $aGraphArray[4]), _ ;x 1, _ ;y 1, _ ;width $aGraphArray[5] - 1) ;height Next EndSelect _Graph_Set_Color($aGraphArray, 0x000000) EndFunc ;==>_Graph_SetGrid_X ; #FUNCTION# ============================================================================= ; Name...........: _Graph_SetGrid_Y ; Description ...: Adds Y gridlines. ; Syntax.........: _Graph_SetGrid(ByRef $aGraphArray, $Ticks=1, $hColor=0xf0f0f0) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; $Ticks - sets line at every nth unit assigned to axis ; $hColor - [optional] RGB value, defining color of grid. Default is a light gray ; ======================================================================================= Func _Graph_SetGrid_Y(ByRef $aGraphArray, $Ticks = 1, $hColor = 0xf0f0f0) _Graph_Set_Color($aGraphArray, $hColor, $GUI_GR_NOBKCOLOR) Select Case $Ticks > 0 For $i = $aGraphArray[8] To $aGraphArray[9] Step $Ticks If $i = Number($aGraphArray[8]) Or $i = Number($aGraphArray[9]) Then ContinueLoop GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_RECT, _ ;rectangle 1, _ ;x _Graph_Reference_Pixel("y", $i, $aGraphArray[8], $aGraphArray[9], $aGraphArray[5]), _ ;y $aGraphArray[4] - 1, _ ;width 1) ;height Next EndSelect _Graph_Set_Color($aGraphArray, 0x000000) EndFunc ;==>_Graph_SetGrid_Y ; #FUNCTION# ============================================================================= ; Name...........: _Graph_Refresh ; Description ...: refreshes the graphic ; Syntax.........: _Graph_Refresh(ByRef $aGraphArray) ; Parameters ....: $aGraphArray - the array returned from _Graph_Create ; ======================================================================================== Func _Graph_Refresh(ByRef $aGraphArray) GUICtrlSetGraphic($aGraphArray[1], $GUI_GR_REFRESH) EndFunc ;==>_Graph_Refresh ; #FUNCTION# ============================================================================= ; Name...........: _Graph_Reference_Pixel ; Description ...: INTERNAL FUNCTION - performs pixel reference calculations ; Syntax.........: _Graph_Reference_Pixel($iType,$iValue,$iLow,$iHigh,$iTotalPixels) ; Parameters ....: $iType - "x"=x axis pix, "y" = y axis pix, "p"=value from pixels ; $iValue - pixels reference or value ; $iLow - lower limit of axis ; $iHigh - upper limit of axis ; $iTotalPixels - total number of pixels in range (either width or height) ; ========================================================================================= Func _Graph_Reference_Pixel($iType, $iValue, $iLow, $iHigh, $iTotalPixels) ;----- perform pixel reference calculations ----- Switch $iType Case "x" Return (($iTotalPixels / ($iHigh - $iLow)) * (($iHigh - $iLow) * (($iValue - $iLow) / ($iHigh - $iLow)))) Case "y" Return ($iTotalPixels - (($iTotalPixels / ($iHigh - $iLow)) * (($iHigh - $iLow) * (($iValue - $iLow) / ($iHigh - $iLow))))) Case "p" Return ($iValue / ($iTotalPixels / ($iHigh - $iLow))) + $iLow EndSwitch EndFunc ;==>_Graph_Reference_Pixel - Table UDF - create simple data tables - Line Graph UDF GDI+ - quickly create simple line graphs with x and y axes (uses GDI+ with double buffer) - Line Graph UDF - quickly create simple line graphs with x and y axes (uses AI native graphic control) - Barcode Generator Code 128 B C - Create the 1/0 code for barcodes. - WebCam as BarCode Reader - use your webcam to read barcodes - Stereograms!!! - make your own stereograms in AutoIT - Ziggurat Gaussian Distribution RNG - generate random numbers based on normal/gaussian distribution - Box-Muller Gaussian Distribution RNG - generate random numbers based on normal/gaussian distribution - Elastic Radio Buttons - faux-gravity effects in AutoIT (from javascript)- Morse Code Generator - Generate morse code by tapping your spacebar!
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