Что нового

Резиновое окно и фиксированный регион

DyadyaGenya

Знающий
Сообщения
309
Репутация
10
Доброго времени суток. Очень давно не делал ничего на автоите, почти всё забыл. Не могу вспомнить, как сделать чтобы само окно было резиновым, в нём несколько регионов и группа регионов была с фиксированным размером. Вот примерный код окошка:
Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>

; Создание главного окна
GUICreate("Таблица элементов питания", 1000, 800, -1, -1, $WS_SIZEBOX)

; Первый регион для выбора (фиксированный размер, уменьшенная высота)
GUICtrlCreateGroup("", 10, 10, 300, 250) ; Фиксированная ширина 300, высота 250
Local $cboState = GUICtrlCreateCombo("Выберите состояние", 20, 30, 200, 25)
Local $cboType = GUICtrlCreateCombo("Выберите типоразмер", 20, 80, 200, 25)
Local $cboManufacturer = GUICtrlCreateCombo("Выберите производителя", 20, 130, 200, 25)
Local $cboModel = GUICtrlCreateCombo("Выберите модель", 20, 180, 200, 25)

GUICtrlSetState($cboType, $GUI_DISABLE)
GUICtrlSetState($cboManufacturer, $GUI_DISABLE)
GUICtrlSetState($cboModel, $GUI_DISABLE)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Третий регион для дополнительных меню (под первым регионом)
GUICtrlCreateGroup("", 10, 270, 300, 150) ; Фиксированная ширина 300, высота 150
Local $cboExtra1 = GUICtrlCreateCombo("Выберите параметр 1", 20, 30, 200, 25)
Local $cboExtra2 = GUICtrlCreateCombo("Выберите параметр 2", 20, 80, 200, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Второй регион для вывода - таблица
GUICtrlCreateGroup("", 320, 10, 670, 410) ; Увеличенная высота
Local $headerLabel1 = GUICtrlCreateListView("", 330, 30, 650, 380, $LVS_REPORT)
GUICtrlSetState($headerLabel1, $GUI_SHOW)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Четвертый регион для вывода - таблица
GUICtrlCreateGroup("", 10, 430, 980, 300) ; Скорректированные размеры
Local $headerLabel2 = GUICtrlCreateListView("", 20, 450, 960, 270, $LVS_REPORT)
GUICtrlSetState($headerLabel2, $GUI_SHOW)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Кнопки "Очистить" и "Выход" вне регионов
Local $btnClear = GUICtrlCreateButton("Очистить", 750, 740, 100, 30) ; Исправлено размещение
Local $btnExit = GUICtrlCreateButton("Выход", 870, 740, 100, 30) ; Исправлено размещение

GUISetState(@SW_SHOW)

; Основной цикл
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE, $btnExit
            Exit
        Case $btnClear
            ; Обработка нажатия кнопки "Очистить"
            GUICtrlSetData($headerLabel1, "")
            GUICtrlSetData($headerLabel2, "")
    EndSwitch
WEnd
И прикрепляю скрин, как хотелось бы
 

Вложения

  • Резиновое окно 1.jpg
    Резиновое окно 1.jpg
    96.2 КБ · Просмотры: 6

Sln

Знающий
Сообщения
49
Репутация
7
GUICtrlSetResizing

Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>

; Создание главного окна
GUICreate("Таблица элементов питания", 1000, 800, -1, -1, $WS_SIZEBOX)

; Первый регион для выбора (фиксированный размер, уменьшенная высота)
GUICtrlCreateGroup("", 10, 10, 300, 250) ; Фиксированная ширина 300, высота 250
GUICtrlSetResizing(-1, $GUI_DOCKALL)

Local $cboState = GUICtrlCreateCombo("Выберите состояние", 20, 20, 200, 25)
                  GUICtrlSetResizing(-1, $GUI_DOCKALL)
Local $cboType = GUICtrlCreateCombo("Выберите типоразмер", 20, 80, 200, 25)
                 GUICtrlSetResizing(-1, $GUI_DOCKALL)
Local $cboManufacturer = GUICtrlCreateCombo("Выберите производителя", 20, 130, 200, 25)
                         GUICtrlSetResizing(-1, $GUI_DOCKALL)
Local $cboModel = GUICtrlCreateCombo("Выберите модель", 20, 180, 200, 25)
                  GUICtrlSetResizing(-1, $GUI_DOCKALL)

GUICtrlSetState($cboType, $GUI_DISABLE)
GUICtrlSetState($cboManufacturer, $GUI_DISABLE)
GUICtrlSetState($cboModel, $GUI_DISABLE)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Третий регион для дополнительных меню (под первым регионом)
GUICtrlCreateGroup("1", 10, 270, 300, 150) ; Фиксированная ширина 300, высота 150
GUICtrlSetResizing(-1, $GUI_DOCKALL)

Local $cboExtra1 = GUICtrlCreateCombo("Выберите параметр 1", 20, 50, 200, 25)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
Local $cboExtra2 = GUICtrlCreateCombo("Выберите параметр 2", 20, 80, 200, 25)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Второй регион для вывода - таблица
GUICtrlCreateGroup("", 320, 10, 670, 410) ; Увеличенная высота
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)

