Что нового

Как передать сразу фокус кнопке в GUI

dr.room

Новичок
Сообщения
283
Репутация
0
Как передать сразу фокус кнопке в GUI ? Чтобы можно было применять Enter. Почему-то фокус идет на GUICreate при открытии окна ?
Код:
#include <UserGUI.au3>
Local $hGui, $msg, $Input1, $Input2, $Input3, $Input4, $BtnOk, $sText,$rezalt,$BtnProdolgit
Local $textGuiCtrlCreateLabel, $textGuiCtrlCreateLabel_2, $SS_CENTER


Local $aWHXY[4] = [10, 10, 3000, 1900]
_SetCoor($aWHXY, 500, 170)


$hGui = GUICreate('My program', $aWHXY[0], $aWHXY[1], $aWHXY[2], $aWHXY[3])


	$font = ""
	$textGuiCtrlCreateLabel = GUICtrlCreateLabel ('Заголовок ', 80, 8, 680, 27, $SS_CENTER)
	 GUICtrlSetFont($textGuiCtrlCreateLabel,10,700,$font)

	$textGuiCtrlCreateLabel_2 = GUICtrlCreateLabel ('Пояснение ', 10, 30, 480, 17, $SS_CENTER)
	GUICtrlSetFont($textGuiCtrlCreateLabel_2,9,400)



$BtnOk = GUICtrlCreateButton("OK", 160, 115, 90, 36)
$BtnProdolgit = GUICtrlCreateButton("Продолжить", 290, 115, 100, 36)


GUISetState()



While 1
    $msg = GUIGetMsg()
    Switch $msg
;~         Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $BtnOk
            MsgBox(0, "Результат", "Нажата кнопка Ок")
						ExitLoop
        Case $BtnProdolgit
            MsgBox(0, "Результат", "Нажата кнопка Продолжить")
						ExitLoop

    EndSwitch
WEnd
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
dr.room, если использовать -1 вместо controlID функция будет действовать на последний созданный элемент GUI
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Tempo сказал(а):
dr.room, если использовать -1 вместо controlID функция будет действовать на последний созданный элемент GUI
Спасибо
Что значит последний: Вы имеете в виду элемент, непосредственно под которым прописывается функция GUICtrlSetState ?
Относительно ID элемента: кажется понял - нужно смотреть Au3Info.exe раздел Contra/id
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
dr.room, для последнего элемента созданного с помощью функций GUICtrlCreate... Так же функции GUICtrlCreate... возвращают controlID для последующего обращения к этим элементам. Вам стоит почитать справку Описание GUI

Au3Info используют если нужно получить информацию о чужих элементах управления, а не созданных собственным скриптом
 
A

Alofa

Гость
dr.room вы путаете функции из раздела "Окна" и функции из "GUI".
За каждым окном в ОС стоит программа его породившая. Так вот, если эта программа уже скомпилирована и вы не можете повлиять на ее окно "изнутри", то остается вариант управлять им "снаружи" через Win-функции (раздел справки "Окна") и некоторые _WinAPI...
В Autoit есть инструменты для создания своих окон, а вы как разработчик здесь бог и царь - творите что душе угодно, т.е. у вас есть возможность создавать и изменять окна (свои) "изнутри" программы, для этого и существуют GUI-функции.
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Tempo
Я немного запутался
Вот я добавил еше 1 элемент GUICtrlCreate он идет последним, но
Код:
GUICtrlSetState(-1, $GUI_FOCUS)

разместил не за GUICtrlCreate 2 а за предыдущим GUICtrlCreate. По идее в фокусе должна была оказаться кнопка 2, та как это "последний" элемент GUI, но оказалась кнопка 1 :stars: Как же так ?
Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

$hGUI = GUICreate("Состояние элементов в GUI", 420, 300, -1, -1, -1, $WS_EX_ACCEPTFILES)

$iLabel = GUICtrlCreateLabel("Перетащи и брось сюда файл", 10, 10, 400, 40, $WS_BORDER)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)

$iInput = GUICtrlCreateInput("", 10, 60, 400, 22)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)

GUICtrlCreateLabel("Отключенный текст", 10, 100)
GUICtrlSetState(-1, $GUI_DISABLE) ; элемент Label в отключенном состоянии

GUICtrlCreateButton("Кнопка с фокусом  1", 150, 140)
GUICtrlSetState(-1,$GUI_FOCUS) ; устанавливает фокус на кнопку

GUICtrlCreateButton("Кнопка с фокусом  2", 150, 240)


GUISetState() ; показывает созданное окно

; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $GUI_EVENT_DROPPED ; Событие drag-and-drop
            If @GUI_DropId = $iLabel Then GUICtrlSetData($iLabel, @GUI_DragFile)
    EndSwitch
WEnd

Alofa
Спасибо, кажется я понял различие возможностей управления.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
dr.room, по какой логике должна быть в фокусе кнопка 2? Скрипт выполняется построчно. На момент использования
Код:
GUICtrlSetState(-1,$GUI_FOCUS)
последним был
Код:
GUICtrlCreateButton("Кнопка с фокусом  1", 150, 140)
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Tempo
Спасибо
В этом случае можно сказать так - с небольшим уточняющим условием: параметр -1 указывает на
  • последний GUICtrlCreate
  • на момент использования GUICtrlSetState
Я правильно понимаю ?
 
A

Alofa

Гость
Tempo сказал(а):
... Скрипт выполняется построчно...
Т.е. сверху вниз, от первой строки к последней.

Как вы прочитаете построчно данный кусок вашего кода?
Код:
; ...
GUICtrlCreateButton("Кнопка с фокусом  1", 150, 140)
GUICtrlSetState(-1,$GUI_FOCUS) ; устанавливает фокус на кнопку

GUICtrlCreateButton("Кнопка с фокусом  2", 150, 240)
; ...
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Ой - кажется я просто повторил что уже написал Tempo
Был как-то не очень внимателен - сори :(
Всем спасибо
 
Верх