AutoHotKey V1.1 窗体(GUI)布局控制
正常情况下如果没有使用X+n等方式控制的话,则AutoHotKey V1.1的控件是【从上到下】依次向下排列的
比如下面的这个加法的Demo窗体布局
#Requires AutoHotkey v1
Gui, Add, Edit,w300 vNum1
Gui, Add, Edit,w300 vNum2
Gui, Add, Button, gGenerateSum, 计算结果
Gui, Add, Text,w300 vResult
Gui, Show,, Demo加法
return
GenerateSum:
Gui, Submit, NoHide
Sum := Num1 + Num2
showResult := "加和结果:" . Sum
GuiControl,, Result, %showResult%
MsgBox, %showResult%
return
GuiClose:
ExitApp
如果想使输入框各140,分两列显示呢,如何去设置呢?
如果只修改下面的部分的话,刚结果是这样的
Gui, Add, Edit,w140 vNum1
Gui, Add, Edit,w140 x+10 vNum2
这样显然不是想要的效果,那么如何才能达到使计算结果左对齐呢,需要使用xm,xm控制将设置的控件与整个窗体的最左边对齐,因此如上修改上述两行的话,还需要修改这一行,在计算结果这个Button控件上需要加上xm的限定,加上之后我们就可以得到想要的效果。
Gui, Add, Button,xm gGenerateSum, 计算结果
如果想给输入框一个加个标注,比哪第一个标注“请输入一个数”,第二个输入框标注“再输入一个加数”,修改代码如下
#Requires AutoHotkey v1
Gui, Add, Text,,请输入一个数
Gui, Add, Edit,w140 vNum1
Gui, Add, Text,,再输入一个加数
Gui, Add, Edit,w140 x+10 vNum2
Gui, Add, Button,xm gGenerateSum, 计算结果
Gui, Add, Text,w300 vResult
Gui, Show,, Demo加法
return
GenerateSum:
Gui, Submit, NoHide
Sum := Num1 + Num2
showResult := "加和结果:" . Sum
GuiControl,, Result, %showResult%
MsgBox, %showResult%
return
GuiClose:
ExitApp
这次虽然有标注了,但显示的还没有对齐,是错位的。
于是对输入框1,再加入一个x+10的控制,效果如下:
#Requires AutoHotkey v1
Gui, Add, Text,,请输入一个数
Gui, Add, Edit,w140 vNum1 x+10
Gui, Add, Text,xm,再输入一个加数 ;此处xm还是强制使控件左对齐,可以试一下这里不加xm会是怎么样的
Gui, Add, Edit,w140 x+10 vNum2
Gui, Add, Button,xm gGenerateSum, 计算结果
Gui, Add, Text,w300 vResult
Gui, Show,, Demo加法
return
GenerateSum:
Gui, Submit, NoHide
Sum := Num1 + Num2
showResult := "加和结果:" . Sum
GuiControl,, Result, %showResult%
MsgBox, %showResult%
return
GuiClose:
ExitApp
为啥输入框又没有对齐了呢,感觉好难对齐啊!!😮💨😮💨😮💨
思考一下,原来第一个标注“请输入一个数”,第二个输入框标注“再输入一个加数”的宽度,当没有设定时,以字的长度来自动设置,当给这两个标签都加上宽度后,就看着对齐了。
#Requires AutoHotkey v1
Gui, Add, Text,w90,请输入一个数 ;加上一个固定的宽度90
Gui, Add, Edit,w140 vNum1 x+10
Gui, Add, Text,xm w90,再输入一个加数 ;此处xm还是强制使控件左对齐,另外,再加上一个固定的宽度90
Gui, Add, Edit,w140 x+10 vNum2
Gui, Add, Button,xm gGenerateSum, 计算结果
Gui, Add, Text,w300 vResult
Gui, Show,, Demo加法
return
GenerateSum:
Gui, Submit, NoHide
Sum := Num1 + Num2
showResult := "加和结果:" . Sum
GuiControl,, Result, %showResult%
MsgBox, %showResult%
return
GuiClose:
ExitApp
不过感觉文字和对话框没有对齐,如何解决这个问题呢,这时候需要yp参数上场了。yp是相对于前一个控件的位置的高度下降或增加几个单位。
#Requires AutoHotkey v1
Gui, Add, Text,w90,请输入一个数
Gui, Add, Edit,w140 vNum1 x+10 yp-3
Gui, Add, Text,xm w90,再输入一个加数 ;此处xm还是强制使控件左对齐
Gui, Add, Edit,w140 x+10 vNum2 yp-3
Gui, Add, Button,xm gGenerateSum, 计算结果
Gui, Add, Text,w300 vResult
Gui, Show,, Demo加法
return
GenerateSum:
Gui, Submit, NoHide
Sum := Num1 + Num2
showResult := "加和结果:" . Sum
GuiControl,, Result, %showResult%
MsgBox, %showResult%
return
GuiClose:
ExitApp
微调后的控件位置就没有看起来偏差那么大了,可以继续做相应的微调。
综上所述,
xm: 相当于控件左对齐回车;
x+m: 相当于在前一控件的基础上,向右移动m个单位,-m,向左移动m个单位,y+m类似理解;
yp: 从前一个控件为基准来做调节,而不是以整个窗体为基准来偏移位置;
Section: 定义一个新的控件段并保存当前控件的位置以便在之后创建含有 xs 和 ys 选项的控件时使用;
控件的宽度如果没有设定,则以字符长度自动设定,如果要始终保持对齐,则最好是设定一个足够多的合适长度。