Что нового

Варианты создания дочерник окошек

Olorin

Новичок
Сообщения
28
Репутация
0
Созрел вопрос как оптимальнее использовать дочерние окошки ?
У меня 2 варианта.
1. Сразу создать все формочки. Главную @SW_SHOW остальные @SW_HIDE.
По открытии\закрытии переключать через SHOW\HIDE.
Не достатки:
При хайде дочернего окна заполненные данные остаются заполненными. Приходиться каждый инпут очищать.
Плюсы:
Возможно делать такие функции _ObrabotatInput($input_link).
2. Засунуть создание формочек в функции.
Создавать окно вызовом функции, а удалть GUIDELETE(как так пишеться).
Плюсы:
Очищаться будут сразу все элементы формы, и создаваться новые чистенькие, дефолтовые.
Недостатки:
Все переменные формочки надо пихать в Global, чтобы вызвать такую функцию _ObrabotatInput($input_link).

Может есть какой то более удобный способ ?
 

Arei

Скриптер
Сообщения
938
Репутация
115
вот примеры с дочерними окнами, где то находил в поиске,но не помню кто написал.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

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

Global  $hParentWin, $hChildWin

_Example1()

While 1
    Sleep(10)
WEnd

Func _ProExit()
    Exit
EndFunc

Func _CloseWin()
    GUIDelete(@GUI_WinHandle)
EndFunc

Func _Example1()
    MsgBox(64, 'Пример 1', 'Обычное дочерное окно')

    $hParentWin = GUICreate('Родителськое окно')
        GUISetOnEvent($GUI_EVENT_CLOSE, '_Example2')

    $hChildWin = GUICreate('Дочерное окно', 300, 200, -1, -1, $WS_SYSMENU, -1, $hParentWin)
        GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseWin')

    GUISetState(@SW_SHOW, $hParentWin)
    GUISetState(@SW_SHOW, $hChildWin)
EndFunc

Func _Example2()
    GUIDelete($hParentWin)
    GUIDelete($hChildWin)
    MsgBox(64, 'Пример 2', 'Дочерное окно перемещается вместе с родительским окном')

    $hParentWin = GUICreate('Родителськое окно')
        GUISetOnEvent($GUI_EVENT_CLOSE, '_Example3')

    $hChildWin = GUICreate('Дочерное окно', 300, 200, -1, -1, $WS_SYSMENU, $WS_EX_MDICHILD, $hParentWin)
        GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseWin')

    GUISetState(@SW_SHOW, $hParentWin)
    GUISetState(@SW_SHOW, $hChildWin)
EndFunc

Func _Example3()
    GUIDelete($hParentWin)
    GUIDelete($hChildWin)
    MsgBox(64, 'Пример 3', 'Дочерное окно внутри родительского окна')

    $hParentWin = GUICreate('Родителськое окно')
        GUICtrlCreateLabel('', -100, -100, 0, 0)
        GUISetOnEvent($GUI_EVENT_CLOSE, '_ProExit')

    $hChildWin = GUICreate('Дочерное окно', 300, 200, 10, 10, $WS_SYSMENU)
        GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseWin')

    GUISetState(@SW_SHOW, $hParentWin)
    _WinAPI_SetParent($hChildWin, $hParentWin)
    GUISetState(@SW_SHOW, $hChildWin)
EndFunc
 
Верх