Local $headerLabel1 = GUICtrlCreateListView("", 330, 30, 650, 380, $LVS_REPORT)
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
GUICtrlSetState($headerLabel1, $GUI_SHOW)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Четвертый регион для вывода - таблица
GUICtrlCreateGroup("", 10, 430, 980, 300) ; Скорректированные размеры
GUICtrlSetResizing(-1, 2+4+64+512)
Local $headerLabel2 = GUICtrlCreateListView("", 20, 450, 960, 270, $LVS_REPORT)
GUICtrlSetResizing(-1, 2+4+64+512)
GUICtrlSetState($headerLabel2, $GUI_SHOW)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Кнопки "Очистить" и "Выход" вне регионов
Local $btnClear = GUICtrlCreateButton("Очистить", 750, 740, 100, 30) ; Исправлено размещение
GUICtrlSetResizing(-1, 4+64+256+512)
Local $btnExit = GUICtrlCreateButton("Выход", 870, 740, 100, 30) ; Исправлено размещение
GUICtrlSetResizing(-1, 4+64+256+512)

GUISetState(@SW_SHOW)

; Основной цикл
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE, $btnExit
            Exit
        Case $btnClear
            ; Обработка нажатия кнопки "Очистить"
            GUICtrlSetData($headerLabel1, "")
            GUICtrlSetData($headerLabel2, "")
    EndSwitch
WEnd
 
Автор
D

DyadyaGenya

Знающий
Сообщения
309
Репутация
10
Спасибо, ещё чуток поуточняю. А если такое окно:
Код:
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>

; Создание главного окна
GUICreate("Окно с 7 регионами", 1200, 840, -1, -1, $WS_SIZEBOX)

; --- ЛЕВАЯ ЧАСТЬ ---

; Первый регион для выпадающего меню (слева сверху)
GUICtrlCreateGroup("", 10, 10, 300, 150)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
Local $cboLeftTop = GUICtrlCreateCombo("Выберите 1", 20, 30, 260, 25)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Второй регион для выпадающего меню (слева в центре)
GUICtrlCreateGroup("", 10, 170, 300, 150)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
Local $cboLeftMiddle = GUICtrlCreateCombo("Выберите 2", 20, 190, 260, 25)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Третий регион для выпадающего меню (слева снизу)
GUICtrlCreateGroup("", 10, 330, 300, 150)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
Local $cboLeftBottom = GUICtrlCreateCombo("Выберите 3", 20, 350, 260, 25)
GUICtrlSetResizing(-1, $GUI_DOCKALL)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; --- ПРАВАЯ ЧАСТЬ ---

