Post by vmech » 31 Mar 2019, 03:43
Вобщем ситуация:
1. Есть поля типа Edit, допустим их три (3), в них нужно вводить только integer или float. И есть Button с включённым Default.
2. Если первое поле пустое, то при нажатии Enter фокус просто остается в этом поле.
3. Если в первом поле буквы, то при нажатии Enter выводится MsgBox, и фокус остаётся в этом поле.
4. Если в первом поле integer или float, то при нажатии Enter фокус передаётся на второе поле.
Реализация (частичная, ибо «не шмогла» я в каскадные проверки):
#NoEnv
Gui, Add, Edit, vPL Limit10 HwndhPL
Gui, Add, Edit, vPF Limit10 HwndhPF
Gui, Add, Edit, vPD Limit10 HwndhPD
Gui, Add, Button, Default gCalc, Расчёт!
uiCtrlHwnd := [hPL, hPF, hPD]
Return
Calc:
cRunVars := [0, 0, 0]
For idx, tCtrlHwnd in uiCtrlHwnd
{
GuiControlGet, tRunVar,, %tCtrlHwnd%
tRunVar := StrReplace(tRunVar,",",".")
If tRunVar Is not Number
If tRunVar Is Alpha
{
MsgBox, 0x2030, Ошибка!, "Недопустимое значение"
IfMsgBox, OK
ControlFocus,, ahk_id %tCtrlHwnd%
Return
}
Else
{
ControlFocus,, ahk_id %tCtrlHwnd%
Return
}
cRunVars[idx] := Abs(tRunVar)
}
... код непосредственно математики ...
Return
Всё работает почти как нужно, но на пустое поле выпадает MsgBox, как и на буквы в поле...
Я уже всю голову сломал переставляя местами проверки на Number и Alpha, и комбинируя их с отрицанием Not. Помогите сделать правильно, а то реально уже мозх кипит
Вобщем ситуация:
1. Есть поля типа Edit, допустим их три (3), в них нужно вводить только integer или float. И есть Button с включённым Default.
2. Если первое поле пустое, то при нажатии Enter фокус просто остается в этом поле.
3. Если в первом поле буквы, то при нажатии Enter выводится MsgBox, и фокус остаётся в этом поле.
4. Если в первом поле integer или float, то при нажатии Enter фокус передаётся на второе поле.
Реализация (частичная, ибо «не шмогла» я в каскадные проверки):
#NoEnv
Gui, Add, Edit, vPL Limit10 HwndhPL
Gui, Add, Edit, vPF Limit10 HwndhPF
Gui, Add, Edit, vPD Limit10 HwndhPD
Gui, Add, Button, Default gCalc, Расчёт!
uiCtrlHwnd := [hPL, hPF, hPD]
Return
Calc:
cRunVars := [0, 0, 0]
For idx, tCtrlHwnd in uiCtrlHwnd
{
GuiControlGet, tRunVar,, %tCtrlHwnd%
tRunVar := StrReplace(tRunVar,",",".")
If tRunVar Is not Number
If tRunVar Is Alpha
{
MsgBox, 0x2030, Ошибка!, "Недопустимое значение"
IfMsgBox, OK
ControlFocus,, ahk_id %tCtrlHwnd%
Return
}
Else
{
ControlFocus,, ahk_id %tCtrlHwnd%
Return
}
cRunVars[idx] := Abs(tRunVar)
}
... код непосредственно математики ...
Return
Всё работает почти как нужно, но на пустое поле выпадает MsgBox, как и на буквы в поле...
Я уже всю голову сломал переставляя местами проверки на Number и Alpha, и комбинируя их с отрицанием Not. Помогите сделать правильно, а то реально уже мозх кипит :)