1 (изменено: qwerlog, 2019-04-04 02:37:58)

Тема: AHK: Добавление в цикл нового параметра

Приветсвую всех! В общем, такая ситуация. Есть код, в нем циклично передвигаются определенные предметы, никак не могу додуматься как в цикл добавить еще один параметр, то есть "Квадратик". Точнее чтобы их можно было добавлять неограниченно и они с такой же последовательностью передвигались за крайним.

Gui, Add, Picture, x2 y-1 w510 h60 , load.png
Gui, Add, Button, x222 y69 w100 h30 gAdd, Добавить
Gui, Add, Picture, x451 y8 w41 h41 vPos1, 
Gui, Add, Picture, x392 y8 w41 h41 vPos2, 
Gui, Add, Picture, x322 y8 w41 h41 vPos3, 
Gui, Add, Picture, x248 y8 w41 h41 vPos4, 
Gui, Add, Picture, x163 y8 w41 h41 vPos5, 
Gui, Add, Picture, x8 y8 w41 h41 vPos6, 
Gui, Show, x189 y179 h113 w516, New

New_Index := 1
New_Index2 := 2
Loop 6
{
	New_Index ++
	New_Index2 ++
	GuiControl, , pos%A_Index%, blue.png
	GuiControl, , pos%New_Index%, orange.png
	GuiControl, , pos%New_Index2%, green.png
	Index := A_Index - 1
	GuiControl, , pos%Index%, 
	sleep 1000
}
Return

Add:


return

GuiClose:
ExitApp

Изображения:
https://i.imgur.com/cvRnQ5Y.png - load.png
https://i.imgur.com/dCxsdYC.png - blue.png
https://i.imgur.com/xAKqChC.png - orange.png
https://i.imgur.com/u1sTgUl.png - green.png

2

Re: AHK: Добавление в цикл нового параметра

Ну, раз уже Вы не приводите код с самим перемещением, то могу только весёлым примером помочь.


#SingleInstance Force 
#NoEnv
SetBatchLines -1
ListLines Off

deg = 0.01745329252  
r := 422
s := 48
sa := r * 2 + s
xob := (sa - 200) / 2 

Gui, -DPIScale 
Gui, Color, FFFFFF
Gui, Margin, 0, 0  
Gui Add, Text, w%sa% h%sa%  
Gui, Font, s22
Gui Add, Button, y+20 x%xob% w200 gAdd vAdd Default, Добавить
Gui, Font, s40
Gui Show
Count := 0

; SetTimer, Add, 1

loop
	loop 180  
	{ 
		i := A_Index
		loop % Count 
		{
			v := (A_Index - 1) // 18
			rn :=  r - s * v
			off := s * v
			MoveCircle(A_Index, rn, deg  * (((i - A_Index * 10) * 2) - 90), off) 
		}
		Sleep 10
	}
Return 

MoveCircle(idx, r, angle, off) {
	GuiControl, Move, Smile%idx%, % "x" Round(r+r*cos(angle)) + off " y" Round(r+r*sin(angle)) + off
} 

Add:  
	If (Count = 18 * 6) 
	{
		GuiControl, Disable, Add
		Return
	}
	++Count 
	Random, Color, 0, 0xFFFF00
	Gui Add, Text, vSmile%Count% x-32000 y-32000 w%s% h%s% c%Color% +0x201, % Chr(0x263a)  
    Return
	
GuiEscape:
GuiClose:
	ExitApp  
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

3 (изменено: qwerlog, 2019-04-04 02:37:29)

Re: AHK: Добавление в цикл нового параметра

serzh82saratov Извините, просто не достают пару изображений, чтобы было понятней. Но перемещения не обязательно должны быть такими как у меня в коде, просто я ничего умнее или проще не придумал.
https://i.imgur.com/cvRnQ5Y.png - load.png
https://i.imgur.com/dCxsdYC.png - blue.png
https://i.imgur.com/xAKqChC.png - orange.png
https://i.imgur.com/u1sTgUl.png - green.png

4

Re: AHK: Добавление в цикл нового параметра

Додумался как добавить 1 параметр, но на неограниченное количество пока не

