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

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

Аватара для Creat0R

Must AutoIt


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

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


Maza Faka,
Цитата:
разжевать мне эту функцию:
Там всё просто...
вызывается функция _DllCallBack, которая как бы регистрирует для процесса (скрипта) указанную функцию (через параметр $FuncName), и возвращает на неё указатель..
Далее просто по этому указателю вызывается таймер (строка с вызовом Dll) с заданым временем промежутка между повторами вызова (a.k.a AdibEnable ) - Всё, наша функция вызывается каждый заданный промежуток времени, пока не высвободить таймер (см. в функции Quit()).




Пример-Скрипт для предотвращения ввода не цифр в Input-поле:

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

Global Const $WM_COMMAND = 0x0111
Global $GUIOldPos[2]

$GUI = GUICreate("<Only Numbers> in Input Demo GUI", 300, 100)

$Input = GUICtrlCreateInput("", 20, 40, 260, 20)
$Exit = GUICtrlCreateButton("Exit", 20, 70, 60, 20)

GUISetState()
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE, $Exit
            ExitLoop
        Case Else
            CheckToolTip()
    EndSwitch
WEnd

Func CheckToolTip()
    Local $GetCurInfo = GUIGetCursorInfo($GUI)
    Local $GuiGetPos = WinGetPos($GUI)
    If $GetCurInfo[2] = 1 Or $GUIOldPos[0] <> $GuiGetPos[0] Or $GUIOldPos[1] <> $GuiGetPos[1] Then
        ToolTip("")
        $GUIOldPos = $GuiGetPos
    EndIf
EndFunc

Func _Input_Changed()
    ToolTip("")
    Local $ReadInput = GUICtrlRead($Input)
    If StringRegExp($ReadInput, '[^0-9]') Then
        GUICtrlSetData($Input, StringRegExpReplace($ReadInput, '[^0-9]', ''))

        Local $GuiGetPos = WinGetPos($GUI)
        Local $XPos = $GuiGetPos[0] + 280
        Local $YPos = $GuiGetPos[1] + 80

        ToolTip("Here only numbers are allowed", $XPos, $YPos, "Not allowed symbol", 3, 1)
        DllCall("user32.dll", "int", "MessageBeep", "int", 0x0)
    EndIf
EndFunc   ;==>_Input_Changed

Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)
    Local Const $EN_CHANGE = 0x300
    Local Const $EN_SETFOCUS = 0x100

    Switch $nID
        Case $Input
            Switch $nNotifyCode
                Case $EN_CHANGE
                    _Input_Changed()
                Case $EN_SETFOCUS
                    ToolTip("")
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_COMMAND
Многие используют стиль $ES_NUMBER, но он не перестраховывает от вставки текста по Ctrl V или с контексного меню.

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

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

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:13, 09-10-2007 | #575