반응형
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ControlSend
- IF (식)
- autohotkey
- MouseClick
- API
- StringGetPos
- 배열
- 함수
- Var:=식
- 식
- IfWinExist
- Threads
- DetectHiddenWindows
- EnvSet
- if(식)
- ControlGetText
- Menu
- EnvSub
- Blocks
- SetControlDelay
- SetTitleMatchMode
- SetEnv
- 식의 설명
- EnvDiv
- IfInString
- if
- SetKeyDelay
- SetMouseDelay
- EnvAdd
- EnvMult
Archives
- Today
- Total
ㄴrㅎnㅂrㄹrㄱi
Control Anchoring - for resizing windows (창크기에 따라 같이 변하는 오브젝트) 본문
반응형
http://www.autohotkey.com/forum/viewtopic.php?t=4348
복잡해 보이겠지만 생각보단 간편합니다.
This function defines how controls should be automatically positioned relatively to the new dimensions of a GUI when resized.
Instructions are in the script. The example is also helpful for first time users.
Download Function
Instructions are in the script. The example is also helpful for first time users.
Download Function
아래 함수를 보시면 아시겠지만
/* Function: Anchor Defines how controls should be automatically positioned relative to the new dimensions of a GUI when resized. Parameters: cl - a control HWND, associated variable name or ClassNN to operate on a - (optional) one or more of the anchors: 'x', 'y', 'w' (width) and 'h' (height), optionally followed by a relative factor, e.g. "x h0.5" r - (optional) true to redraw controls, recommended for GroupBox and Button types Examples: > "xy" ; bounds a control to the bottom-left edge of the window > "w0.5" ; any change in the width of the window will resize the width of the control on a 2:1 ratio > "h" ; similar to above but directrly proportional to height Remarks: Anchor must always be called within a GuiSize label where AutoHotkey assigns a real value to A_Gui. The only exception is when the second and third parameters are omitted to reset the stored positions for a control. For a complete example see anchor-example.ahk. License: - Version 4.56 by Titan <http://www.autohotkey.net/~Titan/#anchor> - GNU General Public License 3.0 or higher <http://www.gnu.org/licenses/gpl-3.0.txt> */ Anchor(i, a = "", r = false) { static c, cs = 12, cx = 255, cl = 0, g, gs = 8, z = 0, k = 0xffff, gx = 1 If z = 0 VarSetCapacity(g, gs * 99, 0), VarSetCapacity(c, cs * cx, 0), z := true If a = { StringLeft, gn, i, 2 If gn contains : { StringTrimRight, gn, gn, 1 t = 2 } StringTrimLeft, i, i, t ? t : 3 If gn is not digit gn := gx } Else gn := A_Gui If i is not xdigit { GuiControlGet, t, Hwnd, %i% If ErrorLevel = 0 i := t Else ControlGet, i, Hwnd, , %i% } gb := (gn - 1) * gs Loop, %cx% If (NumGet(c, cb := cs * (A_Index - 1)) == i) { If a = { cf = 1 Break } Else gx := A_Gui d := NumGet(g, gb), gw := A_GuiWidth - (d >> 16 & k), gh := A_GuiHeight - (d & k), as := 1 , dx := NumGet(c, cb + 4, "Short"), dy := NumGet(c, cb + 6, "Short") , dw := NumGet(c, cb + 8, "Short"), dh := NumGet(c, cb + 10, "Short") Loop, Parse, a, xywh If A_Index > 1 av := SubStr(a, as, 1), as += 1 + StrLen(A_LoopField) , d%av% += (InStr("yh", av) ? gh : gw) * (A_LoopField + 0 ? A_LoopField : 1) DllCall("SetWindowPos", "UInt", i, "Int", 0, "Int", dx, "Int", dy, "Int", dw, "Int", dh, "Int", 4) If r != 0 DllCall("RedrawWindow", "UInt", i, "UInt", 0, "UInt", 0, "UInt", 0x0101) ; RDW_UPDATENOW | RDW_INVALIDATE Return } If cf != 1 cb := cl, cl += cs If (!NumGet(g, gb)) { Gui, %gn%:+LastFound WinGetPos, , , , gh VarSetCapacity(pwi, 68, 0), DllCall("GetWindowInfo", "UInt", WinExist(), "UInt", &pwi) , NumPut(((bx := NumGet(pwi, 48)) << 16 | by := gh - A_GuiHeight - NumGet(pwi, 52)), g, gb + 4) , NumPut(A_GuiWidth << 16 | A_GuiHeight, g, gb) } Else d := NumGet(g, gb + 4), bx := d >> 16, by := d & k ControlGetPos, dx, dy, dw, dh, , ahk_id %i% If cf = 1 { Gui, %gn%:+LastFound WinGetPos, , , gw, gh d := NumGet(g, gb), dw -= gw - bx * 2 - (d >> 16), dh -= gh - by - bx - (d & k) } NumPut(i, c, cb), NumPut(dx - bx, c, cb + 4, "Short"), NumPut(dy - by, c, cb + 6, "Short") , NumPut(dw, c, cb + 8, "Short"), NumPut(dh, c, cb + 10, "Short") Return, true }
반응형
'AUTOHOTKEY > 스크립트' 카테고리의 다른 글
[라이브러리] COM Standard Library (0) | 2009.01.12 |
---|---|
Credits GUI (창에 메세지가 스크롤 되게 합니다. 영화 엔딩 장면) (0) | 2009.01.04 |
X-GUI : Skinnable GUI (창에 스킨을 입히자 윈엠 같은 스킨만들기) (0) | 2009.01.03 |
BASS Library - extreme AHK sound power! (0) | 2008.12.24 |
다양한 다이얼로그 창 (A handy dialogue technique!) (0) | 2008.12.21 |
Comments