Label Aktualisierungs Probleme

06/16/2012 01:13 Lord_Peter#1
Hallöchen,

Bin gerade dabei Tool zu schreiben womit ich verschiedene Spiele/ Programme mittels Dropdown auswählen und starten kann.
Des weiteren soll es auch ein Paar Infos zum Spiel o.ä. nach der Auswahl angezeigt werden. Dies wollte ich mittels Label machen.
Nun habe ich aber das Problem das die Schrift im Label Flackert und mir fällt einfach keine Lösung ein (wenn ich die Aktualisierung aus der While Schleife nehme gibt es keine mehr).

Vielleicht fällt euch was schönes ein... und wenn ihr sonst noch produktive Verbesserungsvorschläge habt, bin ich darüber natürlich auch sehr erfreut :)

Ach ja, manchmal habe ich das Problem das ich mehrfach auf den Auswahl Button klicken muss um ihn zu bestätigen und das gleiche auch beim "x" (schließen).

Code:
#cs ----------------------------------------------------------------------------

	AutoIt Version: 3.3.8.1
	Author:         Peter

	Template AutoIt script.

#ce ----------------------------------------------------------------------------

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
;==================================================================================================================================================
Global $Array[3][3]
$Array[0][0] = "Spiel1"
$Array[0][1] = "Beschreibung Spiel 1"
$Array[0][2] = "1"
$Array[1][0] = "Spiel2"
$Array[1][1] = "Beschreibung Spiel 2"
$Array[1][2] = "2"
$Array[2][0] = "Spiel3"
$Array[2][1] = "Beschreibung Spiel 3"
$Array[2][2] = "3"
;==================================================================================================================================================
$Form2 = GUICreate("Form2", 482, 530, 719, 176)
$Group1 = GUICtrlCreateGroup("Spiel Auswahl", 8, 8, 465, 513, BitOR($GUI_SS_DEFAULT_GROUP, $BS_CENTER))
$Group2 = GUICtrlCreateGroup("Info", 16, 80, 449, 401)
$Label1 = GUICtrlCreateLabel("Spiel Informationen", 24, 104, 438, 375) ;Info Text
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlSetCursor(-1, 5)
$Combo1 = GUICtrlCreateCombo($Array[0][0], 32, 40, 417, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $CBS_SORT)) ;Dropdown Menü
For $i = 0 To UBound($Array, 2) - 1
	GUICtrlSetData($Combo1, $Array[$i][0], True)
Next
$Button1 = GUICtrlCreateButton("Auswahl", 16, 488, 451, 25) ;Auswahl Knopf
;==================================================================================================================================================
GUICtrlSetFont($Button1, 10, 400, 0, "Rockwell")
GUICtrlSetFont($Label1, 8, 400, 0, "Rockwell")
;GUICtrlSetFont(-1, 10, 400, 0, "Rockwell")
GUICtrlSetFont($Combo1, 10, 400, 0, "Rockwell")
GUICtrlSetFont($Group2, 10, 400, 0, "Rockwell")
GUICtrlSetFont($Group1, 12, 800, 0, "Rockwell Condensed")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState()
;==================================================================================================================================================
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
;==================================================================================================================================================
	If GUICtrlRead($Combo1) == "Spiel1" Then
		$u = 0
	ElseIf GUICtrlRead($Combo1) == "Spiel2" Then
		$u = 1
	ElseIf GUICtrlRead($Combo1) == "Spiel3" Then
		$u = 2
	EndIf
	GUICtrlSetData($Label1, $Array[$u][1])
;==================================================================================================================================================
	$msg = GUIGetMsg()
	If $msg = $Button1 Then
		MsgBox(0, "Starte Dummy", GUICtrlRead($Combo1))
	EndIf
WEnd
06/16/2012 10:07 lolkop#2
3 lösungsmöglichkeiten würden mir jetzt pauschal einfallen...

das flackern entsteht ja durch das zu schnelle aktualisieren. logisch wäre es eine kleine verzögerung einzubauen, welche aber zu einer kleinen ungenauigkeit führen würde. also verwerfen wir diese idee mal gleich wieder. alternativ könnte man mit einer tempvariable arbeiten, welche immer den jeweils letzten inhalt des controls speichert. nur wenn sich der inhalt ändert, aktualisieren wir das ganze.

da wir den inhalt aber auch einfach direkt auslesen können, ist die wohl einfachste möglichkeit die folgende:
Code:
Func UpdateTextControl($control, $newText)
	If GUICtrlRead($control) <> $newText Then GUICtrlSetData($control, $newText)
EndFunc
Edit:
umgesetzt könnte das ganze so aussehen:
06/16/2012 15:44 Lord_Peter#3
Super, Danke dir :D hat super geklappt!