Что нового

[Автоматизация] [Цикл] Создание цикла для множественного назначения функции

Dr.Freezer

Новичок
Сообщения
7
Репутация
0
Еще раз всем добрый вечер. Имеется необходимость с помощью цикла создать энное количество кнопок, назначить каждой кнопке уникальную переменную ($array1,$array2...) и каждой кнопке прописать функцию запуска приложения, путь до которого оно берет из .ini файла. Проблему с назначением уникальной функции в цикле мне помогли решить, но встал на этапе непосредственно написания кода самой функции запуска. Прошу подсказать - как реализовать в цикле ниже циклическое назначение функции запуска приложения, путь до которого оно берет из .ini и которая привязаня к конкретной кнопке.

Код:
$multiplegui = GUICreate("Application Launcher", 200, 100)
 GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
 $multipleapps = IniRead($appsfile, $sText, "multipleapps", "")
 $d = 10
global $array[4]
	For $o = 1 to $multipleapps
	  $multipleappsname = IniRead($appsfile, $sText, "name" & $o, "")
	  $array[$o] = GUICtrlCreateButton($multipleappsname, 10, $d, 180 , 25)
	  $d = $d + 28
	  $multipleappsexe = IniRead($appsfile, $sText, "app" & $o & "exe", "")	


           Next
	GUISetState(@SW_SHOW)


Код .ini файла:
Код:
[Office2010]
multiple=1
multipleapps=3
name1=Microsoft Word 2010
app1exe=word.exe
name2=Microsoft Excel 2010
app2exe=excel.exe
name3=Microsoft PowerPoint 2010
app3exe=outlook.exe
В приложении более трех окон присутствует, поэтому выбрал режим OnEvent. Переходить на месседжлуп не хотелось бы, т.к. я нем теряться начинаю.
 

Ksaan

Знающий
Сообщения
207
Репутация
15
Можно вот так
Код:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>

Global $array[4], $multipleappsexe[4], $d = 10

GUICreate("Application Launcher", 200, 100)

$multipleapps = IniRead($appsfile, $sText, "multipleapps", "")

For $o = 1 to $multipleapps
	$multipleappsname = IniRead($appsfile, $sText, "name" & $o, "")
	$array[$o] = GUICtrlCreateButton($multipleappsname, 10, $d, 180 , 25)
	$d = $d + 28
	$multipleappsexe[$o] = IniRead($appsfile, $sText, "app" & $o & "exe", "")
Next

GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_PRIMARYDOWN
			$aInfo = GUIGetCursorInfo()

			For $i = 1 To $multipleapps
				If $aInfo[4] = $array[$i] Then
					MsgBox(0, "Нажатие", "Запуск" & $multipleappsexe[$i])
				EndIf
			Next

		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
Wend
 
Автор
D

Dr.Freezer

Новичок
Сообщения
7
Репутация
0
Спасибо, ваш вариант сработал. Выкладываю этот же вариант, но переделанный под OnEvent, может кому пригодится.
Код:
Func MultipleWindow()
	global $sText = _GUICtrlTreeView_GetText($hTree, _GUICtrlTreeView_GetSelection($hTree))
 $multiplegui = GUICreate("Application Launcher", 200, 100)
 GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
 global $multipleapps = IniRead($appsfile, $sText, "multipleapps", "")
 global $multipleappsarrayfix = $multipleapps+1
 $d = 10
global $array[ $multipleappsarrayfix]
global $multipleappsexe[ $multipleappsarrayfix]
	For $o = 1 to $multipleapps
	  $multipleappsname = IniRead($appsfile, $sText, "name" & $o, "")
	  $array[$o] = GUICtrlCreateButton($multipleappsname, 10, $d, 180 , 25)
	  Guictrlsetonevent(-1, "TestRun")
	  $d = $d + 28
	  $multipleappsexe[$o] = IniRead($appsfile, $sText, "app" & $o & "exe", "")
			
  Next
   GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "RunMiltipleApp")

	GUISetState(@SW_SHOW)
	
	   
 EndFunc
 
 Func RunMiltipleApp()
            $aInfo = GUIGetCursorInfo()

            For $i = 1 To $multipleapps
                If $aInfo[4] = $array[$i] Then
                    MsgBox(0, "Нажатие", "Запуск" & $multipleappsexe[$i])
                EndIf
            Next
	EndFunc
 
Верх