Что нового

GUICtrlSetResizingEx - Изменение размера для внешних элементов

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,662
Репутация
2,461
Версия AutoIt
3.3.12.0
Версия
1.3
Описание: Расширенная функция GUICtrlSetResizing, с возможностью задавать изменение размера для внешних элементов (созданных с _GUICtrl*_Create).

Код/Пример:
Код:
#include <GUIRichEdit.au3>
#include <GUIComboBox.au3>
#include 'GUICtrlSetResizingEx.au3'

$hForm = GUICreate('GUICtrlSetResizingEx Example', 380, 330, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME, $WS_OVERLAPPEDWINDOW, $WS_TILEDWINDOW, $WS_TABSTOP), $WS_EX_COMPOSITED)

$hRichEdit = _GUICtrlRichEdit_Create($hForm, 'Edit1', 5, 5, 250, 250)
;~ $hRichEdit = GUICtrlCreateEdit('Edit1', 5, 5, 250, 250)
_GUICtrlSetResizingEx($hRichEdit, BitOR($GUI_DOCKLEFT, $GUI_DOCKRIGHT, $GUI_DOCKTOP))

$hCombo = _GUICtrlComboBox_Create($hForm, 'Item', 5, 280, 250, 50, $CBS_DROPDOWNLIST)
_GUICtrlComboBox_SetCurSel($hCombo, 0)
_GUICtrlSetResizingEx($hCombo, BitOR($GUI_DOCKLEFT, $GUI_DOCKRIGHT, $GUI_DOCKBOTTOM))

GUICtrlCreateButton('Native Button', 270, 5, 100, 25)
_GUICtrlSetResizingEx(-1, BitOR($GUI_DOCKRIGHT, $GUI_DOCKTOP, $GUI_DOCKSIZE))

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            GUIDelete($hForm)
            Exit
    EndSwitch
WEnd

История версий:
1.3
* Убран параметр $hGUI (см. примеры).
* Теперь лучше работает с множеством GUI.

1.2
* Исправлена проблема с быстрым изменением размера окна (окно развёрнуто/восстановлено).

1.1
* Добавлена/обновлена документация.
* Добавлены возвращаемые значения.

1.0
* Первая публичная версия.

(основная идея взята с сообщения от inververs)
 
Автор
G.Sandler (CreatoR)
Источник
Ссылка на источник

Вложения

  • GUICtrlSetResizingEx_1.3.zip
    2.7 КБ · Просмотры: 6
Последнее редактирование:
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,662
Репутация
2,461

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
А при максимизации и восстановлении размера ?

Это было бы слишком простым решением, если-б можно было реализовать корректно.
Похоже при быстром изменении размера (максимизации) это не реализуется.

Да и при быстром ручном изменении размера и нескольких элементах Resize не всегда корректен.
Это можно видеть на примере :
Код:
#include <GUIRichEdit.au3>
#include 'GUICtrlSetResizingEx.au3'

$hForm = GUICreate('GUICtrlSetResizingEx Example', 770, 515, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME, $WS_OVERLAPPEDWINDOW, $WS_TILEDWINDOW, $WS_TABSTOP), $WS_EX_COMPOSITED )

$hRichEdit = _GUICtrlRichEdit_Create($hForm, 'Edit1', 5, 5, 250, 250)
; $hRichEdit = GUICtrlCreateEdit('Edit1', 5, 5, 250, 250)
_GUICtrlSetResizingEx($hForm, $hRichEdit, $GUI_DOCKLEFT+$GUI_DOCKSIZE+$GUI_DOCKTOP)
$hRichEdit=_GUICtrlRichEdit_Create($hForm, 'Edit1', 260, 5, 250, 250)
;$hRichEdit = GUICtrlCreateEdit('Edit1', 260, 5, 250, 250)
_GUICtrlSetResizingEx($hForm, $hRichEdit, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKHEIGHT)
;$hRichEdit = GUICtrlCreateEdit('Edit1', 515, 5, 250, 250)
$hRichEdit=_GUICtrlRichEdit_Create($hForm, 'Edit1', 515, 5, 250, 250)
_GUICtrlSetResizingEx($hForm, $hRichEdit, $GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKSIZE)

$hRichEdit = _GUICtrlRichEdit_Create($hForm, 'Edit1', 5, 260, 250, 250)
; $hRichEdit = GUICtrlCreateEdit('Edit1', 5, 260, 250, 250)
_GUICtrlSetResizingEx($hForm, $hRichEdit, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM+$GUI_DOCKWIDTH)
;$hRichEdit = GUICtrlCreateEdit('Edit1', 260, 260, 250, 250)
$hRichEdit = _GUICtrlRichEdit_Create($hForm, 'Edit1', 260, 260, 250, 250)
_GUICtrlSetResizingEx($hForm, $hRichEdit, $GUI_DOCKBORDERs)
;$hRichEdit = GUICtrlCreateEdit('Edit1', 515, 260, 250, 250)
$hRichEdit = _GUICtrlRichEdit_Create($hForm, 'Edit1', 515, 260, 250, 250)
_GUICtrlSetResizingEx($hForm, $hRichEdit, $GUI_DOCKRIGHT+$GUI_DOCKBOTTOM+$GUI_DOCKTOP+$GUI_DOCKWIDTH)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            GUIDelete($hForm)
            Exit
    EndSwitch
WEnd

если установить цвет для Label в UDF
Код:
;GUICtrlSetBkColor($iLabel, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetBkColor($iLabel, 0x0080FF)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Многие проблемы можно решить если WM_SIZE добавить AdlibRegister на 5 миллисекунд на функцию ресайза.
примерно так: из одного проекта
Код:
Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam)
	__gui_wm_size()
	AdlibRegister('__gui_wm_size', 5)
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE
Func __gui_wm_size() ;Нужно так как если менять размер быстро то размеры могут не поменятся
	AdlibUnRegister('__gui_wm_size')
;Тут ресайз

EndFunc
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,662
Репутация
2,461
Обновление:

1.2
* Исправлена проблема с быстрым изменением размера окна (окно развёрнуто/восстановлено).
* Добавлен дополнительный пример.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,662
Репутация
2,461
Верх