; Первый регион с ListView (справа сверху)
GUICtrlCreateGroup("", 320, 10, 870, 150)
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
Local $lstRightTop = GUICtrlCreateListView("Колонка 1|Колонка 2|Колонка 3", 330, 30, 850, 110, $LVS_REPORT)
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
GUICtrlSetState($lstRightTop, $GUI_SHOW)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Второй регион с ListView (справа в центре)
GUICtrlCreateGroup("", 320, 170, 870, 150)
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
Local $lstRightMiddle = GUICtrlCreateListView("Колонка 1|Колонка 2|Колонка 3", 330, 190, 850, 110, $LVS_REPORT)
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
GUICtrlSetState($lstRightMiddle, $GUI_SHOW)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Третий регион с ListView (справа снизу)
GUICtrlCreateGroup("", 320, 330, 870, 150)
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
Local $lstRightBottom = GUICtrlCreateListView("Колонка 1|Колонка 2|Колонка 3", 330, 350, 850, 110, $LVS_REPORT)
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
GUICtrlSetState($lstRightBottom, $GUI_SHOW)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; --- НИЖНЯЯ ЧАСТЬ ---

; Седьмой регион с ListView (снизу на всю ширину окна)
GUICtrlCreateGroup("", 10, 490, 1180, 250)
GUICtrlSetResizing(-1, 2+4+64+512)
Local $lstBottom = GUICtrlCreateListView("Колонка 1|Колонка 2|Колонка 3", 20, 510, 1150, 210, $LVS_REPORT)
GUICtrlSetResizing(-1, 2+4+64+512)
GUICtrlSetState($lstBottom, $GUI_SHOW)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; --- КНОПКИ ---

; Кнопка "Очистить"
Local $btnClear = GUICtrlCreateButton("Очистить", 950, 760, 100, 30)
GUICtrlSetResizing(-1, 4+64+256+512)

; Кнопка "Выход"
Local $btnExit = GUICtrlCreateButton("Выход", 1070, 760, 100, 30)
GUICtrlSetResizing(-1, 4+64+256+512)

GUISetState(@SW_SHOW)

; Основной цикл обработки событий
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE, $btnExit
            Exit
        Case $btnClear
            ; Очистка всех ListView
            _GUICtrlListView_DeleteAllItems($lstRightTop)
            _GUICtrlListView_DeleteAllItems($lstRightMiddle)
            _GUICtrlListView_DeleteAllItems($lstRightBottom)
            _GUICtrlListView_DeleteAllItems($lstBottom)
    EndSwitch
WEnd
В такой ситуации в правой части окна регионы с их ListView как бы налазят друг на друга, а хотелось бы, чтоб не перекрывали. Возможно смещались ниже. Тоесть чтобы расстояние между регионами в правой части было фиксированными. Я попробовал в правой части подставить
GUICtrlSetResizing(-1, 4+64+256+512) Но тогда регионы тянутся вправо и их позиция плавает. А хотелось бы чтоб регионы тянулись во все стороны . И разве что верхний на месте
Пробовал и так: GUICtrlSetResizing(-1, 2+4+32+64), но тоже не то что нужно
 

Sln

Знающий
Сообщения
49
Репутация
7
GUICtrlSetResizing тут не поможет.

делать через:
REG_MSG_WMSZ
REG_MSG_WSZ

там считать точные координаты элементов.

иногда проще не углубляться, а переделать интерфейс на то, что умеет GUICtrlSetResizing )
 
Последнее редактирование:
Автор
D

DyadyaGenya

Знающий
Сообщения
309
Репутация
10
Даже не нашел, что это за зверь такой. Только догадываюсь, что это с реестром связано. А потому не совсем понимаю, как это можно сделать с помощью реестра
иногда проще не углубляться, а переделать интерфейс на то, что умеет GUICtrlSetResizing )
можно, конечно, через скролы сделать, чтобы по вертикали скролить, а в ширину резиновыми оставить, но не совсем то, что хотелось. Я вот сделал почти как хотелось, через GUICtrlSetResizing(-1, 2+128) в правой и нижней части, но не хватает, чтобы упиралось при минимальном размере. Тоесть, чтобы не сжималось меньше какого-то размера, например, изначального. Или чтобы само окошко можно было сделать меньше изначального, а элементы нет.
Да и честно говоря, в моем варианте хоть и меняется размер, но как-то не пропорционально. Получается много свободного места.
 

Sln

