1 (изменено: BlackCat, 2021-03-10 14:14:43)

Тема: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

Написал тестовый вариант Gui, размер которого можно изменять с помощью Slider.
Это нужно для того, если использовать Gui, например c +ToolWindow -Caption

ProgName := "TEST"


RegRead GuiW, HKCU, % "Software\" ProgName, Gui-W
	If ErrorLevel {
		GuiW := "400"
		RegWrite REG_SZ, HKCU, % "Software\" ProgName, Gui-W, % GuiW
		}
RegRead GuiH, HKCU, % "Software\" ProgName, Gui-H
	If ErrorLevel {
		GuiH := "100"
		RegWrite REG_SZ, HKCU, % "Software\" ProgName, Gui-H, % GuiH
		}
		
		
Gui 1: Add, Text, % "w" GuiW " h" GuiH " gGui2 Center", Открыть настройки
Gui 1: Show, % "w" GuiW " h" GuiH, % ProgName
Return

Gui2:
Gui 2: Add, Slider, x0 w400 Range400-1000 vGuiW gSetGuiW TickInterval, % GuiW
Gui 2: Add, Slider, x0 w400 Range100-300 vGuiH gSetGuiH TickInterval, % GuiH
Gui 2: Show
Return

SetGuiW:
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Gui-W, % GuiW
Gui 1: Hide
Gui 1: Show, % "w" GuiW " h" GuiH " xCenter", % ProgName
Return

SetGuiH:
RegWrite REG_SZ, HKCU, % "Software\" ProgName, Gui-H, % GuiH
Gui 1: Hide
Gui 1: Show, % "w" GuiW " h" GuiH " yCenter", % ProgName
Return

Возможно ли сделать так, чтобы под каждым Slider отображались цифры размера Gui в реальном времени?

2

Re: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

Добавить опцию '+ToolTIp' в контрол 'Slider'.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

__Михаил__ Это я знаю, но не очень нравится.
Может есть другие варианты?

4

Re: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

Перехват ЛКМ и вывод через свою метку.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

5

Re: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

Примерно так вышло, вырезал лишнее:

ProgName := "TEST"

GuiW := 400
GuiH := 100

Gui 1: Add, Text, % "cBlue w" GuiW " h" GuiH " gGui2 Center", Открыть настройки
Gui 1: Show, % "w" GuiW " h" GuiH, % ProgName
Return

Gui2:
Hotkey, % "~vk1" , Info, On UseErrorLevel
Gui 2: +AlwaysOnTop
Try
{
 Gui 2: Add, Slider, x0 w400 Range400-1000 vGuiW gSetGuiW TickInterval, % GuiW
 Gui 2: Add, Slider, x0 w400 Range100-300  vGuiH gSetGuiH TickInterval, % GuiH	; +ToolTIp
}
Gui 2: Show
Return


2GuiEscape:
2GuiClose:
Hotkey, % "~vk1" , Info, Off UseErrorLevel
Gui 2: Destroy
Return



SetGuiW:
SetTimer, Info, -1
Gui 1: Hide
Gui 1: Show, % "NA w" GuiW " h" GuiH " xCenter", % ProgName
Return


SetGuiH:
SetTimer, Info, -1
Gui 1: Hide
Gui 1: Show, % "NA w" GuiW " h" GuiH " yCenter", % ProgName
Return



Info:
If GetKeyState("vk1","p")
{
 MouseGetPos,x,y,, control
 If (control ~= "msctls_trackbar")
 {
  Gui 1: Submit, NoHide
  ToolTIp, % GuiW ", " GuiH,x,y+20
  SetTimer, Info, -1
 }
}
Else
 ToolTIp
Return
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

6 (изменено: BlackCat, 2021-03-10 22:17:39)

Re: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

__Михаил__
Прикольно получилось!
Огромное спасибо за помощь!
Запись в реестр я опять добавлю - это сохранение настроек для следующего запуска.

7

Re: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

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

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

8

Re: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

__Михаил__
Это я заметил.
Хотелось бы в реалтайм сделать, но не знаю как.

9

Re: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

У меня есть код, но пока не вышло его нормально прицепить к ToolTip.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

10 (изменено: __Михаил__, 2021-03-11 01:57:25)

Re: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

ProgName := "TEST"

GuiW := 400
GuiH := 100

Gui 1: Add, Text, % "cBlue w" GuiW " h" GuiH " gGui2 Center", Открыть настройки
Gui 1: Show, % "w" GuiW " h" GuiH, % ProgName
Return

Gui2:
Hotkey, % "~vk1" , Info, On UseErrorLevel
Gui 2: +AlwaysOnTop +hwndhGui
Try
{
 Gui 2: Add, Slider, x0 w400 Range400-1000 vGuiW gSetGuiW TickInterval60, % GuiW
 Gui 2: Add, Slider, x0 w400 Range100-300  vGuiH gSetGuiH TickInterval50, % GuiH
}
Gui 2: Show
Return


2GuiEscape:
2GuiClose:
Hotkey, % "~vk1" , Info, Off UseErrorLevel
Gui 2: Destroy
Return



SetGuiW:
SetTimer, Info, -1
Gui 1: Hide
Gui 1: Show, % "NA w" GuiW " h" GuiH " xCenter", % ProgName
Return


SetGuiH:
SetTimer, Info, -1
Gui 1: Hide
Gui 1: Show, % "NA w" GuiW " h" GuiH " yCenter", % ProgName
Return



Info:
MouseGetPos,,,, Control
If GetKeyState("vk1","p")
{
 MouseGetPos,,Y,hG	;, Control
 If (hG = hGui)
 {
  I := GetInfo(Control)
  Gui 1: Submit, NoHide
  ToolTip, % I,,Y+20
  SetTimer, Info, -1
 }
}
Else
 ToolTip
Return


GetInfo(Control){
 WinGetClass, T, A
 ControlGet, Hwnd, Hwnd,, % Control , % "ahk_class " T
 SendMessage, 0x0400,,,, ahk_id %Hwnd%  ;  TBM_GETPOS
 Return ErrorLevel
}
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

11

Re: AHK: Динамичный Gui - изменение размера Gui с помощью Slider

__Михаил__
Теперь классно все работает!
Очень признателен за помощь!
Спасибо!