Что нового

[Элементы GUI] При изменении размера окна двигаются элементы GUI.

Rimm

Новичок
Сообщения
30
Репутация
0
Создал окно GUI, добавил стиль для изменения размеров окна. Все бы хорошо, только когда сжимаю окно, кнопки и другие элементы начинают накладываться друг на друга и наоборот, когда растягиваю окна, элементы "расползаются" друг от друга. Подскажите, как зафиксировать местоположение элемента в окне и как сделать, чтобы размер окна можно было изменять только по вертикали, а по горизонтали он был фиксированным? Заранее всем спасибо!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Rimm,
В справке GUICtrlSetResizing().
 

Yakov_255

Новичок
Сообщения
5
Репутация
0
Подскажите, перепробовал все значения и всёравно элементы раползаются!

какое значение надо ставить?

и еще когда надо объявлять? до или после @show?
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Yakov_255
Для начала можно установить поведение для всех элементов. Например часто использую 802, чтобы все элементы не перемещались и не меняли размер.
Код:
Opt("GUIResizeMode", 802) ; где 802 - сумма стилей

А далее GUICtrlSetResizing для особых элементов. В справке пример есть, как вы пробуете не понятно.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
см. тему:
http://autoit-script.ru/index.php/topic,4531.0.html


Добавлено:
Сообщение автоматически объединено:

и :
http://autoit-script.ru/index.php/topic,568.0.html


Добавлено:
Сообщение автоматически объединено:

Rimm [?]
чтобы размер окна можно было изменять только по вертикали, а по горизонтали он был фиксированным?

пример справки :

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $k = 0
$Gui = GUICreate("WM_GETMINMAXINFO", 390, 140, -1, -1, $WS_OVERLAPPEDWINDOW)
GUICtrlCreateLabel('Функция WM_GETMINMAXINFO выполняется при перемещении окна, сворачивании и изменении размеров. Позволяет установить пределы увеличения и уменьшения окна, как по горизонтали, так и по вертикали индивидуально. А также позицию и размеры развёрнутого состояния. Установочные параметры можно игнорировать указав только необходимые параметры.', 5, 5, 360, 130)

GUISetState()

GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO")

Do
Until GUIGetMsg() = -3

Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $wParam
    $k += 1
    WinSetTitle($Gui, '', 'Попытка ' & $k & ' раз')
    If $hWnd = $Gui Then
        Local $tMINMAXINFO = DllStructCreate("int;int;" & _
            "int MaxSizeX; int MaxSizeY;" & _
            "int MaxPositionX;int MaxPositionY;" & _
            "int MinTrackSizeX; int MinTrackSizeY;" & _
            "int MaxTrackSizeX; int MaxTrackSizeY", _
            $lParam)
        DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 360) ; минимальные размеры окна
        DllStructSetData($tMINMAXINFO, "MinTrackSizeY", 130)
        DllStructSetData($tMINMAXINFO, "MaxTrackSizeX", 460) ; максимальные размеры окна
        DllStructSetData($tMINMAXINFO, "MaxTrackSizeY", 180)
        DllStructSetData($tMINMAXINFO, "MaxSizeX", 400) ; размеры развёрнутого состояния ( просто удали строку, чтоб игнорировать критерий)
        DllStructSetData($tMINMAXINFO, "MaxSizeY", 180)
        DllStructSetData($tMINMAXINFO, "MaxPositionX", 400) ; позиция в развёрнутом состоянии
        DllStructSetData($tMINMAXINFO, "MaxPositionY", 450)
    EndIf
    Return $GUI_RUNDEFMSG
EndFunc
 

Yakov_255

Новичок
Сообщения
5
Репутация
0
Спасибо всем сейчас все перебробую :smile:

Такс...
CTRL в названии функции походу значит что это для компонентов...
Код:
GUICtrlSetResizing($hMainForm,$GUI_DOCKALL)
Так не пашет

Код:
Opt("GUIResizeMode", 802) ; где 802 - сумма стилей

Это работает!!!

Спасибо всем :smile:
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Yakov_255 сказал(а):
$hMainForm это GUI? Функция для элементов интерфейса, не для GUI. Ставится после элемента, а не до.
 
Верх