Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Вопрос по GUI (http://forum.oszone.net/showthread.php?t=143691)

DenNC 28-06-2009 14:24 1153745

Вопрос по GUI
 
Помогите пожалуйста разобраться в таком вопросе:
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 1153753

Цитата:

Цитата DenNC
выводится в качестве A2 какое то левое значение, а не "5" »

Нет, у меня именно 5 и выводится. Полный нерабочий пример можно увидеть?

Цитата:

Цитата DenNC
странно то, что при нажатой возвращаеться единица, а при отжатой возвращаеться 4 »

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

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

Код:

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

DenNC 28-06-2009 14:56 1153760

Да собственно еще раз проверил и вот код

Код:

#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 1153770

Цитата:

Цитата DenNC
Да собственно еще раз проверил и вот код »

Так в чём проблема, и в этом примере отображает 5 после нажатия Start.

Цитата:

Цитата DenNC
я пользуюсь AutoIt3_2_5_4_ru.chm »

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

FlatX007 28-06-2009 15:14 1153780

Так нарно понятнее будет
Код:

#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 1153785

Цитата:

Цитата FlatX007
Креатор опять будет ругацо типа опять наКoda`ил »

Да я и не ругался по этому поводу, просто высказал своё мнение :)

SyDr 28-06-2009 15:27 1153788

Цитата:

Цитата Creat0R
Мда... нужно обновлять русскую справку, а времени не хватает »

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

Medic84 28-06-2009 15:34 1153796

Цитата:

Цитата Creat0R
Так в чём проблема, и в этом примере отображает 5 после нажатия Start. »

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

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

Код:

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


Цитата:

Цитата Sylver Dragon
У меня, кстати, тоже была такая мысля. Я даже что-то начал.
Думал сначала просто переводить. А потом плюнул. Влом как-то стало.
Может "навалимся всем скопом" и переведём справку? Тем более, что есть база: справка Валерия Иванова.
Программа минмум: перевести стандартные функции и справку (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 1153808

Цитата:

Цитата Sylver Dragon
Думал сначала просто переводить. А потом плюнул. Влом как-то стало. »

И мои попытки тем же окончились...

Creat0R 28-06-2009 15:51 1153814

Sylver Dragon, Medic84, по поводу перевода справки, все сюда :)

Цитата:

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

И? Там же GUICtrlRead() читается один раз и в начале, оно и логично.

Medic84 28-06-2009 15:55 1153817

Цитата:

Цитата Creat0R
И? Там же GUICtrlRead() читается один раз и в начале, оно и логично. »

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

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

Creat0R 28-06-2009 17:51 1153915

Цитата:

Цитата proxy
думаешь сам начать? или открыть ветку и собирать переводы »

См. ранние посты.

DenNC 28-06-2009 20:51 1154059

Перечитал все, но так и не понял, где ошибка, не затруднит ли кого нить в кратце изложить ответ на мой вопрос? Ну никак без помощи не получаеться.

FlatX007 28-06-2009 21:13 1154092

Значение в переменую $A2 записывается до того как оно было изменено.

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

proxy 28-06-2009 21:25 1154101

Цитата:

Цитата DenNC
Перечитал все, но так и не понял, где ошибка, не затруднит ли кого нить в кратце изложить ответ на мой вопрос? Ну никак без помощи не получаеться. »

И так....

Задача: После нажатия на кнопку "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".


Теперь понял суть?
Сможешь сам исправить свой скрипт?

DenNC 28-06-2009 21:28 1154106

Огромное спасибо. Сча буду исправлять ошибки.


Время: 17:57.

Время: 17:57.
© OSzone.net 2001-