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

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

Ответить
Настройки темы
[решено] Блокировка кнопок после нажатия в GUI

Аватара для ZeroCrash

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


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


Конфигурация

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


Что нужно сделать чтобы после нажатия кнопки не было возможности нажать на другие кнопкки в течении 3 секунд? Пробовал ставить sleep(3000), но на кнопки всё равно можно нажимать (правда срабатывают они после того как пройдёт эти 3 секунды).

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
$mainwindow = GUICreate("Программа2", 460, 340)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$okbutton = GUICtrlCreateButton("Кнопка", 5, 30, 90)
GUICtrlSetOnEvent($okbutton, "OKButton")
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

GUISwitch($mainwindow)
GUISetState(@SW_SHOW)

While 1
Sleep(1000)
WEnd

Func OKButton()
If Random() < 0.5 Then
Run(@ComSpec & " /c Start 1.bat")
Sleep(3000)
Else
Run(@ComSpec & " /c Start 2.bat")
Sleep(3000)
Endif 
EndFunc
Я не стал вписывать в примере код других кнопок (т. к. они все такие как эта), но кнопок вообще много

-------
Я НЕвкотакте!


Отправлено: 13:39, 01-07-2009

 

Аватара для beve

Старожил


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

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


можно на это время отключить кнопки так:
Код: Выделить весь код
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
$mainwindow = GUICreate("Программа2", 460, 340)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$okbutton = GUICtrlCreateButton("Ok", 5, 30, 90)
GUICtrlSetOnEvent($okbutton, "OKButton")

$1button = GUICtrlCreateButton("1", 5, 60, 90)
GUICtrlSetOnEvent($1button, "_1Button")

$2button = GUICtrlCreateButton("2", 5, 90, 90)
GUICtrlSetOnEvent($2button, "_2Button")

GUISwitch($mainwindow)
GUISetState(@SW_SHOW)

While 1
Sleep(100)
WEnd

Func OKButton()
MsgBox(0,"","нажата кнопка OK",1)
ControlDisable($mainwindow,"",$Okbutton)
ControlDisable($mainwindow,"",$1button)
ControlDisable($mainwindow,"",$2button)

Sleep(3000)

ControlEnable($mainwindow,"",$Okbutton)
ControlEnable($mainwindow,"",$1button)
ControlEnable($mainwindow,"",$2button)
EndFunc

Func _1Button()
MsgBox(0,"","нажата кнопка 1",1)
EndFunc
;
Func _2Button()
MsgBox(0,"","нажата кнопка 2",1)
EndFunc
;
Func CLOSEClicked()
    Exit
EndFunc

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.

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

Отправлено: 16:16, 01-07-2009 | #2



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

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


Аватара для proxy

Старожил


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

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


ZeroCrash, лучше, но не факт, с ипользованием какого-либо таймера, например AdlibEnable:

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

Opt('GUIOnEventMode', 1)

Global $mainwindow, $okbutton

$mainwindow = GUICreate('Программа2', 460, 340)
    GUISetOnEvent($GUI_EVENT_CLOSE, 'CLOSEClicked')

$okbutton = GUICtrlCreateButton('Кнопка', 5, 30, 90)
    GUICtrlSetOnEvent($okbutton, 'OKButton')

GUISetState()

While 1
    Sleep(100)
WEnd

Func CLOSEClicked()
    Exit
EndFunc

Func OKButton()
    If Random() < 0.5 Then
        Run(@ComSpec & ' /c Start 1.bat')
        Sleep(3000)
    Else
        Run(@ComSpec & ' /c Start 2.bat')
        Sleep(3000)
    Endif
    AdlibEnable('_EnableButton', 3000)
    If BitAND(GUICtrlGetState($okbutton), $GUI_ENABLE) Then GUICtrlSetState($okbutton, $GUI_DISABLE)
EndFunc

Func _EnableButton()
    If BitAND(GUICtrlGetState($okbutton), $GUI_DISABLE) Then GUICtrlSetState($okbutton, $GUI_ENABLE)
    AdlibDisable()
EndFunc
Для более сложных случаев можно использовать:
Код: Выделить весь код
#Include <Timers.au3>
_Timer_SetTimer($hWnd[, $iElapse = 250[, $sTimerFunc = ""[, $iTimerID = -1]]])

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

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

Отправлено: 19:07, 01-07-2009 | #3


Аватара для ZeroCrash

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


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

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


beve, разобрал твой пример....многовато кода получается если добавлять эти функции к каждой кнопке. Может просто я неясно выразился или просто по-другому никак, но мне нужно чтобы при нажатии любой кнопки блокировались все кнопки на 3с. Сейчас разберу скрипт proxy и сравню

-------
Я НЕвкотакте!


Отправлено: 22:11, 01-07-2009 | #4


Аватара для proxy

Старожил


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

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


