1

Тема: AHK: (GUI) Как сделать размер окна изменяемым

Gui, Add, Edit, x12 y10 w230 h360 , Edit
Gui, Add, Edit, x252 y10 w220 h360 , Edit
Gui, Show, x127 y87 h379 w479, New
Return

GuiClose:
ExitApp

Как сделать так, чтобы пользователь мог изменять размер окна при наведении на его края и зажатии левой кнопки, причем так, что бы размеры полей Edit изменялись соответственно, а так же присутствовал некоторый размер по умолчанию, меньше которого окно уменьшиться бы не могло?

2

Re: AHK: (GUI) Как сделать размер окна изменяемым

Для начала

GUI, +Resize

Затем потребуется отлавливать сообщения или периодически проверять размер окна. Во сколько раз изменился размер окна, во столько раз изменять размеры элементов управления.

а так же присутствовал некоторый размер по умолчанию, меньше которого окно уменьшиться бы не могло

GUI, MinSize

3

Re: AHK: (GUI) Как сделать размер окна изменяемым

ypppu пишет:

Затем потребуется отлавливать сообщения или периодически проверять размер окна.

А почему бы не использовать встроенные метку GuiSize и переменные A_GuiWidth и A_GuiHeight?

Gui, +Resize +MinSize479x379
Gui, Add, Edit, x12 y10 w230 h360 , Edit
Gui, Add, Edit, x252 y10 w220 h360 , Edit
Gui, Show, x127 y87 h379 w479, New

wRatio1 := 230/(230 + 10 + 220)   ; 10 — расстояние между полями Edit
Return

GuiClose:
ExitApp

GuiSize:
   wEdit1 := (A_GuiWidth - (479 - (230 + 10 + 220)))*wRatio1
   xEdit2 := 12 + wEdit1 + 10
   wEdit2 := A_GuiWidth - (479 - (230 + 220)) - wEdit1
   hEdit := A_GuiHeight - (379 - 360)
   
   GuiControl, Move, Edit1, w%wEdit1%
   GuiControl, Move, Edit1, h%hEdit%
   GuiControl, Move, Edit2, x%xEdit2%
   GuiControl, Move, Edit2, w%wEdit2%
   GuiControl, Move, Edit2, h%hEdit%
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: (GUI) Как сделать размер окна изменяемым

О, спасибо, про GuiSize не знал. И вот еще что любопытно: возможно ли в строке Gui, Add задать размеры и координаты выражением или ссылкой на переменную?

5

Re: AHK: (GUI) Как сделать размер окна изменяемым

Чтоб поменьше мельканий, можно так:

Gui, +Resize +MinSize479x379
Gui, Add, Edit, x12 y10 w230 h360 , Edit
Gui, Add, Edit, x252 y10 w220 h360 , Edit
Gui, Show, x127 y87 h379 w479, New

wRatio1 := 230/(230 + 10 + 220)   ; 10 — расстояние между полями Edit
Return

GuiClose:
ExitApp

GuiSize:
   wEdit1 := (A_GuiWidth - (479 - (230 + 10 + 220)))*wRatio1
   xEdit2 := 12 + wEdit1 + 10
   wEdit2 := A_GuiWidth - (479 - (230 + 220)) - wEdit1
   hEdit := A_GuiHeight - (379 - 360)
   
   GuiControl, Move, Edit1, w%wEdit1% h%hEdit%
   GuiControl, Move, Edit2, x%xEdit2% w%wEdit2% h%hEdit%
   Return

6

Re: AHK: (GUI) Как сделать размер окна изменяемым

NektoN95 пишет:

О, спасибо, про GuiSize не знал. И вот еще что любопытно: возможно ли в строке Gui, Add задать размеры и координаты выражением или ссылкой на переменную?

Можно, хоть частью объекта:

Controls := {["Sample1", "x12 y10 w230 h360"]: "Edit"
            ,["Sample2", "x252 y10 w220 h360"]: "Edit"
            ,["Exit", "gGuiClose x210 y345 w80 h30"]: "Button"}
Gui, +Resize +MinSize479x379
for k,v in Controls
   Gui, Add, % v, % k[2], % k[1]
Gui, Show, x127 y87 h379 w479, New

wRatio1 := 230/(230 + 10 + 220)   ; 10 — расстояние между полями Edit
Return

GuiClose:
ExitApp

GuiSize:
   wEdit1 := (A_GuiWidth - (479 - (230 + 10 + 220)))*wRatio1
   xEdit2 := 12 + wEdit1 + 10
   wEdit2 := A_GuiWidth - (479 - (230 + 220)) - wEdit1
   hEdit := A_GuiHeight - (410 - 360)
   xButton1 := wEdit2 - 10, yButton1 := hEdit + 15
   
   GuiControl, Move, Edit1, w%wEdit1% h%hEdit%
   GuiControl, Move, Edit2, x%xEdit2% w%wEdit2% h%hEdit%
   GuiControl, Move, Button1, x%xButton1% y%yButton1%
   Return