Wow das sieht ja schon gut aus
Ja, finde ich auch... ![]()
Aber was meinst Du mit Berechnungen?
Nun, du sagtest, dass für jeden Sensor ein Wert von 0-1023 übergeben wird, welcher mit einer Formel, die abhängig vom Typ des Sensors ist, umgerechnet werden muss, um das Ergebnis dann in einer Progressbar anzuzeigen.
In der Demo habe ich die Formeln für die Umrechnung gekürzt, so dass letztendlich nur noch ein Umrechnungsfaktor benötigt wird. Deine Aufgabe ist es nun, die zweite Demo zu testen und mir dann zu sagen, ob die Werte/Farben alle stimmen. Schau dir die zweite Demo einfach mal an, wenn dann noch Fragen offen sind, dann her damit.
Problematisch ist noch die Positionierung der Controls - vor allem die Skala. Dieser Teil ist eine echte Herausforderung... weil sich die Parameter für die Berechnungen nicht analog zur Größe und den gesetzten Attributen der verwendeten Fonts ändern! ![]()
Dafür brauche ich noch ein wenig Zeit...
Progress_Demo3
;-- TIME_STAMP 2017-05-21 22:50:00 v 0.1
#Region ;************ Includes ************
#include-once
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <ColorConstantS.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <Array.au3>
;~ #include <Color.au3>;~~~
;~ #include <WinAPI.au3>;~~~
#EndRegion ;************ Includes ************
Opt('MustDeclareVars', 1)
; Progressbar #1 Progressbar #2
; $g_aProgressbars[0][0] = $id Progressbar $g_aProgressbars[1][0] = $id Progressbar
; $g_aProgressbars[0][1] = $id Left Label CURRENT $g_aProgressbars[1][1] = $id Left Label TEMP
; $g_aProgressbars[0][2] = $id Center Label PROGRESS $g_aProgressbars[1][2] = $id Center Label PROGRESS
; $g_aProgressbars[0][3] = $id Right Label LOAD $g_aProgressbars[1][3] = $id Right Label FLOW
Global $g_hGuiProgressbars, $g_aShowHideProgressbars[2][2], $g_aProgressbars[2][4], $g_iStromSensor1, $g_iStromSensor2, $g_iStromSensor3, $g_iTempSensor, $g_iFlowSensor
Global Enum $enGreen, $enYellow, $enRed, $enBlue, $enProgress, $enProgressBk, $enLabel, $enScala, $enGUI, $enStrom = 0, $enFlow = 1
; green , yellow , red , blue , Progress, ProgressBk, Labels , Scala , GUI_Bk
Global $g_aColors = [0x00FF00, 0xFFFF00, 0xFF0000, 0x0000FF, 0x00FF00, 0x2888A8, 0xDFDFDF, 0xCDADFF, 0x2F2428]
Global $g_iProgressWinTransparency = 254, $g_iProgressBarTransparency = 148
Global $g_hGui = GUICreate('MainGUI', 840, 580, -1, 200)
GUISetBkColor($g_aColors[$enGUI], $g_hGui)
;~ GUISetBkColor(0xCDADFF, $g_hGui)
Global $g_aClientSize = WinGetClientSize($g_hGui)
Global $g_aSliders[3][4], $xs = 40, $ys = 110, $ws = $g_aClientSize[0] - 80, $hs = 132
_CreateSpecialSlider(0, 'CURRENT', $enBlue, 'CTRL', $xs, $ys + 0, $ws, $hs)
_CreateSpecialSlider(1, 'TEMP', $enGreen, 'ALT', $xs, $ys + 140, $ws, $hs)
_CreateSpecialSlider(2, 'FLOW', $enYellow, 'SHIFT', $xs, $ys + 280, $ws, $hs)
Global $idBtnSkala = GUICtrlCreateButton('Mit Skala', 2, $g_aClientSize[1] - 52, $g_aClientSize[0] - 4, 24)
Global $idBtnShowProgressbars = GUICtrlCreateButton('Hide Progressbars', 2, $g_aClientSize[1] - 26, $g_aClientSize[0] - 4, 24)
GUISetState(@SW_SHOW)
Global $g_aDummys[12]
$g_aDummys[0] = GUICtrlCreateDummy()
For $i = 1 To UBound($g_aDummys) -1 Step 1
$g_aDummys[$i] = GUICtrlCreateDummy()
Next
Global Enum $g_idCTRLLEFT = $g_aDummys[0], $g_idCTRLRIGHT, $g_idCTRLRUP, $g_idCTRLRDOWN, $g_idALTLEFT, $g_idALTRIGHT, $g_idALTUP, $g_idALTDOWN, $g_idSHIFTLEFT, $g_idSHIFTRIGHT, $g_idSHIFTUP, $g_idSHIFTDOWN
; ^ = CTRL, ! = ALT, + = SHIFT
Global $g_aAccelKeys[12][2] = [ _
["^{LEFT}", $g_idCTRLLEFT], ["^{RIGHT}", $g_idCTRLRIGHT], ["^{UP}", $g_idCTRLRUP], ["^{DOWN}", $g_idCTRLRDOWN], _ ; CURRENT
["!{LEFT}", $g_idALTLEFT], ["!{RIGHT}", $g_idALTRIGHT], ["!{UP}", $g_idALTUP], ["!{DOWN}", $g_idALTDOWN], _ ; TEMP
["+{LEFT}", $g_idSHIFTLEFT], ["+{RIGHT}", $g_idSHIFTRIGHT], ["+{UP}", $g_idSHIFTUP], ["+{DOWN}", $g_idSHIFTDOWN]] ; FLOW
Local $iAccelerators = GUISetAccelerators($g_aAccelKeys)
_CreateProgressbars($g_hGui, 800, 96, 20, 15, True)
$g_aShowHideProgressbars[0][0] = $g_hGuiProgressbars
$g_aShowHideProgressbars[0][1] = $g_aProgressbars
WinSetState($g_hGuiProgressbars, '', @SW_HIDE)
_CreateProgressbars($g_hGui, 800, 60, 20, 15, False)
$g_aShowHideProgressbars[1][0] = $g_hGuiProgressbars
$g_aShowHideProgressbars[1][1] = $g_aProgressbars
GUISwitch($g_hGui)
WinActivate($g_hGui)
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $g_idCTRLLEFT
_SetSensor(0, -1)
Case $g_idCTRLRIGHT
_SetSensor(0, +1)
Case $g_idCTRLRUP
_SetSensor(0, +10)
Case $g_idCTRLRDOWN
_SetSensor(0, -10)
Case $g_idALTLEFT
_SetSensor(1, -1)
Case $g_idALTRIGHT
_SetSensor(1, +1)
Case $g_idALTUP
_SetSensor(1, +10)
Case $g_idALTDOWN
_SetSensor(1, -10)
Case $g_idSHIFTLEFT
_SetSensor(2, -1)
Case $g_idSHIFTRIGHT
_SetSensor(2, +1)
Case $g_idSHIFTUP
_SetSensor(2, +10)
Case $g_idSHIFTDOWN
_SetSensor(2, -10)
Case $g_aDummys[0] To $g_aDummys[UBound($g_aDummys) -1]
Case $idBtnShowProgressbars
If BitAND(WinGetState($g_hGuiProgressbars), 2) = 2 Then ; Visible?
WinSetState($g_hGuiProgressbars, '', @SW_HIDE)
GUICtrlSetData($idBtnShowProgressbars, 'Show Progressbars')
Else
WinSetState($g_hGuiProgressbars, '', @SW_SHOW)
GUICtrlSetData($idBtnShowProgressbars, 'Hide Progressbars')
EndIf
Case $idBtnSkala
Switch GUICtrlRead($idBtnSkala)
Case 'Mit Skala'
GUICtrlSetData($idBtnSkala, 'Ohne Skala')
WinSetState($g_hGuiProgressbars, '', @SW_HIDE)
$g_hGuiProgressbars = $g_aShowHideProgressbars[0][0]
$g_aProgressbars = $g_aShowHideProgressbars[0][1]
WinSetState($g_hGuiProgressbars, '', @SW_SHOW)
_SetProgress($g_iStromSensor1, $g_iStromSensor2, $g_iStromSensor3, $g_iTempSensor, $g_iFlowSensor)
;~ GUISwitch($g_hGui)
WinActivate($g_hGui)
Case 'Ohne Skala'
GUICtrlSetData($idBtnSkala, 'Mit Skala')
WinSetState($g_hGuiProgressbars, '', @SW_HIDE)
$g_hGuiProgressbars = $g_aShowHideProgressbars[1][0]
$g_aProgressbars = $g_aShowHideProgressbars[1][1]
WinSetState($g_hGuiProgressbars, '', @SW_SHOW)
_SetProgress($g_iStromSensor1, $g_iStromSensor2, $g_iStromSensor3, $g_iTempSensor, $g_iFlowSensor)
;~ GUISwitch($g_hGui)
WinActivate($g_hGui)
EndSwitch
EndSwitch
WEnd
Func _SetSensor($idSensor, $iValue)
Local $iSetSensor, $iAdd = 0, $iPercent, $iMittel = $iValue * 3, $aSensor = [$g_iStromSensor1, $g_iStromSensor2, $g_iStromSensor3, $g_iTempSensor, $g_iFlowSensor]
Switch $idSensor
Case 0 ; Strom
For $i = 0 To 2 Step 1
If $iAdd = $iMittel Then ExitLoop
Switch $iValue
Case -1, -10
While $aSensor[$i] -1 > -1
If $iAdd = $iMittel Then ExitLoop
$aSensor[$i] -= 1
$iAdd -= 1
WEnd
Case +1, +10
While $aSensor[$i] +1 < 1024
If $iAdd = $iMittel Then ExitLoop
$aSensor[$i] += 1
$iAdd += 1
WEnd
EndSwitch
Next
$iAdd = Int(($aSensor[0] + $aSensor[1] + $aSensor[2]) / 613.8)
$iPercent = Int(($aSensor[0] + $aSensor[1] + $aSensor[2]) / 3 / 10.23)
$iSetSensor = Int(($aSensor[0] + $aSensor[1] + $aSensor[2]) / 3)
GUICtrlSetData($g_aSliders[0][0], $iSetSensor) ; Group
GUICtrlSetData($g_aSliders[0][1], $iSetSensor) ; Slider
Return _SetProgress($aSensor[0], $aSensor[1], $aSensor[2], $aSensor[3], $aSensor[4])
Case 1 ; Temp
Switch $iValue
Case -1, -10
While $aSensor[3] -1 > -1
If $iAdd = $iValue Then ExitLoop
$aSensor[3] -= 1
$iAdd -= 1
WEnd
Case +1, +10
While $aSensor[3] +1 < 1024
If $iAdd = $iValue Then ExitLoop
$aSensor[3] += 1
$iAdd += 1
WEnd
EndSwitch
GUICtrlSetData($g_aSliders[1][0], $aSensor[3]) ; Slider
GUICtrlSetData($g_aSliders[1][1], $aSensor[3]) ; Title
Return _SetProgress($aSensor[0], $aSensor[1], $aSensor[2], $aSensor[3], $aSensor[4])
Case 2 ; Flow
Switch $iValue
Case -1, -10
While $aSensor[4] -1 > -1
If $iAdd = $iValue Then ExitLoop
$aSensor[4] -= 1
$iAdd -= 1
WEnd
Case +1, +10
While $aSensor[4] +1 < 1024
If $iAdd = $iValue Then ExitLoop
$aSensor[4] += 1
$iAdd += 1
WEnd
EndSwitch
GUICtrlSetData($g_aSliders[2][0], $aSensor[4]) ; Slider
GUICtrlSetData($g_aSliders[2][1], $aSensor[4]) ; Title
Return _SetProgress($aSensor[0], $aSensor[1], $aSensor[2], $aSensor[3], $aSensor[4])
Case Else
Return SetError(1)
EndSwitch
EndFunc
; $g_aProgressbars[0][1] = $id Left Label CURRENT
; $g_aProgressbars[0][2] = $id Center Label PROGRESS CURRENT
; $g_aProgressbars[0][3] = $id Right Label LOAD
; $g_aProgressbars[1][1] = $id Left Label TEMP
; $g_aProgressbars[1][2] = $id Center Label PROGRESS FLOW
; $g_aProgressbars[1][3] = $id Right Label FLOW
Func _SetProgress($iStromSensor1, $iStromSensor2, $iStromSensor3, $iTempSensor, $iFlowSensor)
If $iStromSensor1 > 1023 Or $iStromSensor1 < 0 Then Return False
If $iStromSensor2 > 1023 Or $iStromSensor2 < 0 Then Return False
If $iStromSensor3 > 1023 Or $iStromSensor3 < 0 Then Return False
If $iTempSensor > 1023 Or $iTempSensor < 0 Then Return False
If $iFlowSensor > 1023 Or $iFlowSensor < 0 Then Return False
$g_iStromSensor1 = $iStromSensor1
$g_iStromSensor2 = $iStromSensor2
$g_iStromSensor3 = $iStromSensor3
$g_iTempSensor = $iTempSensor
$g_iFlowSensor = $iFlowSensor
Local Static $aProgressColor[2]
Local $iPercent, $iProgressColor, $aLabel[3]
For $iProgress = 0 To 1 Step 1
Switch $iProgress
Case $enStrom
$iPercent = Int(($iStromSensor1 + $iStromSensor2 + $iStromSensor3) / 3 / 10.23)
GUICtrlSetData($g_aProgressbars[$iProgress][0], $iPercent)
Switch $iPercent
Case 0 To 75
$iProgressColor = $g_aColors[$enGreen]
Case 76 To 90
$iProgressColor = $g_aColors[$enYellow]
Case Else
$iProgressColor = $g_aColors[$enRed]
EndSwitch
$aLabel[0] = StringFormat('CURRENT %.2fA', ($iStromSensor1 + $iStromSensor2 + $iStromSensor3) / 613.8) ; Ampere
$aLabel[1] = StringRight(' ' & $iPercent & '%', 4) ; Progress
$aLabel[2] = 'LOAD' ; LOAD
Case $enFlow
$iPercent = Int($iFlowSensor / 10.23)
GUICtrlSetData($g_aProgressbars[$iProgress][0], $iPercent)
Switch $iPercent
Case 0 To 30
$iProgressColor = $g_aColors[$enRed]
Case 31 To 50
$iProgressColor = $g_aColors[$enYellow]
Case Else
$iProgressColor = $g_aColors[$enGreen]
EndSwitch
$aLabel[0] = StringFormat('TEMP %2.2f°C', $iTempSensor / 20.46) ; TEMP
$aLabel[1] = StringRight(' ' & $iPercent & '%', 4) ; Progress
$aLabel[2] = 'FLOW ' & StringRight(' ' & StringFormat('%.2f l/min', $iFlowSensor / 0.568333333333333), 13) ; FLOW
EndSwitch
GUICtrlSetData($g_aProgressbars[$iProgress][1], $aLabel[0])
GUICtrlSetData($g_aProgressbars[$iProgress][2], $aLabel[1])
GUICtrlSetData($g_aProgressbars[$iProgress][3], $aLabel[2])
If $aProgressColor[$iProgress] <> $iProgressColor Then
$aProgressColor[$iProgress] = $iProgressColor
GUICtrlSetColor($g_aProgressbars[$iProgress][0], $iProgressColor)
EndIf
Next
Return True
EndFunc ;==>_SetProgress
; n = 0-2 0 = Strom, 1 = Temp, 2 = Flow
; $g_aSliders[n][0] = Group
; $g_aSliders[n][1] = Slider
; $g_aSliders[n][2] = Title
; $g_aSliders[n][3] = Hint
Func _CreateSpecialSlider($iID, $sTitle, $iColor, $sModifier, $x, $y, $w, $h)
Local Static $iXOR = 0x6F6F6F, $iXOR2 = 0xF6F6F6
$g_aSliders[$iID][0] = GUICtrlCreateGroup('0', $x, $y, $w, $h, $BS_CENTER, $WS_EX_TRANSPARENT)
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0)
GUICtrlSetFont(-1, 14, 900, 0, 'Comic Sans MS')
GUICtrlSetColor(-1, $g_aColors[$iColor])
GUICtrlSetBkColor(-1, BitXOR($g_aColors[$iColor], $iXOR))
$g_aSliders[$iID][1] = GUICtrlCreateSlider($x + 10, $y + 28, $w - 20, 32)
GUICtrlSetLimit(-1, 1023, 0) ; change min/max value
GUICtrlSetColor(-1, $g_aColors[$iColor])
GUICtrlSetBkColor(-1, BitXOR($g_aColors[$iColor], $iXOR))
$g_aSliders[$iID][2] = GUICtrlCreateLabel($sTitle, $x + 10, $y + 61, $w - 20, 32, $SS_CENTER)
GUICtrlSetFont(-1, 18, 900, 0, 'Comic Sans MS')
GUICtrlSetColor(-1, $g_aColors[$iColor])
GUICtrlSetBkColor(-1, BitXOR($g_aColors[$iColor], $iXOR))
$g_aSliders[$iID][3] = GUICtrlCreateLabel(StringFormat(' %5s+LEFT = -1 %5s+RIGHT = +1 %5s+UP = +10 %5s+DOWN = -10', $sModifier, $sModifier, $sModifier, $sModifier), $x + 10, $y + 94, $w - 20, 24, $SS_CENTER)
GUICtrlSetFont(-1, 12, 900, 0, 'Comic Sans MS')
GUICtrlSetColor(-1, $g_aColors[$iColor])
GUICtrlSetBkColor(-1, BitXOR($g_aColors[$iColor], $iXOR))
EndFunc ;==>_CreateSpecialSlider
Func _CreateProgressbars($hWnd, $iWidth, $iHeight, $iLeft, $iTop, $bScale = True)
$g_hGuiProgressbars = GUICreate('Progressbars', $iWidth, $iHeight, $iLeft, $iTop, $WS_POPUP, BitOR($WS_EX_TRANSPARENT, $WS_EX_LAYERED, $WS_EX_MDICHILD), $hWnd)
GUISetBkColor($g_aColors[$enGUI], $g_hGuiProgressbars)
;~ GUISetBkColor(0x4F4428, $g_hGuiProgressbars)
GUISetState(@SW_SHOW)
WinSetTrans($g_hGuiProgressbars, '', $g_iProgressWinTransparency)
Local $y = 5, $h1, $aLabels = [['CURRENT 0,00A', '0%', 'LOAD'], ['TEMP 23,01°C', '0%', 'FLOW ' & StringRight(' ' & StringFormat('%.2f l/min', 0), 13)]]
Switch $iWidth
Case 0 To 250
Return SetError(1)
Case 251 To 350
Local $iFontSize = 5, $iFontSize1 = 7, $iFontSize2 = 6
$h1 = 10
Case 351 To 450
Local $iFontSize = 6, $iFontSize1 = 7, $iFontSize2 = 6
$h1 = 14
Case 451 To 550
Local $iFontSize = 7, $iFontSize1 = 8, $iFontSize2 = 7
$h1 = 16
Case 551 To 650
Local $iFontSize = 8, $iFontSize1 = 8, $iFontSize2 = 7
$h1 = 18
Case 651 To 750
Local $iFontSize = 9, $iFontSize1 = 9, $iFontSize2 = 8
$h1 = 20
Case Else
Local $iFontSize = 10, $iFontSize1 = 9, $iFontSize2 = 8
$h1 = 22
EndSwitch
For $l = 0 To 1 Step 1
$g_aProgressbars[$l][0] = GUICtrlCreateProgress(20, $y, $iWidth - 40, $h1, $PBS_SMOOTH)
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0)
WinSetTrans(GUICtrlGetHandle($g_aProgressbars[$l][0]), '', $g_iProgressBarTransparency)
GUICtrlSetColor(-1, $g_aColors[$enProgress])
GUICtrlSetBkColor(-1, $g_aColors[$enProgressBk])
Local $aPos = ControlGetPos($g_hGuiProgressbars, '', $g_aProgressbars[$l][0]), $w = $aPos[2] / 3
$g_aProgressbars[$l][1] = GUICtrlCreateLabel($aLabels[$l][0], $aPos[0] + 5, $aPos[1] + 2, $w, $aPos[3] - 4)
GUICtrlSetFont(-1, $iFontSize, 900, 0, 'Courier New')
GUICtrlSetColor(-1, $g_aColors[$enLabel])
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$g_aProgressbars[$l][2] = GUICtrlCreateLabel($aLabels[$l][1], $aPos[0] + ($aPos[2] / 3), $aPos[1] + 2, $w, $aPos[3] - 4, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER))
GUICtrlSetFont(-1, $iFontSize, 900, 0, 'Courier New')
GUICtrlSetColor(-1, $g_aColors[$enLabel])
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$g_aProgressbars[$l][3] = GUICtrlCreateLabel($aLabels[$l][2], $aPos[0] - 5 + $aPos[2] - $w * 1.5, $aPos[1] + 2, $w * 1.5, $aPos[3] - 4, BitOR($GUI_SS_DEFAULT_LABEL, $SS_RIGHT))
GUICtrlSetFont(-1, $iFontSize, 900, 0, 'Courier New')
GUICtrlSetColor(-1, $g_aColors[$enLabel])
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
; Dieser Teil ist eine echte Herausforderung... weil sich die Parameter für die Berechnungen nicht analog zur Größe der Fonts ändert! /-(
; ============================================================================================================================================================================================
If $bScale = True Then
Local $x = $aPos[0] - ($iFontSize1 - 1) * 2, $x1 = $x, $y = $aPos[1], $w = $iFontSize1 + 2, $h = $iFontSize1 + 2, $n = Round($aPos[2] / 10), $m = 1, $o = 0
For $i = 100 To 0 Step -10
GUICtrlSetFont(GUICtrlCreateLabel(' ' & Chr(241) & ' ', $x + $o, $y + $aPos[3], $w * 2.4, $h, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER)), $iFontSize1, 100, 0, 'Wingdings')
GUICtrlSetColor(-1, $g_aColors[$enScala])
GUICtrlSetFont(GUICtrlCreateLabel(StringFormat(' %3i%%', 100 - $i), $x + $o, $y + $aPos[3] + $iFontSize1, $w * 2.8, $h, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER)), $iFontSize2)
GUICtrlSetColor(-1, $g_aColors[$enScala])
If $i = 10 Then $o = -1
If $i = 60 Then $m = -1
$x += Round($n + $m)
Next
EndIf
; ============================================================================================================================================================================================
$y = ($bScale = True) ? $iFontSize1 * 5.5 : $iFontSize1 * 3.5
Next
EndFunc ;==>_CreateProgressbars
Alles anzeigen