Знающий
Сообщения
49
Репутация
7
Код:
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <WindowsConstants.au3>

; Создание главного окна
Global $my_gui = GUICreate("Окно", 600, 400, -1, -1, $WS_SIZEBOX)


Global $a = GUICtrlCreateGroup('', 5,  5, 200, 100)
GUICtrlSetResizing(-1, 2+32+256+512)
Global $b = GUICtrlCreateEdit('', 220, 12, 194,  90, $ES_AUTOVSCROLL+$ES_AUTOHSCROLL)
GUICtrlSetResizing(-1, 2+32+256+512)


GUISetState(@SW_SHOW)

GUIRegisterMsg($WM_GETMINMAXINFO, 'REG_MSG_WMSZ')
GUIRegisterMsg($WM_SIZE         , 'REG_MSG_WSZ' )


; Основной цикл обработки событий
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd








; Set min and max GUI sizes
Func REG_MSG_WMSZ($hWnd, $iMsg, $wParam, $lParam)
    Local $tMinMaxInfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)

    Local $lim[4] = [0, 0, 0, 0]

    Switch $hWnd
        Case $my_gui
            $_ = WinGetPos($my_gui)
            Local $lim[4] = [600, 400, 1000, 600]

            GUICtrlSetData($a, 'Win: ' & $_[0] & '/' & $_[1] & '/' & $_[2] & '/' & $_[3])
    EndSwitch

    DllStructSetData($tMinMaxInfo,  7, $lim[0])
    DllStructSetData($tMinMaxInfo,  8, $lim[1])
    DllStructSetData($tMinMaxInfo,  9, $lim[2])
    DllStructSetData($tMinMaxInfo, 10, $lim[3])

    Return 0
EndFunc




Func REG_MSG_WSZ ($hWnd, $iMsg, $wParam, $lParam)
    Local $W = _WinAPI_LoWord($lParam)
    Local $H = _WinAPI_HiWord($lParam)

    Switch $hWnd
        Case $my_gui
            Local $_ = WinGetPos($my_gui)
            GUICtrlSetData($b, 'Win: ' & $_[0] & '/' & $_[1] & '/' & $_[2] & '/' & $_[3])

            ; pos 1/3   тут точные координаты посчитать
            GUICtrlSetPos($b, 220, $_[3]/3, $_[2]-250, $_[3]/3)
    EndSwitch

EndFunc

такое решение, если без GUICtrlSetResizing
 
Автор
D

DyadyaGenya

Знающий
Сообщения
309
Репутация
10
такое решение, если без GUICtrlSetResizing
Очень интересный вариант. С dll я раньше так и не разобрался. Но у него есть проблемы. В таком виде при любом изменении размера окна поле для ввода сразу перемещается на горизонтальную линию окна. И нельзя увеличить до беспредела размер окна. Это я правда понял как изменить. Сделал вот так:
Код:
Func REG_MSG_WMSZ($hWnd, $iMsg, $wParam, $lParam)
    Local $tMinMaxInfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)

    Local $lim[4] = [0, 0]

    Switch $hWnd
        Case $my_gui
            $_ = WinGetPos($my_gui)
            Local $lim[4] = [100, 100]

            GUICtrlSetData($a, 'Win: ' & $_[0] & '/' & $_[1])
    EndSwitch

    DllStructSetData($tMinMaxInfo,  7, $lim[0])
    DllStructSetData($tMinMaxInfo,  8, $lim[1])

    Return 0
EndFunc

Ещё бы понять, как избежать перескакивания поля Эдит в горизонталь окна. Так понимаю, что это происходит в Func REG_MSG_WSZ? Но как?
Сообщение автоматически объединено:

такое решение, если без GUICtrlSetResizing
Пробую разобраться со своим резиновым окном и этими
REG_MSG_WMSZ
REG_MSG_WSZ
Очень с трудом понимаю. На данный момент сделал такое окно:
Код:
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <WinAPI.au3>

; Минимальные размеры окна (ширина и высота)
Global Const $MIN_WIDTH = 320  ; Ширина левой части + отступы
Global Const $MIN_HEIGHT = 490 ; Высота левой части + отступы

