Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вызов одной формы из другой

Ответить
Настройки темы
[решено] Вызов одной формы из другой

Старожил


Сообщения: 156
Благодарности: 1


Конфигурация

Профиль | Отправить PM | Цитировать


Всем привет! Следующий вопрос - как вызвать одну форму из другой, чтобы обе формы взаимно видели элементы друг друга. Я думал, чтобы не загромождать код двумя формами, разделить его и вызывать по необходимости. Дошел только до #include одного скрипта в другой. Думал, будет как по аналогии с бейсиком - форма1.Поле1=Форма2.Поле1... ну как то так, давно это было... Или это не возможно в принципе?

Отправлено: 13:03, 08-09-2013

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
как вызвать одну форму из другой, чтобы обе формы взаимно видели элементы друг друга »
Как то так:

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$hForm1 = GUICreate('Form1', 300, 200, 100, 100)
$hForm2 = GUICreate('Form2', 300, 200, 450, 100)

$aForm1_Elements = _FormElements($hForm1)
$aForm2_Elements = _FormElements($hForm2)

GUISetState(@SW_SHOW, $hForm1)
GUISetState(@SW_SHOW, $hForm2)

While 1
    $iMsg = GUIGetMsg()

    Switch $iMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $aForm1_Elements[1] To $aForm1_Elements[$aForm1_Elements[0]]
            MsgBox(64, 'Event', 'Event from element (' & GUICtrlRead($iMsg, 1) & ') in form 1', 0, $hForm1)
        Case $aForm2_Elements[1] To $aForm2_Elements[$aForm2_Elements[0]]
            MsgBox(64, 'Event', 'Event from element (' & GUICtrlRead($iMsg, 1) & ') in form 2', 0, $hForm2)
    EndSwitch
WEnd

Func _FormElements($hForm)
    GUISwitch($hForm)

    Local $aRet[3] = [2]

    $aRet[1] = GUICtrlCreateButton('Button1', 20, 20, 60, 20)
    $aRet[2] = GUICtrlCreateButton('Button2', 20, 40, 60, 20)

    Return $aRet
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:55, 08-09-2013 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:00, 08-09-2013 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
надо, чтобы второе окно появлялось по необходимости при нажатии на кнопку »
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$hForm1 = GUICreate('Form1', 300, 200, 100, 100)
$iShowForm2_Bttn = GUICtrlCreateButton('Show Form2', 20, 170, 90, 20)
$aForm1_Elements = _FormElements($hForm1)

$hForm2 = GUICreate('Form2', 300, 200, 450, 100)
$aForm2_Elements = _FormElements($hForm2)

GUISetState(@SW_SHOW, $hForm1)

While 1
    $aMsg = GUIGetMsg(1)

    Switch $aMsg[0]
        Case $GUI_EVENT_CLOSE
            If $aMsg[1] = $hForm1 Then
                Exit
            Else
                ContinueCase ;To trigger next state
            EndIf
        Case $iShowForm2_Bttn
            If GUICtrlRead($iShowForm2_Bttn) = 'Show Form2' Then
                GUICtrlSetData($iShowForm2_Bttn, 'Hide Form2')
                GUISetState(@SW_SHOW, $hForm2)
            Else
                GUICtrlSetData($iShowForm2_Bttn, 'Show Form2')
                GUISetState(@SW_HIDE, $hForm2)
            EndIf
        Case $aForm1_Elements[1] To $aForm1_Elements[$aForm1_Elements[0]]
            MsgBox(64, 'Event', 'Event from element (' & GUICtrlRead($aMsg[0], 1) & ') in form 1', 0, $hForm1)
        Case $aForm2_Elements[1] To $aForm2_Elements[$aForm2_Elements[0]]
            MsgBox(64, 'Event', 'Event from element (' & GUICtrlRead($aMsg[0], 1) & ') in form 2', 0, $hForm2)
    EndSwitch
WEnd

Func _FormElements($hForm)
    GUISwitch($hForm)

    Local $aRet[3] = [2]

    $aRet[1] = GUICtrlCreateButton('Button1', 20, 20, 60, 20)
    $aRet[2] = GUICtrlCreateButton('Button2', 20, 40, 60, 20)

    Return $aRet
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:45, 08-09-2013 | #4


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


Creat0R, ну ты прямо бог autoit'a. Добей меня уже тогда - а если нужны разные контролы на форме, то как их прописать в функцию Func _FormElements($hForm)? Назначение формы - форма настройки. Вроде не нужна на экране постоянно, но в то же время ее наличие необходимо

Отправлено: 22:52, 08-09-2013 | #5


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
а если нужны разные контролы на форме »
То это уже другая тема.
Ты определись что тебе нужно, в первом сообщении спрашивается о синхронизации элементов в разных формах, теперь уже речь идёт о другом.

Может лучше опишешь задачу, чтобы был понятен конечный результат?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:54, 08-09-2013 | #6


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата eus_deus:
чтобы обе формы взаимно видели элементы друг друга »
это вроде не синхронизация... я подразумевал, что по действиям контролов первой формы что то изменится на контролах второй и наоборот. но контролы разные. прошу прощения за не внесение ясности в вопрос

Отправлено: 12:00, 09-09-2013 | #7


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


в принципе вопрос решен. мне нужно было только понятие того, что весь код будет в одном модуле, а не в разных, как я это строил. помог код для кнопки
Код: Выделить весь код
 Case $iShowForm2_Bttn
            If GUICtrlRead($iShowForm2_Bttn) = 'Show Form2' Then
                GUICtrlSetData($iShowForm2_Bttn, 'Hide Form2')
                GUISetState(@SW_SHOW, $hForm2)
            Else
                GUICtrlSetData($iShowForm2_Bttn, 'Show Form2')
                GUISetState(@SW_HIDE, $hForm2)
            EndIf
дело за малым - как при закрытии второй формы по крестику, не закрывать первую?

Отправлено: 12:17, 09-09-2013 | #8


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
как при закрытии второй формы по крестику, не закрывать первую? »
За обработку закрытия отвечает Case $GUI_EVENT_CLOSE, в последнем примере как раз вторя форма прячется не закрывая весь скрипт.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:49, 09-09-2013 | #9


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


Creat0R, вопросов нет. по крайней мере, не в этой теме. Здесь вопрос решен

Отправлено: 13:09, 09-09-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вызов одной формы из другой

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Копирование строк из одной файла в другой Kamerad Скриптовые языки администрирования Windows 3 28-01-2013 09:59
Чтение диска из одной ОС, в другой. spider1973 Хочу все знать 7 07-01-2010 16:39
DNS/DHCP - Доступ к определенному компьютеру в одной сети из другой Dreamer_ Сетевые технологии 1 24-06-2009 20:17
Доступ из одной сети к другой посредствам DSL модема. stavskiys Сетевые технологии 4 17-12-2006 15:03
2е ОС на 1м РС, ограничение в доступе к дискам из одной ОСхр к другой ОС2000... bruno Microsoft Windows 2000/XP 4 03-10-2005 12:07




 
Переход