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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Таймер на Input

Ответить
Настройки темы
[решено] Таймер на Input

Аватара для FlatX007

Ветеран


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

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


Вобщем нужно если из Input удалили все символы, то через 5 секунд там появилась цифра 0
Если вписали данные то 0 удаляется .

Я начал писать но почемуто неработает ... пол ночи просидел всю голову сломал.
Один из вариантов:

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

Global $sNewDate

$Form1 = GUICreate("Form1", 265, 42, -1, -1)
$Input1 = GUICtrlCreateInput("Input1", 8, 8, 241, 21)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nMsg = 1
            If GUICtrlRead($Input1) = "" Then $sNewDate = Round (StringRight(_DateAdd('s',5, _NowCalc()), 2) )
            If Round(@SEC) = $sNewDate Then GUICtrlSetData($Input1, "0")
    EndSwitch
WEnd

Отправлено: 05:40, 31-05-2009

 

Аватара для SyDr

Старожил


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

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


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

Global $sNewDate = "No"

$Form1 = GUICreate("Form1", 265, 42, -1, -1)
$Input1 = GUICtrlCreateInput("Input1", 8, 8, 241, 21)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
    If GUICtrlRead($Input1) = "" And $sNewDate = "No" Then $sNewDate = Mod(@SEC + 5, 60)
    If @SEC = $sNewDate Then
        GUICtrlSetData($Input1, "0")
        $sNewDate = "No"
    EndIf
WEnd

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:02, 31-05-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


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

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


Лучше использовать WM_COMMAND в этом случае:

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
;

Global $iTimer = -1

$Form1 = GUICreate("Form1", 265, 42, -1, -1)
$Input1 = GUICtrlCreateInput("Input1", 8, 8, 241, 21)

GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch

    If $iTimer <> -1 And TimerDiff($iTimer) >= 5000 Then
        GUICtrlSetData($Input1, "0")
        $iTimer = -1
    EndIf
WEnd

Func WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)
    Local $hCtrl = $lParam

    Switch $nID
        Case $Input1
            Switch $nNotifyCode
                Case $EN_CHANGE, $EN_UPDATE ; Edit (Input) control has been changed
                    Local $sInput_Data = GUICtrlRead($Input1)

                    If $sInput_Data = "" Then
                        $iTimer = TimerInit()
                    Else
                        $iTimer = -1
                    EndIf
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc
Sylver Dragon,
Неплохо придумано с секундами, я не думал что так таймер можно построить

Код: Выделить весь код
$hTimer = _TimerSec_Init(3)
_TimerSec_Wait($hTimer)

Func _TimerSec_Init($iSec)
    Return Mod(@SEC + $iSec, 60)
EndFunc

Func _TimerSec_Wait($hTimer)
    Do
        Sleep(10)
    Until @SEC = $hTimer
EndFunc


P.S
Но в твоём примере, если при ожидании 5-ти секунд юзер вводит данные в поле, то они заменяются на 0 в любом случае.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:59, 31-05-2009 | #3


Аватара для FlatX007

Ветеран


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

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


Цитата Creat0R:
P.S
Но в твоём примере, если при ожидании 5-ти секунд юзер вводит данные в поле, то они заменяются на 0 в любом случае. »
Это я перетрудился наверно ... запутался в 2х строчках, я на форум неправильно вставил - эти вроде так было

Код: Выделить весь код
       Case $nMsg = 1
            If GUICtrlRead($Input1) = "" Then
                $sNewDate = Round (StringRight(_DateAdd('s',5, _NowCalc()), 2) )
                If Round(@SEC) = $sNewDate Then GUICtrlSetData($Input1, "0")
            EndIf

Отправлено: 12:29, 31-05-2009 | #4


Аватара для FlatX007

Ветеран


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

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


Вот никак непойму зачем переменную $sNewDate каждый раз обNoулять ??
Если не обнулять то неработает ...

Отправлено: 13:38, 31-05-2009 | #5


Аватара для SyDr

Старожил


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

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


Цитата FlatX007:
Цитата Creat0R:
P.S
Но в твоём примере, если при ожидании 5-ти секунд юзер вводит данные в поле, то они заменяются на 0 в любом случае. »
Это я перетрудился наверно ... запутался в 2х строчках, я на форум неправильно вставил - эти вроде так было»
Это мне
Просто я сначала пишу. Потом думаю. Я не проверяю, ввёл ли кто-то что-нибудь в поле после того, как там появилось ""

Цитата FlatX007:
Вот никак непойму зачем переменную $sNewDate каждый раз обNoулять ??
Если не обнулять то неработает ...
Дело в том, что там только секунды. Если не сбрасывать значение - строчка будет каждую минуту сбрасываться на 0. Там может быть любое значение кроме целых чисел от 0 до 59 включительно.
Правда если в эту секунду скрипт на паузе (MsgBox, InputBox и т.д.) - нифига не сбросится. Потому что не проверится.
Кста, если не секрет, для чего это используется?

Вот чуток исправленный вариант.
Код: Выделить весь код
    If $sNewDate = -1 And GUICtrlRead($Input1) = "" Then $sNewDate = Mod(@SEC + 5, 60)
    If @SEC = $sNewDate Then
        If GUICtrlRead($Input1) Then GUICtrlSetData($Input1, "0")
        $sNewDate = -1
    EndIf
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:35, 31-05-2009 | #6


Аватара для FlatX007

Ветеран


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

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


Это для этого ...
Это вообще для понта сделано ... ибо при сохранеии в INI если в строке ничего нет то записывается 0

Последний раз редактировалось FlatX007, 27-06-2009 в 23:52.


Отправлено: 16:59, 31-05-2009 | #7


Аватара для Creat0R

Must AutoIt


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

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


Цитата FlatX007:
при сохранеии в INI если в строке ничего нет то записывается 0 »
Обычно это делается на этапе сохранения в ini, проверка полей только растрачивает ресурсы системы, я бы лично отказался от этого.

P.S
Да и вообще подобные поля лучше обрамлять элементом UpDown, и задать лимит (мин.) в 0.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:06, 31-05-2009 | #8


Аватара для FlatX007

Ветеран


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

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


Проверка полей работает только при открытом меню настройки ... во время работы программы этого непроисходит.

Цитата Creat0R:
P.S
Да и вообще подобные поля лучше обрамлять элементом UpDown, и задать лимит (мин.) в 0. »
О точно как я раньше недогадался !

Отправлено: 17:16, 31-05-2009 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Таймер на Input

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] таймер firstarey Скриптовые языки администрирования Windows 11 04-03-2022 16:54
Загрузка - [решено] Как отключить таймер перед проверкой дисков в WinXP? GSA_GSA Microsoft Windows 2000/XP 1 24-06-2009 11:41
[решено] Genius G-Pen F610 + DirectX Input + Игры Pitbull Непонятные проблемы с Железом 4 07-04-2009 21:09
EOF input[1] равняется началу input[2] FADE Вебмастеру 6 30-06-2004 18:44
таймер Guest Вебмастеру 1 05-02-2004 23:58




 
Переход