Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Maza Faka

Ветеран


Сообщения: 604
Благодарности: 133

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#include <GUIConstants.au3>
#include <Date.au3>

Dim $hour, $min, $sec

GUICreate("Test", 150, 70, -1, -1, $WS_CLIPSIBLINGS)
$label = GUICtrlCreateLabel("00:00:00", 50, 15, 100, 20)

$begin = TimerInit()
GUISetState()

AdlibEnable("SetTime", 500)

While GUIGetMsg() <> -3
    Sleep(10)
WEnd

Func SetTime()
    $time = _TicksToTime(Int(TimerDiff($begin)), $hour, $min, $sec)
    GUICtrlSetData($label, StringFormat("%02i:%02i:%02i", $hour, $min, $sec))
EndFunc
В коде указанном выше имеется такая проблемка, если нажать и удерживать левую кнопку мыши на заголовке окна, то таймер "замерзает" и не обновляется, пока левая кнопка мыши удерживается. Конечно можно обойти это задействовав UDF _DllCallBack:
Код: Выделить весь код
#include <GUIConstants.au3>
#include <Date.au3>
#include <DllCallBack.au3>

Global $sTimer, $Dll_Timer, $hour, $min, $sec

GUICreate("Test", 150, 70, -1, -1)
$label = GUICtrlCreateLabel("00:00:00", 50, 15, 100, 20)
$begin = TimerInit()

GUISetState()

Timer()

While 1
    Switch GUIGetMsg()
    Case -3
        _DllCallBack_Free($sTimer)
        DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $Dll_Timer)
        ExitLoop
    EndSwitch
WEnd

Func Timer()
    $sTimer = _DllCallBack("SetTime", "hwnd;uint;int;ptr")
    $Dll_Timer = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 500, "ptr", $sTimer)
    $Dll_Timer = $Dll_Timer[0]
EndFunc

Func SetTime($hWnd, $uiMsg, $idEvent, $dwTime)
    $time = _TicksToTime(Int(TimerDiff($begin)), $hour, $min, $sec)
    GUICtrlSetData($label, StringFormat("%02i:%02i:%02i", $hour, $min, $sec))
EndFunc
, но всё-таки хотелось бы узнать и о других вариантах (если они есть) решения этой проблемки.

Отправлено: 13:48, 06-11-2007 | #694