Что нового

[Окна, Диалоги] Перемещение окна в зависимости от наличия ранее запущеного

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Реализовал своеобразную очередь. Запускаются процессы, для каждого процесса свое окно, они выстраиваются по порядку сверху вниз. В процессе работы процессы завершаются и закрывают свои окна соответственно оставляя пробелы в своеобразной очереди.
Тут я реализовал перемещение окна вверх на расстояние своей высоты если предыдущее окно отсутствует.
Код:
Global $aList = WinList("[REGEXPTITLE:Мой GUI \d+]")
Global $numwin = UBound($aList)
Global $numpred

Opt('WinTitleMatchMode', 3)

If UBound($aList) == '1' Then
	$left = 0
	$top = 0
Else
	$numpred = $numwin - 1
	$aArr = WinGetPos("Мой GUI " & $numpred)
	$left = 0
	$top = $aArr[1] + $aArr[3]
EndIf

$hGUI = GUICreate("Мой GUI " & $numwin, 400, 100, $left, $top, 0x00CF0000, 0x00000008)
GUISetState(@SW_SHOW)

While 1
	Sleep(50)
	_1()
	Switch GUIGetMsg()
		Case -3
			ExitLoop
	EndSwitch
WEnd

GUIDelete()

Func _1()
	$aWinPos = WinGetPos("Мой GUI " & $numwin)
	$aWinPosPred = WinGetPos("Мой GUI " & $numpred)
	If WinExists("Мой GUI " & $numpred) = 0 And $numpred <> 0 And $aWinPos[1] - $aWinPos[3] > 0 Then
		$snew_top = $aWinPos[1] - $aWinPos[3]
		WinMove($hGUI, '', 0, $snew_top)
		$numpred -= 1
	Else
		If IsArray($aWinPosPred) Then
			If ($aWinPosPred[1] + $aWinPosPred[3]) < $aWinPos[1] And $aWinPos[1] - $aWinPos[3] > 0 Then
				$snew_top = $aWinPos[1] - $aWinPos[3]
				WinMove($hGUI, '', 0, $snew_top)
			EndIf
		EndIf
	EndIf
EndFunc   ;==>_1
 
Верх