Войти

Показать полную графическую версию : [решено] Вопрос по GUI


DenNC
28-06-2009, 14:24
Помогите пожалуйста разобраться в таком вопросе:
1. вот допустим имееться такой код

$A1=GuiCtrlCreateInput("5", 100, 35, 40, 20)
$A2=GUICtrlRead($A1)

и ввел я например цифру 5

Почему, когда я пишу следующую строку
MsgBox(0,1,""& $A2 &"",1) выводится в качестве A2 какое то левое значение, а не "5"

и если я напишу
MsgBox(0,1,""& GUICtrlRead($A1) &"",1) выводится именно то, что я ввел, т.е. "5"
Как правильно присвоить переменной вводимое значение?

2. И вот аналогичный вопрос про галочку
$A1=GuiCtrlCreateCheckbox("", 120, 78, 40, 20)
$A2=GUICtrlRead($A1)
И странно то, что при нажатой возвращаеться единица, а при отжатой возвращаеться 4. И мне кажеться, что я что то не так делаю, подскажите пожалуйста что именно.

Creat0R
28-06-2009, 14:44
выводится в качестве A2 какое то левое значение, а не "5" »
Нет, у меня именно 5 и выводится. Полный нерабочий пример можно увидеть?

странно то, что при нажатой возвращаеться единица, а при отжатой возвращаеться 4 »
Всё верно, оно так и задуманно, а что вас заставило ожидать другое значение? В справке ведь об этом сказано. 1 это константа $GUI_CHECKED, а 4 это $GUI_UNCHECKED.

Кстати, я делаю вот что для получения 1-цы для поставленной отметки, и 0 для снятой:

$iState = Number(GUICtrlRead($A1) = 1)

DenNC
28-06-2009, 14:56
Да собственно еще раз проверил и вот код


#include <GuiConstantsEx.au3>

Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)

Global $ExitID
Global $A1
Global $A2

GUI()


Func GUI()
Local $YesID

; GUI
GuiCreate("1.0", 420, 300)

; TAB
GuiCtrlCreateTab(10, 0, 400, 260)
GuiCtrlCreateTabItem("main")
GuiCtrlCreateLabel("Number", 20, 40)
; UPDOWN
$A1=GuiCtrlCreateInput("5", 100, 35, 40, 20)
GuiCtrlCreateUpDown(-1)
$A2=GUICtrlRead($A1)


$YesID = GUICtrlCreateButton("Start", 10, 260, 100, 30)
GUICtrlSetOnEvent($YesID, "Start")

$ExitID = GUICtrlCreateButton("Exit", 290, 260, 100, 30)
GUICtrlSetOnEvent($ExitID, "OnExit")

GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")

GUISetState() ; display the GUI

While 1
Sleep(1000)
WEnd
EndFunc



Func Start()
MsgBox(0,1," "& $A2 &" ",2)
EndFunc

Func OnExit()
Exit
EndFunc


Сам то я пользуюсь AutoIt3_2_5_4_ru.chm - вот таким справочником (1,3 mb), в гугле тоже вводил, но там выскакивают эти функции в коде, пришлось как то на примерах осваивать.

Creat0R
28-06-2009, 15:06
Да собственно еще раз проверил и вот код »
Так в чём проблема, и в этом примере отображает 5 после нажатия Start.

я пользуюсь AutoIt3_2_5_4_ru.chm »
Мда... нужно обновлять русскую справку, а времени не хватает :(

FlatX007
28-06-2009, 15:14
Так нарно понятнее будет
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form = GUICreate("", 144, 76, 302, 218)
$Input1 = GUICtrlCreateInput("", 8, 8, 121, 21)
$Button1 = GUICtrlCreateButton("Button1", 56, 40, 75, 25, 0)
GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

Case $Button1
$Read = GUICtrlRead($Input1)
MsgBox(16, "Сообщение", "Значение переменной $Read = " & $Read)

EndSwitch
WEnd
Ща ... Креатор опять будет ругацо типа опять наКoda`ил (FormDesigner) :yes:

Creat0R
28-06-2009, 15:23
Креатор опять будет ругацо типа опять наКoda`ил »
Да я и не ругался по этому поводу, просто высказал своё мнение :)

SyDr
28-06-2009, 15:27
Мда... нужно обновлять русскую справку, а времени не хватает »
У меня, кстати, тоже была такая мысля. Я даже что-то начал.
Думал сначала просто переводить. А потом плюнул. Влом как-то стало.
Может "навалимся всем скопом" и переведём справку? Тем более, что есть база: справка Валерия Иванова.
Программа минмум: перевести стандартные функции и справку (380 функций и по мелочи).
Программа максимум: перевести UDF и добавить русские примеры (1980 функций)
Как идейка? Ведь если будет хотя бы четыре человека, то работа будет идти гораздо быстрее.

Medic84
28-06-2009, 15:34
Так в чём проблема, и в этом примере отображает 5 после нажатия Start. »

А ты попробуй значение сменить. Если изменить на 4, то все равно выводит 5!