Цитата ZeroCrash:
beve, разобрал твой пример....многовато кода получается если добавлять эти функции к каждой кнопке. Может просто я неясно выразился или просто по-другому никак, но мне нужно чтобы при нажатии любой кнопки блокировались все кнопки на 3с. Сейчас разберу скрипт proxy и сравню »
пооооооооооооооооооо любому, придется прописывать ВСЕ кнопки, которые необходимо заблокировать.
Либо сразу напрямую:
Код: Выделить весь код
ControlDisable($mainwindow,"",$Okbutton)
или
Код: Выделить весь код
GUICtrlSetState($okbutton, $GUI_DISABLE)
Либо состовлять списки указателей на кнопки, кторые необходимо заблокировать. Пример:
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>

Opt('GUIOnEventMode', 1)

Global $mainwindow, $okbutton1, $okbutton2, $sButtonList

$mainwindow = GUICreate('Программа2', 460, 340)
    GUISetOnEvent($GUI_EVENT_CLOSE, 'CLOSEClicked')

$okbutton1 = GUICtrlCreateButton('Кнопка', 5, 30, 90)
    GUICtrlSetOnEvent(-1, 'OKButton')
$okbutton2 = GUICtrlCreateButton('Кнопка', 5, 30+30, 90)
    GUICtrlSetOnEvent(-1, 'OKButton')

$sButtonList = $okbutton1 & '|' & $okbutton2
GUISetState()

While 1
    Sleep(100)
WEnd

Func CLOSEClicked()
    Exit
EndFunc

Func OKButton()
    If Random() < 0.5 Then
        Run(@ComSpec & ' /c Start 1.bat')
        Sleep(3000)
    Else
        Run(@ComSpec & ' /c Start 2.bat')
        Sleep(3000)
    Endif
    AdlibEnable('_EnableButton', 3000)
    _ButtonSetState(0)
EndFunc

Func _EnableButton()
    _ButtonSetState(1)
    AdlibDisable()
EndFunc

Func _ButtonSetState($fState)
    Local $aListButton = StringSplit($sButtonList, '|')
    If @error Then Return
    Local $fUnState, $i
    If $fState Then
        $fState   = $GUI_ENABLE
        $fUnState = $GUI_DISABLE
    Else
        $fState   = $GUI_DISABLE
        $fUnState = $GUI_ENABLE
    EndIf
    For $i=1 To $aListButton[0]
        If BitAND(GUICtrlGetState($aListButton[$i]), $fUnState) Then GUICtrlSetState($aListButton[$i], $fState)
    Next
EndFunc
Да, думаю, не плохо сначала проверять состояние кнопки, Enable или Disable, что бы лишний раз не "моргать" кнопкой:
Код: Выделить весь код
If BitAND(GUICtrlGetState($okbutton), $GUI_ENABLE) Then GUICtrlSetState($okbutton, $GUI_DISABLE)

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

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

Отправлено: 22:17, 01-07-2009 | #5


Аватара для ZeroCrash

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


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

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


Цитата proxy:
пооооооооооооооооооо любому, придется прописывать ВСЕ кнопки, которые необходимо заблокировать. »
поработав и с твоим кодом я это понял
Цитата proxy:
Да, думаю, не плохо сначала проверять состояние кнопки, Enable или Disable, что бы лишний раз не "моргать" кнопкой »
Думаю в этом смысла нет. Тут у меня либо ВСЕ кнопки включены, либо ВСЕ выключены.

Ладно, буду работать. Как всё сделаю, отпишусь.

Цитата proxy:
Либо состовлять списки указателей на кнопки, кторые необходимо заблокировать »
Самый наилучший вариант! Сенкс!

-------
Я НЕвкотакте!


Отправлено: 22:28, 01-07-2009 | #6


Аватара для ZeroCrash

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


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

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


Всё закончил Вариант со составлением списка по-моему самый практичный и простой

-------
Я НЕвкотакте!


Отправлено: 23:00, 01-07-2009 | #7


Аватара для tweakos

Старожил


Автор проектов


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

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


ZeroCrash,
для частого использования одного и того же кода, можно использовать следущее(будет полезно для всех):
Код: Выделить весь код
global $run = какое_то_действие and какое_то_действие and какое_то_действие;прописываем команды через оператор and

execute ($run);в нужном месте исполняем код....будет полезно при частом вызове кода в любом месте программы...

-------
Аддон [XpAnimateStyle] Анимированные вход/перезагр/выкл в WinXp / New Autorun Construct Alpha
/
LogonUI&Logo Changer / Theme patcher программа изменения элементов тем оформления
/
персонализация (смена обоев через фэйд)


Отправлено: 08:24, 13-07-2009 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Автоматизация нажатия кнопок в окне браузера в фоновом режиме(?) zbruy AutoIt 9 04-10-2009 12:22
Окна не реагируют на нажатия кнопок! manager_rab Лечение систем от вредоносных программ 6 29-09-2009 14:49
Не работает GUI после выхода другова GUI sashadeg AutoIt 3 15-05-2009 22:03
Разное - [решено] Залипает мышь после нажатия клавиатурных сочетаний Dirk Diggler Microsoft Windows 2000/XP 9 20-04-2009 10:22
Как отслеживать нажатия кнопок в Windows? Sharkky Программирование и базы данных 5 29-12-2003 13:55




 
Переход