Ich wollte jetzt zu meiner Copy-Funktion auch eine Graph-Anzeige einbauen.
Soweit auch unproblematisch. Ich hatte vor Jahren, um mir den Umgang mit GDI zu vereinfachen, ja mal eine UDF dafür erstellt. Ist sicher für diese Anwendung overdressed, aber läuft.
Mein Problem liegt hier:
Beim Kopieren ist die Kopiergeschwindigkeit ja im Bereich von 0 bis ... MB/s.
Die zu zeichnenden Punkte sind immer als Prozentwerte anzugeben, max. Zeichenbereich = 100%. Nur auf welchen Wert soll ich die 100% referieren? Kopieren auf der Festplatte ist meist um die 80 MB/s, wenn ich da 150MB/s = 100% setze ist das übersichtlich. Auch wenn der Speed auf 10 MB/s absackt. Kopieren auf externe Datenträger kann aber deutlich langsamer sein, im KB-Bereich. Das würde dann gar nicht mehr angezeigt werden.
Ich würde jetzt den Speed auswerten und beim Erreichen von Schwellwerten eine neue Grenze für die 100% setzen.
Oder habt ihr andere Ideen?
Hier mal eine lauffähige Simulation. Die erforderliche "LivingGraph.au3" ist angehängt.
BTW: Random() ist schon sehr seltsam. Spätestens nach 3 Minuten sind die simulierten Werte nur noch am Maximum und bleiben dort hängen.
EDIT: Ich hab schon zu lang nicht mehr damit gearbeitet. Es sieht so aus, als ob 0 oben ist?! Was hab ich denn da vergurkt? GDI+ ist nicht wirklich meine Kernkompoetenz.
Prozentwerte war Quatsch, Pixelposition wie üblich, nach unten größer werdend. - OK, das ist dann nur ein Umrechnungsproblem.
EDIT 2: Also die _RandomTransferSpeed() ist so nicht sehr sinnvoll, muss ich nochmal überdenken. - Ist aber nicht das Kernproblem.
EDIT 3: Die Funktion _RandomTransferSpeed() ist jetzt angepasst, aber läuft nach einiger Zeit gegen 0. Seltsam.
#include <ProgressConstants.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include 'LivingGraph.au3'
Global $hGui, $lbPercent, $lbSpeed, $lbFile, $lbRestFiles, $lbRestSize, $lbRestTime, $hStatus, $idProgress
Global $idGraph
_CreateCopyGui()
GUISetState(@SW_SHOW, $hGui)
Do
_GraphCtrl_Draw($idGraph, _RandomTransferSpeed(95))
Until GUIGetMsg() = -3
Func _RandomTransferSpeed($_iMax)
Local Static $100Percent = 85 ; Höhe Graph
Local $1MBperSec = $_iMax / $100Percent
Local Static $iMBPerSec = 50
$iMBPerSec += (Random(-1,1,1) * Random(1,3,1) * ($iMBPerSec / 100))
If $iMBPerSec >= $_iMax Then $iMBPerSec -= (3*($iMBPerSec / 100))
If $iMBPerSec < 1 Then $iMBPerSec = 1
Local $iShowPx = $100Percent - ($iMBPerSec / $1MBperSec)
GUICtrlSetData($lbSpeed, Round($iMBPerSec) & ' MB')
Return $iShowPx
EndFunc
Func _CreateCopyGui()
$hGui = GUICreate('Copy with Progress', 400, 260)
GUISetBkColor(0xF0F8FF)
GUISetFont(10, 400, Default, 'Courier New')
; Prozent
GUICtrlCreateLabel('Fortschritt:', 10, 10, 115, 17)
$lbPercent = GUICtrlCreateLabel('0', 320, 10, 60, 17, BitOR($GUI_SS_DEFAULT_LABEL, $SS_RIGHT))
GUICtrlSetColor(-1, 0x000080)
GUICtrlCreateLabel('%', 380, 10, 10, 17, BitOR($GUI_SS_DEFAULT_LABEL, $SS_RIGHT))
GUICtrlSetColor(-1, 0x000080)
; Speed
GUICtrlCreateLabel('Geschwindigkeit:', 10, 32, 125, 17)
$lbSpeed = GUICtrlCreateLabel('0 MB', 300, 32, 70, 17, BitOR($GUI_SS_DEFAULT_LABEL, $SS_RIGHT))
GUICtrlSetColor(-1, 0x000080)
GUICtrlCreateLabel('/s', 370, 32, 20, 17, BitOR($GUI_SS_DEFAULT_LABEL, $SS_RIGHT))
GUICtrlSetColor(-1, 0x000080)
; akt. Datei
GUICtrlCreateLabel('Name:', 10, 54, 40, 17)
$lbFile = GUICtrlCreateLabel('', 55, 54, 335, 17, BitOR($GUI_SS_DEFAULT_LABEL, $SS_RIGHT))
GUICtrlSetColor(-1, 0x000080)
; verbleibende Elemente
GUICtrlCreateLabel('Verbleibende Elemente:', 10, 76, 180, 17)
$lbRestFiles = GUICtrlCreateLabel('', 330, 76, 60, 17, BitOR($GUI_SS_DEFAULT_LABEL, $SS_RIGHT))
GUICtrlSetColor(-1, 0x000080)
; verbleibende Größe
GUICtrlCreateLabel('Verbleibende Größe:', 10, 98, 180, 17)
$lbRestSize = GUICtrlCreateLabel('', 280, 98, 110, 17, BitOR($GUI_SS_DEFAULT_LABEL, $SS_RIGHT))
GUICtrlSetColor(-1, 0x000080)
; verbleibende Zeit
GUICtrlCreateLabel('Restdauer ungefähr:', 10, 120, 180, 17)
$lbRestTime = GUICtrlCreateLabel('', 250, 120, 140, 17, BitOR($GUI_SS_DEFAULT_LABEL, $SS_RIGHT))
GUICtrlSetColor(-1, 0x000080)
; Graph hellgrün: 0xF0F0F0, dunkelgrün: 0x05B024
$idGraph = _GraphCtrl_Create($hGui, 10, 142, 380, 85, 20)
_GraphCtrl_SetHelpline($idGraph, -1, '30,60')
; Statusbar
$hStatus = _GUICtrlStatusBar_Create($hGui)
_GUICtrlStatusBar_SetMinHeight($hStatus, 20)
$idProgress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
GUICtrlSetColor(-1, 0x008B00) ; grün
_GUICtrlStatusBar_EmbedControl($hStatus, 0, GUICtrlGetHandle($idProgress))
EndFunc
Alles anzeigen