Hallo Community,
ich arbeite gerade an einem etwas größeren Projekt.
In dem Projekt mögchte ich mehrere GUIS erzeugen von der jedoch vorerst nur eine angezeigt wird.
Alle GUIs haben das selbe Hintergrundbild und sollen nach einem Klick auf diverse Buttons aktiviert bzw. daktiviert werden.
Das ganze kann man sich sozusagen als Reiter vorstellen wie sie aus diversen Programmen beklannt sind.
Jetzt stoße ich leider an meine Grenzen, da ich nicht weiß wie ich einen schönen Übergang zwischen den GUIs hinbekomme.
Wenn ich die erste mit @SW_HIDE verstecke und die zweite mit @SW_SHOW zeige kommt es zu einem sehr unschönen Flackern.
Auch probiert habe ich :
[autoit]
GuiSetState(@SW_SHOW, $gui_1)
WinSetTrans("gui2",0)
for $i = 1 to 255 Step 1
WinSetTrans("gui2",$i
for $h = 255 to 0 Step -1
WinSetTrans("gui1", $h)
Next
Next
Hierbei wird aber nur die erste GUI sehr langsam heruntergedimmt. Die zweite Gui taucht gar nicht auf.
Hat jemand eine Idee wie ich den Gui-Wechsel eleganter realisieren könnte oder ob ich das ganze evtl. anders angehen sollte?
Danke & Gruß
Edit:
Ich hänge mal noch den ganzen QT und die wichtige ini (umbenennen ins lamps.ini) mit an:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <StaticConstants.au3>
#cs
----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: johannes
Script Function:
Control FS20 Receivers
----------------------------------------------------------------------------
#ce
$lamps_ini = "lamps.ini"
$rooms_ini = "rooms.ini"
$sidewindow = GuiCreate("Steuerung2",800,480,10,10,$WS_POPUP)
GuiSetState(@SW_SHOW,$sidewindow)
;~ WinSetTRans("Steuerung2","",0)
GuiCtrlCreatePic(".\images\background.bmp",0,0,800,480)
GuiCtrlSetState(-1,$GUI_DISABLE)
GuiCtrlCreateLabel("gui2",200,200)
$mainwindow = GuiCreate("Steuerung",800,480,10,10,$WS_POPUP)
GuiSetState(@SW_SHOW,$mainwindow)
GuiCtrlCreatePic(".\images\background.bmp",0,0,800,480)
GuiCtrlSetState(-1,$GUI_DISABLE)
$time = GuiCtrlCreateLabel("",360,13,72,14)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont($time,10,800,0,"Verdana",2)
GUICtrlSetColor($time, 0xFFFFFF)
HotKeySet("^q", "Terminate")
$lamps_room1 = IniReadSectionNames($lamps_ini)
Dim $lamps_info[$lamps_room1[0]+1][7]
$minute = ""
$notify = GuiCtrlCreatePic("",760,39,29,29)
$notify_state = "off"
$tooltip_notify=""
GuiCtrlSetImage(-1,".\images\notify_off.bmp")
;~ $rooms_info = IniRead
set_clock()
for $i = 1 to $lamps_room1[0]
$aktuelle_sektion = IniReadSection($lamps_ini,$lamps_room1[$i])
$lamps_info[0][0] = $lamps_info[0][0] + 1
$lamps_info[$i][0] = GUICtrlCreatePic("",$aktuelle_sektion[1][1],$aktuelle_sektion[2][1],100,45)
GuiCtrlSetImage($lamps_info[$i][0],".\images\button_red.bmp")
$lamps_info[$i][1] = $aktuelle_sektion[3][1]
$lamps_info[$i][2] = "off"
$lamps_info[$i][3] = GuiCtrlCreateLabel($aktuelle_sektion[4][1],$aktuelle_sektion[1][1]+13,$aktuelle_sektion[2][1]+16,75,12,$SS_CENTER)
$lamps_info[$i][4] = $aktuelle_sektion[4][1]
$lamps_info[$i][5] = $aktuelle_sektion[5][1]
$lamps_info[$i][6] = $aktuelle_sektion[6][1]
;~ _arraydisplay($lamps_info)
GUICtrlSetBkColor($lamps_info[$i][3], $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont($lamps_info[$i][3],8,800,0,"Verdana",2)
GUICtrlSetColor($lamps_info[$i][3], 0xFFFFFF)
Next
$special = GuiCtrlCreateButton("btn",700,400)
while 1
$msg = GUIGetMsg()
Switch $msg
case $GUI_EVENT_CLOSE
Exit
case $special
;~ Funktion switch_buttons aufrufen und "Zeile" des anzuschaltenden Buttons übergeben,
;~ den dazugehörigen master ermitteln und übergeben und fixed_mode auf true setzen um
;~ auschalten eines bereits angeschalteten Buttons zu verhindern
;~ for $i = 255 to 0 Step -1
;~ WinSetTrans("Steuerung","",$i)
;~ Next
GuISwitch(
GuiSetState(@SW_SHOW,$sidewindow)
GuiSetState(@SW_HIDE,$mainwindow)
;~ GuiSetState(@SW_SHOW,$sidewindow)
;~ switch_buttons(4, get_master($lamps_info[4][5]), true)
EndSwitch
for $i = 1 to $lamps_info[0][0]
Switch $msg
Case $lamps_info[$i][0]
SoundPlay("click.wav")
;~ Gibt die Zeile des zu der Gruppe gehörenden "masters" zurück
$master = get_master($lamps_info[$i][5])
;~ "Zeile" des gedrückten Buttons und "master" (s.o.) werden übergeben
switch_buttons($i, $master, false)
set_notify()
EndSwitch
Next
set_clock()
WEnd
func Terminate()
Exit 0
EndFunc
func set_notify()
;~ Alle Lampen durchgehen
for $i = 1 to $lamps_info[0][0]
;~ Wenn der Status irgendeiner Lampe auf "on" steht...
If $lamps_info[$i][2] == "on" Then
$tooltip_notify = $tooltip_notify&$lamps_info[$i][1]&" "
Else
$tooltip_notify = ""
EndIf
Next
If $tooltip_notify <> "" Then
If $notify_state == "off" Then
GuiCtrlSetImage($notify,".\images\notify_on.bmp")
$state = "on"
EndIf
Else
If $notify_state == "on" Then
GuiCtrlSetImage($notify,".\images\notify_off.bmp")
$state = "off"
EndIf
EndIf
EndFunc
func set_clock()
Dim $Wochentag[7] = ["So","Mo","Di","Mi","Do","Fr","Sa"]
If $minute <> @MIN Then
GuiCtrlSetData($time,$Wochentag[@WDAY - 1]&", "&@HOUR&":"&@MIN)
$minute = @MIN
EndIf
EndFunc
func get_master($groupid)
;~ Alle Lampen durchgehen
for $i = 1 To $lamps_info[0][0]
;~ Wenn Buttons mit gleicher Group-ID...
If $lamps_info[$i][5] == $groupid Then
;~ und Button "master" ist...
If $lamps_info[$i][6] == "true" Then
;~ Zeile des masters nach $master speichern und zurückgeben
$master = $i
EndIf
EndIf
Next
Return $master
EndFunc
func switch_buttons($id_button, $master, $fixed_mode=false)
;~ Variable für aktiven "nicht-master-button"
$button_current=0
;~ Alle Lampen durchgehen
for $i = 1 to $lamps_info [0][0]
;~ Wenn Button-ID ungleich der des Masters (Wenn kein master)...
If $lamps_info[$i][0] <> $lamps_info[$master][0] Then
;~ und der Button in der gleichen Gruppe wie der master ist...
If $lamps_info[$i][5] == $lamps_info[$master][5] Then
;~ und der Button gerade "aktiv" ist...
If $lamps_info[$i][2] == "on" Then
;~ speichere die Zeile des aktiven Buttons in die Variable $button_current
$button_current = $i
EndIf
EndIf
EndIf
Next
;~ Für alle Lampen
for $i = 1 to $lamps_info[0][0]
;~ Wenn der Button in der Gleichen Gruppe wie der "master" ist...
If $lamps_info[$i][5] == $lamps_info[$master][5] Then
;~ und der gedrückte Button dem gerade im Array durchlaufenen entspricht...
If $lamps_info[$i][0] == $lamps_info[$id_button][0] Then
;~ und der gedrückte Button nicht der "master" ist...
If $lamps_info[$i][0] <> $lamps_info[$master][0] Then
;~ und der Button gerade inaktiv ist...
If $lamps_info[$i][2] == "off" Then
;~ dann setze den Button auf aktiv (bild und array)...
GuiCtrlSetImage($lamps_info[$id_button][0],".\images\button_green.bmp")
$lamps_info[$id_button][2] = "on"
;~ und setze den master auf aktiv (falls inaktiv)...
If $lamps_info[$master][2] = "off" Then
GuiCtrlSetImage($lamps_info[$master][0],".\images\button_green.bmp")
$lamps_info[$master][2] = "on"
EndIf
;~ Wenn bereits ein button aktiv ist (siehe button_current...)
If $button_current <> 0 Then
;~ diesen auf inaktiv setzen
GuiCtrlSetImage($lamps_info[$button_current][0],".\images\button_red.bmp")
$lamps_info[$button_current][2] = "off"
EndIf
Else
;~ Wenn der button nicht inaktiv sondern aktiv sein sollte, setze ihn und den "master" auf inaktiv
If $fixed_mode=False Then
GuiCtrlSetImage($lamps_info[$id_button][0],".\images\button_red.bmp")
$lamps_info[$id_button][2] = "off"
GuiCtrlSetImage($lamps_info[$master][0],".\images\button_red.bmp")
$lamps_info[$master][2] = "off"
EndIf
EndIf
Else
;~ Wenn der gedrückte Button der "master" ist und kein anderer button aktiv ist...
If $button_current = 0 Then
;~ und er gerade deaktiviert ist...
If $lamps_info[$id_button][2] == "off" Then
;~ dann setze ihn auf aktiv (bild und array)
GuiCtrlSetImage($lamps_info[$id_button][0],".\images\button_green.bmp")
$lamps_info[$id_button][2] = "on"
Else
;~ Wenn er gerade aktiv ist...
If $lamps_info[$id_button][2] == "on" Then
;~ setze ihn auf inaktiv
GuiCtrlSetImage($lamps_info[$id_button][0],".\images\button_red.bmp")
$lamps_info[$id_button][2] = "off"
EndIf
EndIf
Else
;~ Wenn ein anderer Button aktiv ist und somit auch der master, setze beide auf inaktiv.
GuiCtrlSetImage($lamps_info[$id_button][0],".\images\button_red.bmp")
$lamps_info[$id_button][2] = "off"
GuiCtrlSetImage($lamps_info[$button_current][0],".\images\button_red.bmp")
$lamps_info[$button_current][2] = "off"
EndIf
EndIf
EndIf
EndIf
Next
EndFunc