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

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

Ответить
Настройки темы
[решено] По нажатию кнопки в GUI снизу появляется дополнительный сектор окна

Старожил


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

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


Добрый день! Нужно, чтобы по нажатию кнопки снизу появлялась до этого не существовавшая часть окна (ширина равна ширине изначального GUI, высота произвольна).
Как реализовать такую возможность на примере нижеследующего скрипта?

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

$Form1 = GUICreate("Form1", 550, 146, 192, 124)
$Button1 = GUICtrlCreateButton("Опции >>", 440, 112, 105, 25, $WS_GROUP)
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $Button1 
                                ChangeGUIView() ; тут должен быть код, изменяющий GUI

                                Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func ChangeGUIView() 
EndFunc
По нажатию кнопки можно убить форму и создать новую с нужным наполнением, но не хочется, чтобы все лишний раз мигало (некрасиво). Хочу сделать так, чтобы к существующей неизменной форме добавился еще 1 кусок снизу (в дальнейшем понатыкаю туда controls)
P.S. Сори, если объяснение того, что нужно, очень пространное, но я не знаю, как это называется. В каких-то окнах я видел реализацию такой возможности, но напрочь не помню, где именно. Поэтому примеров готовых решений предоставить не могу.

Отправлено: 17:54, 26-10-2009

 

Аватара для beve

Старожил


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

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


Код: Выделить весь код
#include <GUIConstantsEx.au3>
Global $Guiwidth=550
Global $Guiheight =300

$hGUI = GUICreate("Test", $Guiwidth, $Guiheight)
$ResizeGUI_Button = GUICtrlCreateButton("Опции >>", 440, 250, 105, 25)
$ResizeGUI_Button2 = GUICtrlCreateButton("Опции <<", 440, 95, 105, 25)
GUICtrlSetState($ResizeGUI_Button2,$GUI_HIDE)

;Create test controls
$TestControl= GUICtrlCreateButton("Кнопка", 10, 150, 105, 25)
GUICtrlSetState($TestControl,$GUI_HIDE)
$TestControl2= GUICtrlCreateInput("Инпут", 10, 200, 120, 25)
GUICtrlSetState($TestControl2,$GUI_HIDE)
$TestControl3= GUICtrlCreateCombo("Комбо", 10, 250, 135, 25)
GUICtrlSetState($TestControl3,$GUI_HIDE)

WinMove($hGUI, "", Default, Default, $Guiwidth, $Guiheight-150)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $ResizeGUI_Button 
            WinMove($hGUI, "", Default, Default,$Guiwidth, $Guiheight)
            ControlHide($hGui ,"",$ResizeGUI_Button)
            ControlShow($hGui ,"",$ResizeGUI_Button2)
            GUICtrlSetState($TestControl,$GUI_Show)
            GUICtrlSetState($TestControl2,$GUI_Show)
            GUICtrlSetState($TestControl3,$GUI_Show)
        Case $ResizeGUI_Button2 
            ControlHide($hGui ,"",$ResizeGUI_Button2)
            GUICtrlSetState($TestControl,$GUI_HIDE)
            GUICtrlSetState($TestControl2,$GUI_HIDE)
            GUICtrlSetState($TestControl3,$GUI_HIDE)
            ControlShow($hGui ,"",$ResizeGUI_Button)
            WinMove($hGUI, "", Default, Default,$Guiwidth, $Guiheight-150)
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Единственное затруднение, которое может возникнуть, это угадать точное взаиморасположение кнопок опции, чтобы их местоположение визуально совпадало.

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.

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

Отправлено: 21:51, 26-10-2009 | #2



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

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


Аватара для Creat0R

Must AutoIt


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

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


Во-первых нужно не просто расширить окно, но ещё и поместить в него элементы, а для этого их сперва нужно создать (на этапе создания GUI).

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

Global $hImageList, $sOld_Opt_GRM = Opt("GUIResizeMode", $GUI_DOCKALL)
Global $iGUI_Height = 150

$Form1 = GUICreate("Form1", 550, $iGUI_Height, 192, 124)

$Button1 = GUICtrlCreateButton("Опции >>", 440, 112, 105, 25, $WS_GROUP)
_GUICtrlButton_SetImageEx($hImageList, $Button1, @SystemDir & "\rasdlg.dll", 14)

#Region Expanded controls
GUICtrlCreateButton("Some Button", 20, 240, 80)
GUICtrlCreateButton("Other Button", 120, 240, 80)
GUICtrlCreateInput("Some Input", 20, 200, 200, 20)

Opt("GUIResizeMode", $sOld_Opt_GRM)
#EndRegion Expanded controls
;

GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $Button1
            _Toggle_ExpandControls_Proc($Form1, $iGUI_Height, $iGUI_Height+150, $Button1, "Опции >>", "Опции <<")
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _Toggle_ExpandControls_Proc($hWnd,$iInitWndHeight,$iExpndHeight,$iExpndCtrlID,$sExpndText="Expand",$sCntrctText="Contract")
    Local $iHeight, $sButtonText, $aSysCaptMetrics, $aSysBordMetrics

    Local Const $SM_CYCAPTION       = 4 ;Caption (Title) heigth
    Local Const $SM_CXFIXEDFRAME    = 7 ;Window border size

    $aSysCaptMetrics = DllCall('user32.dll', 'int', 'GetSystemMetrics', 'int', $SM_CYCAPTION)
    $aSysBordMetrics = DllCall('user32.dll', 'int', 'GetSystemMetrics', 'int', $SM_CXFIXEDFRAME)

    $aGuiPos = WinGetPos($hWnd)

    If $aGuiPos[3] > $iExpndHeight + $aSysCaptMetrics[0] Then
        _GUICtrlButton_SetImageEx($hImageList, $iExpndCtrlID, @SystemDir & "\rasdlg.dll", 14)

        $iHeight = $iInitWndHeight + $aSysCaptMetrics[0] + ($aSysBordMetrics[0] * 2)
        $sButtonText = $sExpndText
    Else
        _GUICtrlButton_SetImageEx($hImageList, $iExpndCtrlID, @SystemDir & "\rasdlg.dll", 16)

        $iHeight = $iExpndHeight + $aSysCaptMetrics[0] + ($aSysBordMetrics[0] * 2)
        $sButtonText = $sCntrctText
    EndIf

    GUICtrlSetData($iExpndCtrlID, $sButtonText)
    WinMove($hWnd, "", $aGuiPos[0], $aGuiPos[1], $aGuiPos[2], $iHeight)
