Что нового

[Элементы GUI] Обработка событий элемента Combobox

edward_freedom

Осваивающий
Сообщения
200
Репутация
44
Приведите пример,так как я нигде не могу найти :shok:
Чтобы из списка Combo1 выбрать элемент и выполнилось определеное действие :whistle:
Пример...в списке Combo1 выбрать Mob1 или Mob2 или Mob3 и мышка переместилась :(
Вот пример
If PixelGetColor(326, 309) = 0xC70000 Then
Sleep(Random(50, 50))
MouseClick("left", 402, 483)
EndIf

Мне надо чтобы MouseClick можно было выбрать из Combo1
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("", 163, 47, 192, 114)
$Combo1 = GUICtrlCreateCombo("Выберите координаты", 9, 11, 145, 25)
GUICtrlSetData(-1, "402,483")
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Combo1
            $aCord = StringSplit(GUICtrlRead($Combo1), ",", 2)
            If PixelGetColor(326, 309) = 0xC70000 Then
                Sleep(Random(50, 50))
                MouseClick("left", $aCord[0], $aCord[1])
            EndIf

    EndSwitch
WEnd
 
Автор
E

edward_freedom

Осваивающий
Сообщения
200
Репутация
44
Спасибо тебе большое,это именно то что мне надо!!СПАСИБО
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
edward_freedom
В принципе, почти то же самое, что у Garrett`a:
Код:
#include <GUIConstantsEx.au3>

#region ### START Koda GUI section ### Form=
$Form1 = GUICreate('Test', 200, 80, -1, -1)
$Combo1 = GUICtrlCreateCombo('', 20, 40, 160, 25)
GUICtrlSetData(-1, '100|200|300', '300')
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Combo1
			_MyFunc(GUICtrlRead($Combo1))
	EndSwitch
WEnd

Func _MyFunc($iXY)
	MouseMove($iXY, $iXY)
	MouseMove($iXY * 2, $iXY)
	MouseMove($iXY * 2, $iXY * 2)
	MouseMove($iXY, $iXY * 2)
	MouseMove($iXY, $iXY)
EndFunc   ;==>_MyFunc
 
Автор
E

edward_freedom

Осваивающий
Сообщения
200
Репутация
44
Код:
Case $Combo1
             $aCord = StringSplit(GUICtrlRead($Combo1), ",", 2)
		If PixelGetColor(514, 750) = 0x7AD249 Then
                MouseClick("left", $aCord[0], $aCord[1])
            EndIf
		   Case $Combo2
             $aCord = StringSplit(GUICtrlRead($Combo2), ",", 2)
		If PixelGetColor(534, 753) = 0x79D238 Then
                MouseClick("left", $aCord[0], $aCord[1])
            EndIf
		Case $Combo3
             $aCord = StringSplit(GUICtrlRead($Combo3), ",", 2)
            If PixelGetColor(553, 751) = 0x8AE157 Then
                MouseClick("left", $aCord[0], $aCord[1])
            EndIf
		Case $Combo4
             $aCord = StringSplit(GUICtrlRead($Combo4), ",", 2)
		If PixelGetColor(573, 752) = 0x559727 Then
                MouseClick("left", $aCord[0], $aCord[1])
            EndIf

Почему выполняеться первый $combo1 а все остальные нет?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Потому что нужно заглядывать в справку! ;)
Код:
Switch GUICtrlRead($Combo1)
    Case "121,235" ; координаты $Combo1
        $aCord = StringSplit(GUICtrlRead($Combo1), ",", 2)
        If PixelGetColor(514, 750) = 0x7AD249 Then
            MouseClick("left", $aCord[0], $aCord[1])
        EndIf
    Case "121,345" ; координаты $Combo1
        $aCord = StringSplit(GUICtrlRead($Combo1), ",", 2)
        If PixelGetColor(534, 753) = 0x79D238 Then
            MouseClick("left", $aCord[0], $aCord[1])
        EndIf
    Case "345,235" ; координаты $Combo1
        $aCord = StringSplit(GUICtrlRead($Combo1), ",", 2)
        If PixelGetColor(553, 751) = 0x8AE157 Then
            MouseClick("left", $aCord[0], $aCord[1])
        EndIf
    Case "23,45" ; координаты $Combo1
        $aCord = StringSplit(GUICtrlRead($Combo1), ",", 2)
        If PixelGetColor(573, 752) = 0x559727 Then
            MouseClick("left", $aCord[0], $aCord[1])
        EndIf
EndSwitch



Добавлено:
Сообщение автоматически объединено:

Или так, если у вас не один Combo:
Код:
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Combo1
            $aCord = StringSplit(GUICtrlRead($Combo1), ",", 2)
            If PixelGetColor(326, 309) = 0xC70000 Then
                Sleep(Random(50, 50))
                MouseClick("left", $aCord[0], $aCord[1])
            EndIf
        Case $Combo2
            $aCord = StringSplit(GUICtrlRead($Combo2), ",", 2)
            If PixelGetColor(326, 309) = 0xC70000 Then
                Sleep(Random(50, 50))
                MouseClick("left", $aCord[0], $aCord[1])
            EndIf
        Case $Combo3
            $aCord = StringSplit(GUICtrlRead($Combo3), ",", 2)
            If PixelGetColor(326, 309) = 0xC70000 Then
                Sleep(Random(50, 50))
                MouseClick("left", $aCord[0], $aCord[1])
            EndIf
        Case $Combo4
            $aCord = StringSplit(GUICtrlRead($Combo4), ",", 2)
            If PixelGetColor(326, 309) = 0xC70000 Then
                Sleep(Random(50, 50))
                MouseClick("left", $aCord[0], $aCord[1])
            EndIf

    EndSwitch
WEnd
 

alexb

Новичок
Сообщения
4
Репутация
0
Как реализовать обработку событий в Combobox, чтобы, например, когда я выбираю элемент списка, отображалось сообщение со значением выбранной строки ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
alexb
Так попробуйте:
Код:
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate('Form1', 267, 97, 192, 114)
$Combo1 = GUICtrlCreateCombo('', 24, 16, 185, 25)
GUICtrlSetData(-1, 'Первая строка|Вторая строка|Третья строка', 'Третья строка')
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Combo1
			MsgBox(0, 'Combo1', GUICtrlRead($Combo1))
	EndSwitch
WEnd
 
Автор
E

edward_freedom

Осваивающий
Сообщения
200
Репутация
44
Спасибо вам всем!!!!Мир не без добрвх людей! :shok: :IL_AutoIt_1:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
edward_freedom сказал(а):
А можно пример с :blink:$Checkbox1
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("MyProg", 113, 35, 192, 114)
$Checkbox1 = GUICtrlCreateCheckbox("100,200", 8, 8, 97, 17)
GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
        Exit
    Case $Checkbox1
        $aCord = StringSplit(ControlGetText ( "MyProg", "", $Checkbox1 ), ",", 2)
        If PixelGetColor(326, 309) = 0xC70000 Then
            Sleep(Random(50, 50))
            MouseClick("left", $aCord[0], $aCord[1])
        EndIf
    EndSwitch
WEnd
 

Jotun

Новичок
Сообщения
31
Репутация
0
Никак не могу понять как обрабатывать событие в комбо когда включён Opt ( "GUIOnEventMode", 1 )
Как отслеживать выбор пункта в списке?

Код:
#include <GUIConstantsEx.au3>
#include <GuiComboBox.au3>
#include <GuiListBox.au3>

Opt ( "GUIOnEventMode", 1 )

$Main = GUICreate ( "", 400, 400 )
$Combo = _GUICtrlComboBox_Create ( $Main, "", 100,50,150,200, $GUI_SS_DEFAULT_LIST + BitNOT($LBS_SORT) + $CBS_DROPDOWNLIST)

GUISetOnEvent ( $GUI_EVENT_CLOSE, "_Exit", $Main )
GUICtrlSetOnEvent ( $Combo, "Test")

For $i=1 To 10
	_GUICtrlComboBox_AddString ( $Combo, "Text " & $i )
Next
GUISetState ( @SW_SHOW, $Main )

_GUICtrlComboBox_SetCurSel ( $Combo, 0 )

While 1
	Sleep (1000)
WEnd

Func Test ()
	MsgBox (0,"","TEST")
EndFunc

Func _Exit ()
	Exit
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Jotun [?]
обрабатывать событие в комбо когда включён Opt
Этот режим для элементов, созданных штатными средствами AutoIt
Код:
$Combo = GUICtrlCreateCombo( "", 100,50,150,200, $GUI_SS_DEFAULT_LIST + BitNOT($LBS_SORT) + $CBS_DROPDOWNLIST)
Если вы создали combobox при помощи
Код:
_GUICtrlComboBox_Create()
то его нужно обрабатывать через WM_COMMAND (см. пример в справке к этой функции).
 

Jotun

Новичок
Сообщения
31
Репутация
0
InnI сказал(а):
Этот режим для элементов, созданных штатными средствами. Если вы создали combobox при помощи
Код:
_GUICtrlComboBox_Create()
то его нужно обрабатывать через WM_COMMAND (см. пример в справке к этой функции).

Аааа блин :smile: У меня не получалось выудить текст из ListBox при помощи

Код:
$LB_GETTEXT


- получал крит, тогда я решил использовать

Код:
_GUICtrlListBox_GetText.


С Combo я решил сразу создать его при помощи

Код:
_GUICtrlComboBox_Create()
.

Запара вышла, $CB_GETLBTEXT для обычного Combo созданого

Код:
GUICtrlCreateCombo ()
у меня работает без крита :smile:


Добавлено:
Сообщение автоматически объединено:






Добавлено:
Сообщение автоматически объединено:

Поторопился я. Толи функции: $CB_GETLBTEXT, $LB_GETLBTEXT не корректно работают, толи я их не правильно использую. После 2-3 выборов из списка Комбо - всё равно критует.

Использую функции: _GUICtrlComboBox_GetLBText и _GUICtrlListBox_GetText
 

Jotun

Новичок
Сообщения
31
Репутация
0
InnI сказал(а):
Этого мало. Нужен пример проблемного кода.

Я имел ввиду что используя функции _GUICtrlComboBox_GetLBText и _GUICtrlListBox_GetText - всё работает.
То что нужен кусок проблемного кода мне понятно, но мне уже трудно выудить из моей каши что-то разумное :smile:
Поэтому пусть так пока будет :smile: Спасибо.
 
Верх