Anchor(ctrl, a, draw = false) { ; v3.3 by Titan static pos GuiControlGet, e, , %ctrl% If !A_Gui or ErrorLevel Return sig = `n%A_Gui%:%ctrl%= c = xwyh s = / If !InStr(pos, sig) { Loop, Parse, c If InStr(a, A_LoopField) { StringTrimLeft, e, a, InStr(a, A_LoopField) Loop, Parse, e If A_LoopField is not alpha b = %b%%A_LoopField% Else Break If !b b = 1 b%A_LoopField% := b b := "" } Else b%A_LoopField% = 1 GuiControlGet, p, Pos, %ctrl% pos := pos . sig . px - A_GuiWidth * bx . s . bx . s . pw - A_GuiWidth * bw . s . bw . s . py - A_GuiHeight * by . s . by . s . ph - A_GuiHeight * bh . s . bh . s } StringTrimLeft, p, pos, InStr(pos, sig) - 1 + StrLen(sig) StringSplit, p, p, %s% Loop, Parse, c If InStr(a, A_LoopField) { If A_Index < 3 s := A_GuiWidth Else s := A_GuiHeight b := A_Index * 2 e := b - 1 m := m . A_LoopField . p%e% + s * p%b% } If draw d = Draw GuiControl, Move%d%, %ctrl%, %m% }