Пытался сейчас переписать код программы не хочет обрабатывать цикл... Без опций

Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)


У меня, кстати, тоже была такая мысля. Я даже что-то начал.
Думал сначала просто переводить. А потом плюнул. Влом как-то стало.
Может "навалимся всем скопом" и переведём справку? Тем более, что есть база: справка Валерия Иванова.
Программа минмум: перевести стандартные функции и справку (380 функций и по мелочи).
Программа максимум: перевести UDF и добавить русские примеры (1980 функций)
Как идейка? Ведь если будет хотя бы четыре человека, то работа будет идти гораздо быстрее. »

Согласен :)



#include <GUIConstantsEx.au3>

;Задаем наш GUI
$hGUI = GUICreate("1.0", 420, 300)
GuiCtrlCreateTab(10, 0, 400, 260)
GuiCtrlCreateTabItem("main")
GuiCtrlCreateLabel("Number", 20, 40)
; UPDOWN
$A1=GuiCtrlCreateInput("5", 100, 35, 40, 20)
GuiCtrlCreateUpDown(-1)

$YesID = GUICtrlCreateButton("Start", 10, 260, 100, 30)
$ExitID = GUICtrlCreateButton("Exit", 290, 260, 100, 30)

GUISetState(@SW_SHOW, $hGUI) ;Отображаем GUI

;Запускаем цикл для обработrи событий
While 1
$nMsg = GUIGetMsg()

Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $ExitID
Exit
Case $YesID
$A2=GUICtrlRead($A1)
MsgBox(0,1," "& $A2 &" ",2)
EndSwitch
WEnd


Извиняюсь что не в цвете(программы под рукой нету)
Собственно этот скрипт ДОЛЖЕН работать но обработка событий не работает

beve
28-06-2009, 15:48
Думал сначала просто переводить. А потом плюнул. Влом как-то стало. »
И мои попытки тем же окончились...

Creat0R
28-06-2009, 15:51
Sylver Dragon, Medic84, по поводу перевода справки, все сюда (http://forum.oszone.net/post-1153805.html) :)

ты попробуй значение сменить. Если изменить на 4, то все равно выводит 5! »
И? Там же GUICtrlRead() читается один раз и в начале, оно и логично.

Medic84
28-06-2009, 15:55
И? Там же GUICtrlRead() читается один раз и в начале, оно и логично. »

Значит все прекрасно работает :)

А мои попытки перестроить ее не увенчаличь успехом :(

Creat0R
28-06-2009, 17:51
думаешь сам начать? или открыть ветку и собирать переводы »
См. ранние посты.

DenNC
28-06-2009, 20:51
Перечитал все, но так и не понял, где ошибка, не затруднит ли кого нить в кратце изложить ответ на мой вопрос? Ну никак без помощи не получаеться.

FlatX007
28-06-2009, 21:13
Значение в переменую $A2 записывается до того как оно было изменено.

т.е. при отрисовке GUI окна в переменную $A2 записыватеся значение 5 которое считывает функция GUICtrlRead($A1) из поля Инпут.

proxy
28-06-2009, 21:25
Перечитал все, но так и не понял, где ошибка, не затруднит ли кого нить в кратце изложить ответ на мой вопрос? Ну никак без помощи не получаеться. »
И так....

Задача: После нажатия на кнопку "Start":
1. Прочитать данные из "GuiCtrlCreateInput"
2. Вывести результат в "MsgBox".

Идентификатор (указатель) на "GuiCtrlCreateInput": "$A1"
Соообщение "MsgBox" выводится в функции: "Start"

Алгоритм действий пользователя, на примере твоего скрипта:
1. После нажатия кнопки "Start" - вызывается функция "Start"
2. Вызванная функция "Start" выводит "MsgBox" сообщение, которое отображает текст, которые содержится в переменной "$A2"

Вопрос 1: Как и когда поподает текст в переменную "$A2" ?
Ответ: В примере твоего кода, в переменную "$A2" текст записывается один-единственный раз, сразу после создания "GuiCtrlCreateInput":


...........

; TAB
GuiCtrlCreateTab(10, 0, 400, 260)
GuiCtrlCreateTabItem("main")
GuiCtrlCreateLabel("Number", 20, 40)
; UPDOWN
$A1=GuiCtrlCreateInput("5", 100, 35, 40, 20)
GuiCtrlCreateUpDown(-1)
$A2=GUICtrlRead($A1)


$YesID = GUICtrlCreateButton("Start", 10, 260, 100, 30)
GUICtrlSetOnEvent($YesID, "Start")

...........


Вопрос 2: Следуя поставленной задаче, почему в твоем скрипте не выполняется пункт № 1?

Что нужно сделать, что бы было правильно: При каждом вызове функции "Start" считывать данные из "GuiCtrlCreateInput" и записывать результат в переменную "$A2".


Теперь понял суть?
Сможешь сам исправить свой скрипт (http://forum.oszone.net/post-1153760-3.html)?

DenNC
28-06-2009, 21:28
Огромное спасибо. Сча буду исправлять ошибки.




© OSzone.net 2001-2012