Что нового

Как обновить Combo

pvnn

Осваивающий
Сообщения
305
Репутация
32
Всем доброго времени суток
Сделал "мигалку". Но обновляется вся форма целиком. Как обновить только Combo?
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#include <Date.au3>

Global $Flag=1, $Date=_NowCalc()

$Form1 = GUICreate("Form1", 278, 159, -1, -1)
$Label1 = GUICtrlCreateLabel("Label1", 32, 40, 36, 17)
$Combo1 = GUICtrlCreateCombo("", 80, 36, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "В работе|Списан")
$Button1 = GUICtrlCreateButton("Button1", 96, 112, 75, 25)
GUISetState(@SW_SHOW)


While 1
	Color()
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
		Case $Combo1
			If GUICtrlRead($Combo1)<>'Списан' Then
				GUICtrlSetBkColor($Combo1, 0xFFFFFF)
				_WinAPI_RedrawWindow($Form1)
			EndIf
	EndSwitch
WEnd


Func Color()
	If GUICtrlRead($Combo1)='Списан'  Then
;~ 		ConsoleWrite(GUICtrlRead($Combo1)&@CRLF)
	If _DateDiff('s',$Date,_NowCalc())<1 Then Return
		If $Flag=1 Then
			GUICtrlSetBkColor($Combo1, 0x00FFFF)
			$Flag=2
			$Date=_NowCalc()
			_WinAPI_RedrawWindow($Form1)
			Return
		EndIf
		IF $Flag=2 Then
			GUICtrlSetBkColor($Combo1, 0xFFFF00)
			$Flag=1
			$Date=_NowCalc()
			_WinAPI_RedrawWindow($Form1)
			Return
		EndIf
	EndIf
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
попробуй так
Код:
Global $Flag = 1, $Date = _NowCalc()

$Form1 = GUICreate("Form1", 278, 159, -1, -1)
$Label1 = GUICtrlCreateLabel("Label1", 32, 40, 36, 17)
$Combo1 = GUICtrlCreateCombo("", 80, 36, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "В работе|Списан")
$Button1 = GUICtrlCreateButton("Button1", 96, 112, 75, 25)
GUISetState(@SW_SHOW)

Global $struct = DllStructCreate('long Left;long Top;long Right;long Bottom')
$struct.Top = 36
$struct.Bottom = 98
$struct.left = 80
$struct.Right = 225

While 1
	Color()
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
		Case $Combo1
			If GUICtrlRead($Combo1) <> 'Списан' Then
				GUICtrlSetBkColor($Combo1, 0xFFFFFF)
				_WinAPI_RedrawWindow($Form1, $struct)
			EndIf
	EndSwitch
WEnd


Func Color()
	If GUICtrlRead($Combo1) = 'Списан' Then
;~      ConsoleWrite(GUICtrlRead($Combo1)&@CRLF)
		If _DateDiff('s', $Date, _NowCalc()) < 1 Then Return
		If $Flag = 1 Then
			GUICtrlSetBkColor($Combo1, 0x00FFFF)
			$Flag = 2
			$Date = _NowCalc()
			_WinAPI_RedrawWindow($Form1, $struct)
			Return
		EndIf
		If $Flag = 2 Then
			GUICtrlSetBkColor($Combo1, 0xFFFF00)
			$Flag = 1
			$Date = _NowCalc()
			_WinAPI_RedrawWindow($Form1, $struct)
			Return
		EndIf
	EndIf
EndFunc   ;==>Color
 
Верх