; Фиксированная высота нижнего региона
Global Const $BOTTOM_HEIGHT = 150 ; Изначальная высота нижнего региона

; Создание главного окна
Local $hGUI = GUICreate("Окно с 7 регионами", 1200, 840, -1, -1, $WS_SIZEBOX)

; --- ЛЕВАЯ ЧАСТЬ ---

; Первый регион для выпадающего меню (слева сверху)
Local $grpLeftTop = GUICtrlCreateGroup("", 10, 10, 300, 150)
Local $cboLeftTop = GUICtrlCreateCombo("Выберите 1", 20, 30, 260, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Второй регион для выпадающего меню (слева в центре)
Local $grpLeftMiddle = GUICtrlCreateGroup("", 10, 170, 300, 150)
Local $cboLeftMiddle = GUICtrlCreateCombo("Выберите 2", 20, 190, 260, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Третий регион для выпадающего меню (слева снизу)
Local $grpLeftBottom = GUICtrlCreateGroup("", 10, 330, 300, 150)
Local $cboLeftBottom = GUICtrlCreateCombo("Выберите 3", 20, 350, 260, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; --- ПРАВАЯ ЧАСТЬ ---

; Первый регион с ListView (справа сверху)
Local $grpRightTop = GUICtrlCreateGroup("", 320, 10, 870, 150)
Local $lstRightTop = GUICtrlCreateListView("Колонка 1|Колонка 2|Колонка 3", 330, 30, 850, 110, $LVS_REPORT)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Второй регион с ListView (справа в центре)
Local $grpRightMiddle = GUICtrlCreateGroup("", 320, 170, 870, 150)
Local $lstRightMiddle = GUICtrlCreateListView("Колонка 1|Колонка 2|Колонка 3", 330, 190, 850, 110, $LVS_REPORT)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; Третий регион с ListView (справа снизу)
Local $grpRightBottom = GUICtrlCreateGroup("", 320, 330, 870, 150)
Local $lstRightBottom = GUICtrlCreateListView("Колонка 1|Колонка 2|Колонка 3", 330, 350, 850, 110, $LVS_REPORT)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; --- НИЖНЯЯ ЧАСТЬ ---

; Седьмой регион с ListView (снизу на всю ширину окна)
Local $grpBottom = GUICtrlCreateGroup("", 10, 490, 1180, $BOTTOM_HEIGHT)
Local $lstBottom = GUICtrlCreateListView("Колонка 1|Колонка 2|Колонка 3", 20, 510, 1150, $BOTTOM_HEIGHT - 40, $LVS_REPORT)
GUICtrlCreateGroup("", -99, -99, 1, 1)

; --- КНОПКИ ---

; Кнопка "Очистить"
Local $btnClear = GUICtrlCreateButton("Очистить", 950, 760, 100, 30)

; Кнопка "Выход"
Local $btnExit = GUICtrlCreateButton("Выход", 1070, 760, 100, 30)

; Регистрируем обработчики сообщений
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_SIZING, "WM_SIZING")

GUISetState(@SW_SHOW)

; Основной цикл обработки событий
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE, $btnExit
            Exit
        Case $btnClear
            ; Очистка всех ListView
            _GUICtrlListView_DeleteAllItems($lstRightTop)
            _GUICtrlListView_DeleteAllItems($lstRightMiddle)
            _GUICtrlListView_DeleteAllItems($lstRightBottom)
            _GUICtrlListView_DeleteAllItems($lstBottom)
    EndSwitch
WEnd

; Обработчик сообщения WM_SIZE
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
    ; Получаем новые размеры окна
    Local $iWidth = _WinAPI_LoWord($lParam)
    Local $iHeight = _WinAPI_HiWord($lParam)

    ; Убедимся, что окно не меньше минимальных размеров
    If $iWidth < $MIN_WIDTH Then $iWidth = $MIN_WIDTH
    If $iHeight < $MIN_HEIGHT Then $iHeight = $MIN_HEIGHT

    ; Обновляем размеры и положение элементов управления
    _UpdateControls($iWidth, $iHeight)

    Return 0
EndFunc

; Обработчик сообщения WM_SIZING
Func WM_SIZING($hWnd, $Msg, $wParam, $lParam)
    ; Получаем новые размеры окна
    Local $tRect = DllStructCreate("int;int;int;int", $lParam)
    Local $iWidth = DllStructGetData($tRect, 3) - DllStructGetData($tRect, 1)
    Local $iHeight = DllStructGetData($tRect, 4) - DllStructGetData($tRect, 2)

    ; Убедимся, что окно не меньше минимальных размеров
    If $iWidth < $MIN_WIDTH Then
        DllStructSetData($tRect, 3, DllStructGetData($tRect, 1) + $MIN_WIDTH)
    EndIf
    If $iHeight < $MIN_HEIGHT Then
        DllStructSetData($tRect, 4, DllStructGetData($tRect, 2) + $MIN_HEIGHT)
    EndIf

    Return 0
EndFunc

; Функция для обновления размеров и положения элементов управления
Func _UpdateControls($iWidth, $iHeight)
    ; --- ЛЕВАЯ ЧАСТЬ ---
    ; Левые регионы остаются фиксированными
    GUICtrlSetPos($grpLeftTop, 10, 10, 300, 150)
    GUICtrlSetPos($cboLeftTop, 20, 30, 260, 25)

    GUICtrlSetPos($grpLeftMiddle, 10, 170, 300, 150)
    GUICtrlSetPos($cboLeftMiddle, 20, 190, 260, 25)

    GUICtrlSetPos($grpLeftBottom, 10, 330, 300, 150)
    GUICtrlSetPos($cboLeftBottom, 20, 350, 260, 25)

    ; --- ПРАВАЯ ЧАСТЬ ---
    ; Правые регионы растягиваются по ширине и высоте
    Local $iRightWidth = $iWidth - 330 ; Ширина правой части
    Local $iRightHeight = 150          ; Высота правых регионов

    GUICtrlSetPos($grpRightTop, 320, 10, $iRightWidth, $iRightHeight)
    GUICtrlSetPos($lstRightTop, 330, 30, $iRightWidth - 20, $iRightHeight - 40)

    GUICtrlSetPos($grpRightMiddle, 320, 170, $iRightWidth, $iRightHeight)
    GUICtrlSetPos($lstRightMiddle, 330, 190, $iRightWidth - 20, $iRightHeight - 40)

    GUICtrlSetPos($grpRightBottom, 320, 330, $iRightWidth, $iRightHeight)
    GUICtrlSetPos($lstRightBottom, 330, 350, $iRightWidth - 20, $iRightHeight - 40)

    ; --- НИЖНЯЯ ЧАСТЬ ---
    ; Нижний регион привязан к левым регионам и может растягиваться
    Local $iBottomY = 490 ; Начальная позиция нижнего региона по Y
    Local $iBottomHeight = $iHeight - $iBottomY - 10 ; Высота нижнего региона

    ; Убедимся, что нижний регион не меньше минимальной высоты
    If $iBottomHeight < $BOTTOM_HEIGHT Then
        $iBottomHeight = $BOTTOM_HEIGHT
    EndIf

    GUICtrlSetPos($grpBottom, 10, $iBottomY, $iWidth - 20, $iBottomHeight)
    GUICtrlSetPos($lstBottom, 20, $iBottomY + 20, $iWidth - 40, $iBottomHeight - 40)

    ; --- КНОПКИ ---
    ; Кнопки привязаны к нижнему региону
    Local $iButtonY = $iBottomY + $iBottomHeight - 70 ; Позиция кнопок по Y
    GUICtrlSetPos($btnClear, $iWidth - 250, $iButtonY, 100, 30)
    GUICtrlSetPos($btnExit, $iWidth - 130, $iButtonY, 100, 30)
EndFunc
Но в нём проблема с кнопками, они скрыты за нижним регионом и появляются только когда окно уменьшилось и нижний регион полнстьб скрылся. Не подскажите, как исправить?
 
Последнее редактирование:
Верх