Gui, Add, Picture, x2 y-1 w510 h60 , load.png
Gui, Add, Button, x222 y69 w100 h30 gAdd, Добавить
Gui, Add, Picture, x451 y8 w41 h41 vPos1, 
Gui, Add, Picture, x392 y8 w41 h41 vPos2, 
Gui, Add, Picture, x322 y8 w41 h41 vPos3, 
Gui, Add, Picture, x248 y8 w41 h41 vPos4, 
Gui, Add, Picture, x163 y8 w41 h41 vPos5, 
Gui, Add, Picture, x8 y8 w41 h41 vPos6, 
Gui, Show, x189 y179 h113 w516, New

New_Index := 1
New_Index2 := 2
Loop 6
{
	sleep 1000
	New_Index ++
	New_Index2 ++
	GuiControl, , pos%A_Index%, blue.png
	GuiControl, , pos%New_Index%, orange.png
	GuiControl, , pos%New_Index2%, green.png
	Index := A_Index - 1
	GuiControl, , pos%Index%, 
	if Add = 1
	{
		Add_Index := A_Index - 1
		GuiControl, , pos%Add_Index%, green.png
		Index --
		GuiControl, , pos%Index%,
	}
}
Return

Add:
Add = 1

return

GuiClose:
ExitApp

5

Re: AHK: Добавление в цикл нового параметра

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


#SingleInstance Force 
#NoEnv
SetBatchLines -1
ListLines Off

s := 40
st := 10
Lenght := 20
Count := 0

xob := (((Lenght * s) + (st * (Lenght + 1))) - 200) / 2

Gui, -DPIScale +AlwaysOnTop  
Gui, Color, FFFFFF
Gui, Margin, %st%, %st%  
Gui, Add, Text, x0 w0 Hidden
loop % Lenght
	Gui, Add, Progress, % "Border x+" st " yp w" s " h" s " cFFE891", 100 
Gui, Font, s22
Gui Add, Button, y+20 x%xob% w200 gAdd vAdd Default, Добавить
Gui Show 

loop 
	loop % Lenght
	{ 
		i := A_Index
		loop % Count 
		{ 
			ic := i - A_Index + 1
			ic := ic < 1 ? Lenght + ic : ic
			x := st + (ic - 1) * (s + st) 
			GuiControl, MoveDraw, Smile%A_Index%, % "x" x " y" st  
		} 
		Sleep 100
	}
Return  

Add:  
	++Count  
	Gui, Add, Text, vSmile%Count% +0x201 Border x-32000 y-32000 w%s% h%s% +BackgroundTrans, %Count% 
	If (Count = Lenght - 1)
		GuiControl, Disable, Add 
    Return
	
GuiEscape:
GuiClose:
	ExitApp  
+ открыть спойлер
#SingleInstance Force 
#NoEnv
SetBatchLines -1
ListLines Off

s := 40
st := 10
Lenght := 20
Count := 0

xob := (((Lenght * s) + (st * (Lenght + 1))) - 200) / 2

Gui, -DPIScale +AlwaysOnTop  
Gui, Color, FFFFFF
Gui, Margin, %st%, %st%  
Gui, Add, Text, x0 w0 Hidden
loop % Lenght
	Gui, Add, Progress, % "Border x+" st " yp w" s " h" s " cFFE891", 100 
Gui, Font, s22
Gui Add, Button, y+20 x%xob% w200 gAdd vAdd Default, Добавить
Gui Show 

loop 
	loop % Lenght
	{ 
		i := A_Index
		loop % Count 
		{ 
			ic := i - A_Index + 1
			ic := ic < 1 ? Lenght + ic : ic
			x := st + (ic - 1) * (s + st) 
			GuiControl, Move, Smile%A_Index%, % "x" x " y" st  
		} 
		Sleep 100
	}
Return  

Add:  
	++Count 
	Gui, Add, Progress, vSmile%Count% x-32000 y-32000 w%s% h%s% c29B400, 100   
	If (Count = Lenght - 1)
		GuiControl, Disable, Add 
    Return
	
GuiEscape:
GuiClose:
	ExitApp  
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

6 (изменено: qwerlog, 2019-04-04 03:09:32)

Re: AHK: Добавление в цикл нового параметра

serzh82saratov Это то, что нужно, но проблема в том, что "progress" не очень подходит в этом плане. Изображения не всегда будут передвигаться по прямой, иногда вверх, вниз. Почему изображения? просто как раз таки для меня в этом коде они будут играть некую роль. Что и куда двиграться? Чтобы по понятнее выразиться, из пункта А пункт Б.

7

Re: AHK: Добавление в цикл нового параметра

Это, к примеру, может быть и так:
https://i.imgur.com/QAQFyLs.png

