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 или с контексного меню.