1 (изменено: Chikko, 2018-04-09 17:13:48)

Тема: AHK: Как сделать чтобы действие производилось при 2 и более условиях?

Допустим, если я нажму клавишу R, G, или B то откроется MsgBox с надписью "RGB".

А если я нажму H, S, или V, то откроется MsgBox с надписью "HSV".

Мне надо всё это как-то поместить в If.

2

Re: AHK: Как сделать чтобы действие производилось при 2 и более условиях?

Чтобы понимать, как происходит логическое описание, для этого нужно почитать соответствующую литературу, или обратиться к справке. Но то, как Вы описываете задачу, может быть решено следующим:


r::
g::
b::
	MsgBox RGB
return

h::
s::
v::
	MsgBox HSV
return

3 (изменено: Chikko, 2018-04-09 19:38:29)

Re: AHK: Как сделать чтобы действие производилось при 2 и более условиях?

KusochekDobra
Вы наверное неправильно меня поняли. Я написал, что нужно это всё как-то поместить в If. Приведу другой пример.
Если на компьютере 11, 12, или 13 часОВ времени, то переменная var будет равна "часов"
А если же на компьютере 21 или 1 чаС времени, то переменная var будет равна "час"
Но я хочу как-то уместить все эти условия в одной строчке команды If

If(A_Hour=11,12,13)
{
var= часов
}
Else If(A_Hour=21,1)
{
var= час
}

Можно ли вообще поместить несколько условий в одних скобочках команды If

4

Re: AHK: Как сделать чтобы действие производилось при 2 и более условиях?

Справку читали?

5

Re: AHK: Как сделать чтобы действие производилось при 2 и более условиях?

if -> else:


hr := 1

if (hr == 1 || hr == 21)
	str := "час"
else if (hr > 1 && hr < 5) || (hr > 21 && hr < 24)
	str := "часа"
else
	str := "часов"
MsgBox,,Время,% hr " " str

Тернарный эквивалент:


hr := 1
str := (hr == 1 || hr == 21) ? "час" : (hr > 1 && hr < 5) || (hr > 21 && hr < 24) ? "часа" : "часов"
MsgBox,,Время,% hr " " str

Проверить 24 часовой ряд:


hr := 0
Loop 24 {
	str := (hr == 1 || hr == 21) ? "час" : (hr > 1 && hr < 5) || (hr > 21 && hr < 24) ? "часа" : "часов"
	MsgBox,,Время,% hr++ " " str
}

6 (изменено: rowe, 2018-04-09 20:24:00)

Re: AHK: Как сделать чтобы действие производилось при 2 и более условиях?


#Persistent
SetTimer, sch, 1000
Return

sch:
if(A_Hour >= 19 && A_Hour < 20)
{
    Run C:\Users\Home\Desktop
    ExitApp
}
Return

7

Re: AHK: Как сделать чтобы действие производилось при 2 и более условиях?

KusochekDobra
Спасибо большое.
p.s. справку я прочитал

8

Re: AHK: Как сделать чтобы действие производилось при 2 и более условиях?

KusochekDobra пишет:

hr := 1

if (hr == 1 || hr == 21)
	str := "час"
else if (hr > 1 && hr < 5) || (hr > 21 && hr < 24)
	str := "часа"
else
	str := "часов"
MsgBox,,Время,% hr " " str

Есть ли такой же вариант склонений для больших чисел — тысяч до 10 хотя бы?

9 (изменено: KusochekDobra, 2018-04-15 20:03:06)

Re: AHK: Как сделать чтобы действие производилось при 2 и более условиях?


limit := 10000
hr := 0, dPart := 0
data := [["Число","Значение"]]
Loop,% limit {
	hundred := hr // 100 * 100
	unit := hr - hundred
	(unit  > 24 && dPart := unit // 10 * 10)
	str := (unit == 1 + dPart || unit == 21 + dPart) ? "час" : (unit > 1 + dPart && unit < 5 + dPart) || (unit > 21 + dPart && unit < 25 + dPart) ? "часа" : "часов"
	data.Push( [hr, str] ), hr++
}

Gui,1: Add,ListView,w200 h400 NoSort vLVval +LV0x00010000 +HwndLV_H,Число|Значение
Gui,1: Show,,Список
CreateTable(data, "LVval")
return
CreateTable(tableArr,ctrlNameValue) {
	Gui, 1: ListView, %ctrlNameValue%
	GuiControl, -ReDraw, %ctrlNameValue%
	LV_Delete()
	Loop, % LV_GetCount("Column")
		LV_DeleteCol(1)
	Loop,% tableArr[1].Length()
		LV_InsertCol(A_Index,"", tableArr[1][A_Index])
	Loop,% tableArr.Length()-1 {
		rNmbr := LV_Add("", "")
		Loop,% cCount := tableArr[rNmbr+1].Length()
			LV_Modify(rNmbr, "Col" . A_Index,tableArr[rNmbr+1][A_Index])
	} Loop, % tableArr[1].Length()
		LV_ModifyCol(A_Index, "AutoHdr")
	GuiControl, +ReDraw, %ctrlNameValue%
}
GuiClose:
	ExitApp

UPD 1: Поправка на сотни.
UPD 2: Поспешишь, людей насмешишь.
Прошу прощения, так будет правильно:


limit := 10000
hr := 0, dPart := 0
data := [["Число","Значение"]]
Loop,% limit {
	unit := hr - (hr // 100 * 100)
	unit > 20 ? dPart := unit // 10 * 10 : dPart := 0
	str := (unit == 1 + dPart) ? "час" : (unit > 1 + dPart && unit < 5 + dPart) ? "часа" : "часов"
	data.Push( [hr, str] ), hr++
}

Gui,1: Add,ListView,w200 h400 NoSort vLVval +LV0x00010000 +HwndLV_H,Число|Значение
Gui,1: Show,,Список
CreateTable(data, "LVval")
return
CreateTable(tableArr,ctrlNameValue) {
	Gui, 1: ListView, %ctrlNameValue%
	GuiControl, -ReDraw, %ctrlNameValue%
	LV_Delete()
	Loop, % LV_GetCount("Column")
		LV_DeleteCol(1)
	Loop,% tableArr[1].Length()
		LV_InsertCol(A_Index,"", tableArr[1][A_Index])
	Loop,% tableArr.Length()-1 {
		rNmbr := LV_Add("", "")
		Loop,% cCount := tableArr[rNmbr+1].Length()
			LV_Modify(rNmbr, "Col" . A_Index,tableArr[rNmbr+1][A_Index])
	} Loop, % tableArr[1].Length()
		LV_ModifyCol(A_Index, "AutoHdr")
	GuiControl, +ReDraw, %ctrlNameValue%
}
GuiClose:
	ExitApp
+ DD