8 (изменено: serzh82saratov, 2019-04-04 18:18:13)

Re: AHK: Добавление в цикл нового параметра


#SingleInstance Force 
#NoEnv
SetBatchLines -1
ListLines Off
DetectHiddenWindows, On

s := 40
st := 10	
	
rank := [[s + st + st, (s + st) * 2 + st], [-0.5,-1], [-0.5,-1] 
	, [1,0], [1,0], [1,0], [1,0]
	, [-0.5,1], [-0.5,1], [-0.5,1], [-0.5,1]
	, [-0.5,1], [-0.5,1], [-0.5,1], [-0.5,1] 
	, [1,0], [1,0], [1,0], [1,0]
	, [-0.5,-1], [-0.5,-1]]

pos := CreatePos(rank, s, st)
Count := 0 
Pics := []
Items := []

loop % pos.Count() - 1
	Pics.Push(LoadPicture("Shell32.dll", "Icon" 200 + A_Index))

Gui, -DPIScale +AlwaysOnTop +HWNDhGui
Gui, Color, 536FBE
Gui, Margin, %st%, %st%   
For k, v in pos 
	Gui, Add, Progress, % "Hidden0 Border x" v[1] " y" v[2] " w" s " h" s " cFFE891", 100 
Gui, Font, s16
Gui Show, Hide
WinGetPos, , , , H, ahk_id %hGui%
Gui Add, Button, y%H% x40 gAdd vAdd Default, Add
Gui Add, Button, yp x+40 wp gSub vSub Default, Sub
Gui Show, AutoSize

loop
	loop % pos.Count()
	{ 
		i := A_Index
		loop % Count
		{
			ic := i - A_Index + 1
			ic := ic < 1 ? pos.Count() + ic : ic
			GuiControl, Move, % Items[A_Index], % "x" pos[ic][1] " y" pos[ic][2] 
		} 
		Sleep 100
	}
Return  

Sub:
	If (Count < 1)
		Return
	DllCall("DestroyWindow", "Ptr", Items.Pop()), --Count 
	Return
	
Add:
	If (Count = Pics.Count())
		Return 
	Gui, Add, Pic, HWNDhItem x-32000 y-32000 w%s% h%s% +BackgroundTrans, % "HBITMAP:*" Pics[++Count]
	Items[Count] := hItem
    Return

CreatePos(rank, s, st) {
	arr := []
	For k, v in rank
	{
		If (k = 1)
			arr[k] := [v[1], v[2]]
		Else
			arr[k] := [arr[k - 1][1] + (v[1] * (s + st))
			, arr[k - 1][2] + (v[2] * (s + st))] 
	}
	Return arr
}
	
GuiEscape:
GuiClose:
	ExitApp  
 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

9

Re: AHK: Добавление в цикл нового параметра

serzh82saratov Спасибо, сложноватый код для меня, особенно после года дерградации в армии. Но буду изучать

10 (изменено: serzh82saratov, 2019-04-05 17:12:53)

Re: AHK: Добавление в цикл нового параметра

Для отладки построения можете сделать так:


For k, v in pos 
	; Gui, Add, Progress, % "Hidden0 Border x" v[1] " y" v[2] " w" s " h" s " cFFE891", 100 
	Gui, Add, Text, % "Border +0x201 Hidden0 x" v[1] " y" v[2] " w" s " h" s, %k%

Будет видно в каком порядке создаются позиции.
Первый элемент в rank, это абсолютные координаты отправной точки, другие, относительные предыдущей позиции.
Вот ещё пример.

rank := [[st, st]]
step := 0.6
lenght := 12
loop % lenght  
	rank.Push([step,step])
loop % lenght
	rank.Push([0,-step])
loop % lenght
	rank.Push([-step,step])
loop % lenght - 1
	rank.Push([0,-step])
+ открыть спойлер

https://i.imgur.com/C0d2TLI.png

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

11 (изменено: qwerlog, 2019-04-09 21:11:23)

Re: AHK: Добавление в цикл нового параметра

Еще один вопрос возник, нигде не нашел, возможно плохо искал. Дабы не создавать новую тему, спрошу тут. Как проверить число на четное и нечетное. То, есть, допустим:

Если чесло четное, 
{
	То: Действие
}
Во всех остальных случиях:
{
	Действие
}

12

Re: AHK: Добавление в цикл нового параметра

If !(num & 1)  ;	num чётное
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui