Что нового

Как присвоить значение Комбо к кнопкам?

KlouS

Новичок
Сообщения
3
Репутация
0
Здравствуйте, столкнулся вот с такой проблемой:
Делаю бота для приложения вконтакте, и вот в чем дело, Есть много кнопок, но нужно все кнопки присвоить както к Значению КомбоБокса
Пример:
Код:
$Combo2 = GUICtrlCreateCombo("", 88, 48, 129, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Клетка №1|Клетка №2|Клетка №3|Клетка №4|Клетка №5|Клетка №6|Клетка №7|Клетка №8", "Клетка №1")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$sUser = InputBox('ID пользователя', 'Введите ID пользователя', '', '',  360, 120)
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
Case $Button1 
            $URL = "http://46.4.48.139/birdland/api.php?t=set_open_chest"
            $PostData = "cage%5Fowner%5Fid="& $sUser &"&viewer%5Fid="& $sUser &"&sync%5Fuser%5Fcage%5Fid=999479"
            $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
            $oHTTP.Open("POST", $URL)
            $oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
            $oHTTP.Send($PostData)
            $oHTTP.WaitForResponse
            $Response = $oHTTP.ResponseText
Case $Button2 
            $URL = "http://46.4.48.139/birdland/api.php?t=set_item_value"
            $PostData = "sync_user_cage_id=188540&viewer_id="& $sUser &"&items=%5B%7B%22delta%22%3A500%2C%22exp%22%3A1000%2C%22value%22%3A500%2C%22user_item_id%22%3A%221483023%22%7D%2C%7B%22delta%22%3A0%2C%22exp%22%3A0%2C%22value%22%3A180%2C%22user_item_id%22%3A%221384820%22%7D%5D&cid=188540&cage_owner_id="& $sUser &""
            $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
            $oHTTP.Open("POST", $URL)
            $oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
            $oHTTP.Send($PostData)
            $oHTTP.WaitForResponse
            $Response = $oHTTP.ResponseText

При выборе В Комбо: Клетка №1 при нажатии Буттон1 и Буттон2 отправлялись запросы(как у меня уже есть), а вот как сделать так, при выборе Клетка №2 отправлялись совсем другие запросы но при нажатии этих кнопок Бутто1 и Буттон2!
Зарание Благодарен!
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Внутри обработчика
Код:
Case $Button2
добавь, например,
Код:
$hCombo = GUICtrlRead($Combo2)
, и в переменной $hCombo будет текст из комбо-бокса.
А дальше смотря что нужно: либо вставлять этот текст в запрос, либо добавить обработку по этому тексту с помощью If/Then/Else или тем же Switch. Удачи :smile:
 
Автор
K

KlouS

Новичок
Сообщения
3
Репутация
0
либо добавить обработку по этому тексту с помощью If/Then/Else или тем же Switch.
Буду очень признателен, если покажиш пример на одной из кнопок, как присвоить Клетка№1 к кнопке.
С меня +++=) :-[ :beer:


И еще вопрос:
Какую команду нужно ввести, что при нажатии 1 клика на кнопку, этот запрос отправился на сервер не 1 раз, а примерно 50! :-\
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Я не понял точно что нужно, но вот:
Код:
$Combo2 = GUICtrlCreateCombo("", 88, 48, 129, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Клетка №1|Клетка №2|Клетка №3|Клетка №4|Клетка №5|Клетка №6|Клетка №7|Клетка №8", "Клетка №1")

$hCombo = GUICtrlRead($Combo2)

Case $Button2
Select	
	Case $hCombo="Клетка №1"
		If $i<50 Then ;Это чтобы отправить запроз 50 раз, вместо 50 нужно ввести число повторов, вроде всё правильно(=
            $URL = "http://46.4.48.139/birdland/api.php?t=set_item_value"
            $PostData = "sync_user_cage_id=188540&viewer_id="& $sUser &"&items=%5B%7B%22delta%22%3A500%2C%22exp%22%3A1000%2C%22value%22%3A500%2C%22user_item_id%22%3A%221483023%22%7D%2C%7B%22delta%22%3A0%2C%22exp%22%3A0%2C%22value%22%3A180%2C%22user_item_id%22%3A%221384820%22%7D%5D&cid=188540&cage_owner_id="& $sUser &""
            $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
            $oHTTP.Open("POST", $URL)
            $oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
            $oHTTP.Send($PostData)
            $oHTTP.WaitForResponse
            $Response = $oHTTP.ResponseText
			$i=+1
		EndIf
	Case $hCombo="Клетка №2"
		;Второй запрос
	Case $hCombo="Клетка №3"
		;Третий запрос
EndSelect
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
KlouS
Имхо, запросы надо выносить в функции:
Код:
#include <ComboConstants.au3>
#include <GuiConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$sDefault = 'Клетка №1'
$hForm1 = GUICreate('Test', 200, 200)
$hCombo2 = GUICtrlCreateCombo('', 50, 30, 100, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, 'Клетка №1|Клетка №2|Клетка №3|Клетка №4|Клетка №5|Клетка №6|Клетка №7|Клетка №8', $sDefault)
$hButton1 = GUICtrlCreateButton('Button1', 30, 100, 50, 30)
$hButton2 = GUICtrlCreateButton('Button2', 120, 100, 50, 30)
$hLabel = GUICtrlCreateLabel('По умочанию: "' & $sDefault & '"', 0, 183, 200, 17, $SS_CENTER, $WS_EX_STATICEDGE)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $hCombo2
			GUICtrlSetData($hLabel, 'Вы выбрали: "' & GUICtrlRead($hCombo2) & '"')
		Case $hButton1
			_MyFunc_1(GUICtrlRead($hCombo2))
		Case $hButton2
			_MyFunc_2(GUICtrlRead($hCombo2))
	EndSwitch
WEnd

Func _MyFunc_1($sMessage)
	MsgBox(64, '_MyFunc_1', $sMessage & @CRLF & _
			'Здесь можно делать запрос в зависимости от значения $sMessage')
EndFunc   ;==>_MyFunc_1

Func _MyFunc_2($sMessage)
	MsgBox(32, '_MyFunc_2', $sMessage)
EndFunc   ;==>_MyFunc_2
 
Автор
K

KlouS

Новичок
Сообщения
3
Репутация
0
Чтото на повтор запроса
Код:
If $i<50 Then
не работает, ошибку выдает =(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
KlouS [?]
запрос отправился на сервер не 1 раз, а примерно 50!
Код:
For $i = 1 To 50
	;действия, которые нужно сделать 50 раз, например
	ToolTip($i, 0, 0)
	Sleep(200)
Next
 

tech-gs

Знающий
Сообщения
54
Репутация
5
KlouS сказал(а):
не работает, ошибку выдает

Если у тебя в программе есть
AutoItSetOption('MustDeclareVars', 1) ; Обязательное объявление переменных
то $i надо предварительно объявлять:
Local $i
или
Global $i

P.S.: Если $i используется только в цикле For ...Next, то объявлять не надо.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Viktor217
В Вашем примере
Код:
$i = 0
If $i < 50 Then
	;...
	$i += 1
EndIf
$i это счетчик нажатий, т.е. после 50-ти нажатий на кнопку она перестанет реагировать на нажатие.
PS
Код:
$i=+1
присваивает переменной $i значение +1. В этом случае Ваша конструкция
Код:
$i = 0
If $i < 50 Then
	;...
	$i = +1
EndIf
Вообще бесполезна, т.к. 1 всегда меньше, чем 50. :smile:
 
Верх