Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

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

Пользователь


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

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


Доброго времени!
Возник ещё один вопрос. Как в предыдущем скрипте правильно организовать переход на следующие сутки.
Пытаюсь сделать добавив функцию _NewDayWatch(). Применить к label1 получилось, а дальше ступор, не получается применять новую ширину окна GUI, зависящую от новой даты:
Код: Выделить весь код
#include <WinAPIEx.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Timers.au3>

Global $iFontSize = 15, $iFontWeight = 200, $iFontAttribs = 1, $sFontName = 'Tahoma'
Global $sDate_Str = _DateWDayToStr() & ", " & _DateMonthToStr()

_WinAPI_EmptyWorkingSet(@AutoItPID)

TraySetClick(16)

Opt("TrayAutoPause", 0)
Opt("TrayMenuMode", 1 + 2)
Opt("TrayOnEventMode", 1)

$iExit_TrayItem = TrayCreateItem("Выход")
TrayItemSetOnEvent(-1, "_TrayEvent")

$hGUI = GUICreate("Системное время", _GetDateGUIWidth($sDate_Str, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName) + 110, 23, -1, -1, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
$iLabel1 = GUICtrlCreateLabel($sDate_Str, 110, 00, 320, 25, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1, $iFontSize, $iFontWeight, $iFontAttribs, $sFontName)
$iLabel2 = GUICtrlCreateLabel(@HOUR & ":" & @MIN & ":" & @SEC, 05, 0, 105, 25, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1, $iFontSize, 800, $iFontAttribs, $sFontName)

GUISetState(@SW_SHOW, $hGUI)
$hTimer = _Timer_SetTimer($hGUI, 1000, "_SetTimeData_Proc")

While 1
   _NewDayWatch()
    Sleep(100)
WEnd

Func _TrayEvent()
    Switch @TRAY_ID
        Case $iExit_TrayItem
            _Timer_KillTimer($hGUI, $hTimer)
            _Exit()
    EndSwitch
EndFunc

Func _SetTimeData_Proc($hWnd, $Msg, $iIDTimer, $dwTime)
    GUICtrlSetData($iLabel2, @HOUR & ":" & @MIN & ":" & @SEC)
EndFunc

Func _GetDateGUIWidth($sDate, $iSize = 8.5, $iWeight = 400, $iAttribs = 0, $sFontName = "")
    Local $hWnd, $hGUISwitch, $aCtrlSize, $aRetSize[2] = [0, 0]

    $hWnd = GUICreate($sDate, 0, 0, 0, 0, BitOR($WS_POPUP, $WS_MINIMIZE), BitOR($DS_MODALFRAME, $WS_EX_TRANSPARENT))
    $hGUISwitch = GUISwitch($hWnd)
    GUISetFont($iSize, $iWeight, $iAttribs, $sFontName, $hWnd)
    $aCtrlSize = ControlGetPos($hWnd, "", GUICtrlCreateLabel($sDate, 0, 0))
    GUIDelete($hWnd)
    GUISwitch($hGUISwitch)

    If Not IsArray($aCtrlSize) Then Return SetError(1, 0, 0)
    Return $aCtrlSize[2]
EndFunc

Func _DateWDayToStr()
    Local $aDay[7] = ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"]
    Return $aDay[@WDAY-1]
EndFunc

Func _DateMonthToStr()
    Local $aMonth[12] = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"]
    Return @MDAY & " " & $aMonth[@MON-1] & " " & @YEAR & "г."
EndFunc

Func _NewDayWatch()
     $NextDate = _DateMonthToStr()

      While $NextDate = _DateMonthToStr()
         $NextDate = _DateMonthToStr()
         Sleep(100) 
     WEnd 

     GUICtrlSetData($iLabel1, _DateWDayToStr() & ", " & _DateMonthToStr()) 
EndFun

Func _Exit()
    Exit
EndFunc
Пока остановился на перезапуске скрипта, но хотелось бы более правильного решения.
Буду рад помощи. Заранее спасибо.

Отправлено: 19:15, 20-06-2012 | #5