EndFunc

Func _GUICtrlButton_SetImageEx(ByRef $hImageList, $nCtrl, $sIconFile, $nIconID=0, $nAlign=-1)
    If $hImageList Then _GUIImageList_Destroy($hImageList)

    $hImageList = _GUIImageList_Create(16, 16, 5, 1)
    _GUIImageList_AddIcon($hImageList, $sIconFile, $nIconID)

    Local $stBIL = DllStructCreate("dword;int[4];uint")

    DllStructSetData($stBIL, 1, $hImageList)
    DllStructSetData($stBIL, 2, 1, 1)
    DllStructSetData($stBIL, 2, 1, 2)
    DllStructSetData($stBIL, 2, 1, 3)
    DllStructSetData($stBIL, 2, 1, 4)
    DllStructSetData($stBIL, 3, $nAlign)

    Return GUICtrlSendMsg($nCtrl, $BCM_SETIMAGELIST, 0, DllStructGetPtr($stBIL))
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:52, 26-10-2009 | #3


Аватара для FlatX007

Ветеран


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

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


Цитата Creat0R:
Во-первых нужно не просто расширить окно, но ещё и поместить в него элементы »
... клёво спасибо давно искал но боялся спросить

Отправлено: 22:34, 26-10-2009 | #4


Старожил


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

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


Да, действительно круто, спасибо!

Отправлено: 10:15, 31-10-2009 | #5


Аватара для FlatX007

Ветеран


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

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


Цитата Creat0R:
Во-первых нужно не просто расширить окно, но ещё и поместить в него элементы, а для этого их сперва нужно создать (на этапе создания GUI). »
А как с помощью этой функции поменять ширину окна ?

Отправлено: 09:54, 10-03-2010 | #6


Аватара для beve

Старожил


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

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


Цитата FlatX007:
А как с помощью этой функции поменять ширину окна ? »
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GUIImageList.au3>
;

Global $hImageList, $sOld_Opt_GRM = Opt("GUIResizeMode", $GUI_DOCKALL)
Global $iGUI_Width = 385
Global $iGUI_Height = 162


$Form1 = GUICreate("Form", $iGUI_Width, $iGUI_Height, 192, 186)
$Button1 = GUICtrlCreateButton(">", 370, 0, 15, 160, $WS_GROUP)

#Region Expanded controls
$ExitButton = GUICtrlCreateButton("Exit", 470, 130, 75, 25, $WS_GROUP)
GUICtrlCreateInput("Some Input", 405, 20, 121, 21)

Opt("GUIResizeMode", $sOld_Opt_GRM)
#EndRegion Expanded controls
;
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $Button1
			_Toggle_ExpandControls_Proc($Form1, $iGUI_Width, $iGUI_Width+165, $Button1, ">", "<")
		Case $GUI_EVENT_CLOSE, $ExitButton
			Exit
	EndSwitch
WEnd

Func _Toggle_ExpandControls_Proc($hWnd,$iInitWndWidth,$iExpndWidth,$iExpndCtrlID,$sExpndText="<",$sCntrctText=">")
    Local $iWidth, $sButtonText, $aSysCaptMetrics, $aSysBordMetrics

    Local Const $SM_CXFIXEDFRAME    = 7 ;Window border size

    $aSysBordMetrics = DllCall('user32.dll', 'int', 'GetSystemMetrics', 'int', $SM_CXFIXEDFRAME)

    $aGuiPos = WinGetPos($hWnd)

    If $aGuiPos[2] > $iExpndWidth Then

        $iWidth = $iInitWndWidth + ($aSysBordMetrics[0] * 2)
        $sButtonText = $sExpndText
    Else
        $iWidth= $iExpndWidth + ($aSysBordMetrics[0] * 2)
        $sButtonText = $sCntrctText
    EndIf

    GUICtrlSetData($iExpndCtrlID, $sButtonText)
    WinMove($hWnd, "", $aGuiPos[0], $aGuiPos[1], $iWidth, $aGuiPos[3])
EndFunc

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.

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

Отправлено: 21:19, 15-03-2010 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Нет выбора в "Окна и кнопки" Striker Microsoft Windows 2000/XP 2 03-11-2009 02:32
[решено] Поле для ввода IP просвечивает сквозь все вкладки GUI окна FlatX007 AutoIt 1 22-06-2009 17:32
[решено] По нажатию по ссылке для скачивания файла в браузере кракозябы SashaKl Вебмастеру 12 21-05-2009 18:47
[решено] Как сделать фон окна GUI ? sashadeg AutoIt 5 11-05-2009 16:31
[решено] Как прилепить некое окно GUI к координатам окна другой проги beve AutoIt 4 09-02-2009 13:41




 
Переход