ViSiToR
 
  
  Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Tipulatoid 13:01 12-09-2008  Цитата:|  Можно ли уйти от этого мерцания?  |      Можно использовать метки (переменные), а ещё  лучше проверять инпуты не в цикле, а при их изменениях (сообщения в WM_NOTIFY)...       Код: #include <GuiConstantsEx.au3>   #include <WindowsConstants.au3>   #include <StaticConstants.au3>   #include <EditConstants.au3>      ; Устанавливаем иконки   ;Используются системные   ;FileInstall("Resources\Ok.ico", "Ok.ico")   ;FileInstall("Resources\NotOk.ico", "NotOk.ico")      ;Рисуем главное окно   $Main_GUI = GUICreate("Мастер создания настроек", 500, 360, (@DesktopWidth - 500) / 2, (@DesktopHeight - 300) / 2)   _GUICtrlCreateSeperator(0, 2, 320, 3, 496)   ; Рисуем кнопки   $Back_Button = GUICtrlCreateButton("< Назад", 240, 327, 80)   GUICtrlSetState(-1, $GUI_DISABLE)   $Next_Button = GUICtrlCreateButton("Далее >", 320, 327, 80)   $Exit_Button = GUICtrlCreateButton("Выход", 410, 327, 80)      ;Рисуем первый диалог мастера   $ChildGui_1 = GUICreate("", 493, 300, 1, 1, $WS_POPUP)   DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_1, "hwnd", $Main_GUI) ; помещаем диалог в главное окно   $Label1_1_1 = GUICtrlCreateLabel("Этот мастер создания настроек последовательно проведет Вас через все шаги создания нового Интернет-чемпионата по деловой игре ""Никсдорф-Дельта"".", 30, 50, 450, 34)   $Label1_1_2 = GUICtrlCreateLabel("Вы всегда можете вызвать справку в любом диалоге, нажав F1", 30, 84, 450, 17)      ;Рисуем второй диалог мастера   $ChildGui_2 = GUICreate("", 493, 300, 1, 1, $WS_POPUP)   DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_2, "hwnd", $Main_GUI) ; помещаем диалог в главное окно   $Label2_1_1 = GUICtrlCreateLabel("Шаг 1/10: Общие настройки", 24, 8, 147, 17)   $Group2_2_1 = GUICtrlCreateGroup("Приветствие", 32, 32, 455, 41)   $Checkbox2_2_1 = GUICtrlCreateCheckbox("Выводить приветствие AutoSend&&Get при запуске", 48, 48, 273, 17, $WS_TABSTOP)   GUICtrlCreateGroup("", -99, -99, 1, 1)   $Group2_3_1 = GUICtrlCreateGroup("Название чемпионата", 32, 80, 455, 41)   $Label2_3_1 = GUICtrlCreateLabel("Введите название чемпионата:", 48, 100, 163, 17)   $Input2_3_1 = GUICtrlCreateInput("Грейт-4", 210, 96, 113, 21, $WS_TABSTOP)   $Icon_2_3_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 98, 15, 15)   $Icon_2_3_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 90, 25, 25)   GUICtrlCreateGroup("", -99, -99, 1, 1)   $Group2_4_1 = GUICtrlCreateGroup("E-mail", 32, 128, 455, 68)   $Label2_4_1 = GUICtrlCreateLabel("Введите адрес основного ящика, через который Вы будете общаться с участниками. Внимание! Именно ящик для живого общения, а не для рассылки архивов.", 48, 140, 436, 27)   $Input2_4_1 = GUICtrlCreateInput("delta-greit@yandex.ru", 280, 170, 150, 21, $WS_TABSTOP)   $Icon_2_4_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 173, 15, 15)   $Icon_2_4_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 165, 25, 25)   GUICtrlCreateGroup("", -99, -99, 1, 1)   $Group2_5_1 = GUICtrlCreateGroup("Форум", 32, 200, 455, 53)   $Label2_5_1 = GUICtrlCreateLabel("Введите номер топика Вашего турнира на форуме:", 48, 215, 260, 17)   $Label2_5_2 = GUICtrlCreateLabel("http://deltaon.ucoz.ru/forum/2-", 49, 230, 149, 17)   $Input2_5_1 = GUICtrlCreateInput("20", 200, 227, 25, 21, $WS_TABSTOP)   $Icon_2_5_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 228, 15, 15)   $Icon_2_5_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 220, 25, 25)   GUICtrlCreateGroup("", -99, -99, 1, 1)   $Group2_6_1 = GUICtrlCreateGroup("Периоды", 32, 257, 455, 41)   $Label2_6_1 = GUICtrlCreateLabel("Введите количество периодов (от 1 до 20):", 48, 275, 220, 17)   $InputGui_2_6_1 = GUICtrlCreateInput("12", 265, 273, 34, 17)   $UpDownGui_2_6_1 = GUICtrlCreateUpdown($InputGui_2_6_1)   GUICtrlSetLimit(-1, 20, 1)   $Icon_2_6_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 275, 15, 15)   $Icon_2_6_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 267, 25, 25)   GUICtrlCreateGroup("", -99, -99, 1, 1)      ;Рисуем третий диалог мастера   $ChildGui_3 = GUICreate("", 493, 300, 1, 1, $WS_POPUP)   DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_3, "hwnd", $Main_GUI) ; помещаем диалог в главное окно   $Label3_1_1 = GUICtrlCreateLabel("Шаг 2/10: Настройка исходящих писем", 24, 8, 200, 17)      $Group3_2_1 = GUICtrlCreateGroup("Создание текстов писем", 32, 32, 455, 78)   $Checkbox3_2_1 = GUICtrlCreateCheckbox("Использовать шаблоны", 48, 50, 140, 17)   GUICtrlSetState(-1, $GUI_CHECKED)   $Button3_2_1 = GUICtrlCreateButton("Пример", 320, 48, 60, 20)   $Checkbox3_2_2 = GUICtrlCreateCheckbox("Использовать обычный шаблон", 62, 75, 180, 17)   GUICtrlSetState(-1, $GUI_CHECKED)   $Button3_2_2 = GUICtrlCreateButton("Указать", 320, 73, 60, 20)   ;GUICtrlSetState (-1, $GUI_DISABLE)   $Button3_2_5 = GUICtrlCreateButton("Редактировать", 390, 73, 90, 20)   $Checkbox3_2_3 = GUICtrlCreateCheckbox("Использовать шаблон выходного дня", 62, 100, 210, 17)   GUICtrlSetState(-1, $GUI_CHECKED)   $Button3_2_3 = GUICtrlCreateButton("Указать", 320, 98, 60, 20)   $Button3_2_6 = GUICtrlCreateButton("Редактировать", 390, 98, 90, 20)   $Checkbox3_2_4 = GUICtrlCreateCheckbox("Использовать шаблон последнего периода", 62, 125, 240, 17)   GUICtrlSetState(-1, $GUI_CHECKED)   $Button3_2_4 = GUICtrlCreateButton("Указать", 320, 123, 60, 20)   $Button3_2_7 = GUICtrlCreateButton("Редактировать", 390, 123, 90, 20)   GUICtrlCreateGroup("", -99, -99, 1, 1)      $Group3_3_1 = GUICtrlCreateGroup("Тексты писем и архивы", 32, 217, 455, 78)   $Checkbox3_3_1 = GUICtrlCreateCheckbox("Сохранять отправленные", 48, 233, 145, 17)   GUICtrlSetState(-1, $GUI_CHECKED)   $Button3_3_1 = GUICtrlCreateButton("Выбрать папку", 200, 230, 85, 25, 0)   $Label3_3_1 = GUICtrlCreateLabel("Текущая папка: ", 48, 250, 90, 17)   If Not IsDeclared("save_path") Then       $save_path = @ScriptDir & "\to_send"   EndIf   $Label3_3_2 = GUICtrlCreateLabel($save_path, 48, 265, 435, 25)   GUICtrlSetColor(-1, 0x335EA8)   GUICtrlCreateGroup("", -99, -99, 1, 1)      For $i = $Input2_3_1 To $InputGui_2_6_1       _CheckInputsProc($i)   Next      GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")      ;Выводим окна на экран   GUISetState(@SW_SHOW, $Main_GUI)   GUISetState(@SW_SHOW, $ChildGui_1)   GUISetState(@SW_HIDE, $ChildGui_2)   GUISetState(@SW_HIDE, $ChildGui_3)      While 1       $Msg = GUIGetMsg(1)          Switch $Msg[0]           Case $GUI_EVENT_CLOSE, $Exit_Button               If $Msg[0] = $Exit_Button And Not _WinIsVisible($ChildGui_1) Then                   $Ask = MsgBox(4096+36, "Attention", "Are you sure you want to exit the Wizard now?", 0, $Msg[1])                   If $Ask <> 6 Then ContinueLoop               EndIf                  If $Msg[1] = $Main_GUI Then Exit           Case $Next_Button               GUICtrlSetState($Back_Button, $GUI_ENABLE)                  Local $CurrentHandle = 0               Local $NextHandle = 0                  Select                   Case _WinIsVisible($ChildGui_1)                       $CurrentHandle = $ChildGui_1                       $NextHandle = $ChildGui_2                   Case _WinIsVisible($ChildGui_2)                       $CurrentHandle = $ChildGui_2                       $NextHandle = $ChildGui_3                       GUICtrlSetState($Next_Button, $GUI_DISABLE)               EndSelect                  If $CurrentHandle <> 0 Then                   GUISetState(@SW_HIDE, $CurrentHandle)                   GUISetState(@SW_SHOW, $NextHandle)               EndIf                  WinActivate($Main_GUI)           Case $Back_Button               GUICtrlSetState($Next_Button, $GUI_ENABLE)                  Local $CurrentHandle = 0               Local $BackHandle = 0                  Select                   Case _WinIsVisible($ChildGui_3)                       $CurrentHandle = $ChildGui_3                       $BackHandle = $ChildGui_2                   Case _WinIsVisible($ChildGui_2)                       $CurrentHandle = $ChildGui_2                       $BackHandle = $ChildGui_1                       GUICtrlSetState($Back_Button, $GUI_DISABLE)               EndSelect                  If $CurrentHandle <> 0 Then                   GUISetState(@SW_HIDE, $CurrentHandle)                   GUISetState(@SW_SHOW, $BackHandle)               EndIf                  WinActivate($Main_GUI)       EndSwitch   WEnd      Func _GUICtrlCreateSeperator($Direction, $Left, $Top, $Width = 3, $Lenght = 25)       Switch $Direction           Case 0               GUICtrlCreateLabel("", $Left, $Top, $Lenght, $Width, $SS_SUNKEN)           Case 1               GUICtrlCreateLabel("", $Left, $Top, $Width, $Lenght, $SS_SUNKEN)       EndSwitch   EndFunc   ;==>_GUICtrlCreateSeperator      Func _WinIsVisible($hWnd)       Return BitAND(WinGetState($hWnd), 2)   EndFunc   ;==>_WinIsVisible      Func _CheckInputsProc($nCtrlID)       Switch $nCtrlID           Case $Input2_3_1               If GUICtrlRead($Input2_3_1) = "" Then                   GUICtrlSetState($Icon_2_3_1, $GUI_SHOW)                   GUICtrlSetState($Icon_2_3_2, $GUI_HIDE)               Else                   GUICtrlSetState($Icon_2_3_1, $GUI_HIDE)                   GUICtrlSetState($Icon_2_3_2, $GUI_SHOW)               EndIf           Case $Input2_4_1               If GUICtrlRead($Input2_4_1) = "" Then                   GUICtrlSetState($Icon_2_4_1, $GUI_SHOW)                   GUICtrlSetState($Icon_2_4_2, $GUI_HIDE)               Else                   GUICtrlSetState($Icon_2_4_1, $GUI_HIDE)                   GUICtrlSetState($Icon_2_4_2, $GUI_SHOW)               EndIf           Case $Input2_5_1               If GUICtrlRead($Input2_5_1) = "" Then                   GUICtrlSetState($Icon_2_5_1, $GUI_SHOW)                   GUICtrlSetState($Icon_2_5_2, $GUI_HIDE)               Else                   GUICtrlSetState($Icon_2_5_1, $GUI_HIDE)                   GUICtrlSetState($Icon_2_5_2, $GUI_SHOW)               EndIf           Case $InputGui_2_6_1               If GUICtrlRead($InputGui_2_6_1) <> 12 Then                   GUICtrlSetState($Icon_2_6_1, $GUI_SHOW)                   GUICtrlSetState($Icon_2_6_2, $GUI_HIDE)               Else                   GUICtrlSetState($Icon_2_6_1, $GUI_HIDE)                   GUICtrlSetState($Icon_2_6_2, $GUI_SHOW)               EndIf       EndSwitch   EndFunc   ;==>_CheckInputsProc      Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)       Local $nNotifyCode = BitShift($wParam, 16)       Local $nID = BitAND($wParam, 0xFFFF)       Local $hCtrl = $lParam          Switch $nNotifyCode           Case $EN_CHANGE, $EN_UPDATE               _CheckInputsProc($nID)       EndSwitch          Return $GUI_RUNDEFMSG   EndFunc   ;==>WM_COMMAND  |         Можно также вместо функции GUICtrlSetState($Icon_2_3_1, $GUI_SHOW) использовать самодельную, похожую функцию, но проверять в ней статус элемента (отображается или нет). Подробнее...
 
 ---------- ViSiToR a.k.a CreatoR CreatoR это не ник, CreatoR это стиль жизни! |  
  |