Ich habe eine GUI in der eine weitere GUI (Child) als "Fenster" mit Scrollbar eingebettet ist. Darin ist mein MultiGraph abgebildet, der mir Logfiles am Ende graphisch wiedergeben soll. Da das Programm auf unterschiedlichen Rechnern und Monitoren laufen wird/soll, benötige ich eine flexible GUI in der Anzeige-Größe. Deshalb hat das Child-GUI die Scrollbar, weil der MultiGraph in der horizontalen Auflösung sonst nicht immer vollständig angezeigt wird. Die Skalierung der GUI funktioniert, aber wenn ich die Scrollbar bewege, dann wandert meine Zeichenfläche vom MultiGraph immer mit, der Rest "unten drunter" (Achsbezeichnung und gezeichnete Achsen) bleiben stehen). Was könnte hier der Fehler sein, bzw wie kann ich das beheben?
Spoiler anzeigen
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <mod_MultiGraph.au3>
#include <Date.au3>
#include <file.au3>
#include <GUIScrollbars_Ex.au3>
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$hGUI= GUICreate("Diagramm-Tool", 1024, 768, -1, -1, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_MAXIMIZE,$WS_TABSTOP))
GUISetState (@SW_MAXIMIZE)
Local $size = WinGetClientSize($hGUI)
[/autoit] [autoit][/autoit] [autoit];~ Bedien- & Anzeige-Elemente erzeugen
$OpenLogfile = GUICtrlCreateButton("Logfile öffnen", 8, $size[1]-75, 80, 20)
$PlotLogfile = GUICtrlCreateButton("Logfile plotten", 90, $size[1]-75, 80, 20)
$LabelOpenLogfile = GUICtrlCreateLabel("geöffnetes Logfile:", 8, $size[1]-50, 90, 20, $SS_CENTERIMAGE)
$ViewOpenLogfile= GUICtrlCreateInput("", 100, $size[1]-50, 200, 20, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
$LabelZeilenAnzahl = GUICtrlCreateLabel("Logeinträge:", 8, $size[1]-25, 90, 20, $SS_CENTERIMAGE)
$ZeilenAnzahl = GUICtrlCreateInput("0", 100, $size[1]-25, 50, 20, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
$GUI_Graph = GUICreate("", $size[0]-25, $size[1]-100, 10, 10, $WS_CHILD, $WS_EX_CLIENTEDGE, $hGUI)
$Label_Graph = GUICtrlCreateLabel("", $size[0]-25, $size[1]-100, 10, 10)
;~ Scrollbar erzeugen
_GUIScrollbars_Generate($GUI_Graph, 1575, 700)
;~ Multigraph erzeugen
_MG_Graph_entfernen(1)
_MG_Graph_erstellen (1, $GUI_Graph, 50, 25, 1440, 600)
_MG_Graph_optionen_position (1, $GUI_Graph, 50, 25, 1440, 600)
_MG_Graph_optionen_allgemein (1, 720, -20, 40, 22.5, 90, 0xFFFFFF, 2)
_MG_Graph_optionen_Rahmen (1, True, 0x000000, 1)
_MG_Graph_optionen_Hauptgitterlinien (1, 1, 20, 20, 1,0x000000, 190)
_MG_Graph_optionen_Hilfsgitterlinien (1, 1, 10, 10, 1,0x000000, 220)
_MG_Graph_optionen_Plottmodus (1, 0, 0, 1, True)
[/autoit] [autoit][/autoit] [autoit]_MG_Graph_Achse_links (1, True, -20, 40, 0, "°C", 0x000000, Default, 8, 70, 0.5)
_MG_Graph_Achse_rechts (1, True, 22.5, 90.00, 2, " °", 0x000000, Default, 8, 70, 5)
_MG_Graph_Achse_unten (1, True, 0, 24, 2, "Uhrzeit", 0x000000, Default, 8, 27, 2)
_MG_Kanal_optionen (1, 1, 1, 1, 0x0044FF, 0)
_MG_Kanal_optionen (1, 2, 1, 1, 0xFF6600, 0)
_MG_Kanal_optionen (1, 3, 1, 2, 0xDAA520, 0)
_MG_Kanal_optionen (1, 4, 1, 1, 0x8B0000, 0)
_MG_Kanal_optionen (1, 5, 1, 1, 0x008000, 0)
_MG_Kanal_optionen (1, 6, 1, 1, 0x6A5ACD, 0)
_MG_Kanal_optionen (1, 7, 1, 3, 0x7FFF00, 0)
_MG_Kanal_optionen (1, 8, 1, 3, 0xFF4500, 0)
_MG_Graph_initialisieren(1)
GUISetState()
GUICtrlSetResizing($GUI_Graph, $GUI_DOCKALL)
; Zur urprünglichen GUI wechseln
GUISwitch($hGUI)
GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]Global $plot = 0
Global $aBuffer = 0
While 1
GUISetOnEvent($GUI_EVENT_CLOSE, "_Events")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "_Events")
GUISetOnEvent($GUI_EVENT_RESTORE, "_Events")
GUICtrlSetOnEvent($OpenLogfile, "_OpenLogfile")
GUICtrlSetOnEvent($PlotLogfile, "_plot")
_MG_Graph_updaten (1)
Sleep (10)
WEnd
Func _Events() ; hier sind die Events der GUI:
; Fenster Schliessen, Minimieren, Maximieren,
Select
Case @GUI_CtrlId = $GUI_EVENT_CLOSE
Exit
Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
[/autoit] [autoit][/autoit] [autoit]Case @GUI_CtrlId = $GUI_EVENT_RESTORE
[/autoit] [autoit][/autoit] [autoit]EndSelect
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit];~ Öffnen des Logfiles, ermitteln der Zeilenanzahl und Anzeige des gewählten Logfiles
Func _OpenLogfile()
$Logfile = FileOpenDialog ("Logfile auswählen", @ScriptDir&"\Archiv_Logimat", "(*.csv)", 1 + 4)
If $Logfile = "" Then
MsgBox (0, "Info", "Kein Logfile ausgewählt")
Else
_FileReadToArray ($Logfile, $aBuffer)
EndIf
GUICtrlSetData ($ViewOpenLogfile, $Logfile)
GUICtrlSetData ($ZeilenAnzahl, $aBuffer[0])
EndFunc
;~ Zeilenweises Aufsplitten der Werte und anschließendes Plotten in den MultiGraph
Func _plot()
$SplitWert = StringSplit($aBuffer[2], ";")
_MG_Graph_Clear (1)
for $i = 2 to ($aBuffer[0]) Step 1
$SplitWert = StringSplit($aBuffer[$i], ";")
_MG_Wert_setzen_Y1 (1, 1, StringReplace($Splitwert[3], ",", "."))
_MG_Wert_setzen_Y1 (1, 2, StringReplace($Splitwert[4], ",", "."))
_MG_Wert_setzen_Y1 (1, 3, StringReplace($Splitwert[5], ",", "."))
_MG_Wert_setzen_Y1 (1, 4, StringReplace($Splitwert[6], ",", "."))
_MG_Wert_setzen_Y1 (1, 5, StringReplace($Splitwert[7], ",", "."))
_MG_Wert_setzen_Y1 (1, 6, StringReplace($Splitwert[8], ",", "."))
_MG_Wert_setzen_Y2 (1, 7, StringReplace($Splitwert[9], ",", "."))
_MG_Wert_setzen_Y2 (1, 8, StringReplace($Splitwert[10], ",", "."))
_MG_Graph_plotten (1)
Next
EndFunc
[/autoit]das vollständige Script , die benötigten UDF´s und ein paar Logfiles sind im Anhang.
Schon mal recht herzlichen Dank für die Hilfe im Vorraus.