主要实现了一个自定义的 HTML 按钮功能,通过嵌入 HTML 和 JavaScript 创建按钮,替代标准的 AHK GUI 按钮。
; 缺点:略耗内存
Global Html按钮1, Html按钮2
新按钮1 := New HtmlButton("Html按钮1", "确定", "MyButton1_", 11, 10) ; 这行也可以免掉坐标
新按钮2 := New HtmlButton("Html按钮2", "取消", "MyButton2_", "ys")
Gui Add, Button, Section xs w78 h26, 确定
Gui Add, Button, ys w78 h26, 取消
Gui Show, w200 h90
Return
F1::
if (onoff := !onoff)
新按钮1.Text("Html按钮1", "Text")
else
新按钮1.Text("Html按钮1", "重试")
Return
GuiClose:
ExitApp
; 按钮事件处理
MyButton1_OnClick() {
static a := 0
ToolTip % "执行AHK_1: " a += 1, , ,1
}
MyButton2_OnClick() {
static a := 0
ToolTip % "执行AHK_2: " a += 1, , ,2
}
; 用网页按钮样式来代替标准按钮,兼容到XP系统。如果Gui开启的-DPIScale,需要把HtmlButton最后一个参数"DPIScale"设置成非0即可修正匹配。
Class HtmlButton
{
__New(ButtonGlobalVar, ButtonName, gLabelFunc, OptionsOrX:="", y:="", w:=78 , h:=26, GuiLabel:="", TextColor:="001C30", DPIScale:=False) {
Static Count:=0
f := A_Temp "\" A_TickCount "-tmp" ++Count ".DELETEME.html"
Html_Str =
(
<!DOCTYPE html><html><head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<style>body {overflow-x:hidden;overflow-y:hidden;}
button { color: #%TextColor%;
background-color: #F4F4F4;
border-radius:2px;
border: 1px solid #A7A7A7;
cursor: pointer; }
button:hover {background-color: #BEE7FD;}
</style></head><body>
<button id="MyButton%Count%" style="position:absolute;left:0px;top:0px;width:%w%px;height:%h%px;font-size:12px;font-family:'Microsoft YaHei UI';" oncontextmenu="return false;">%ButtonName%</button></body></html>
)
if (OptionsOrX!="")
if OptionsOrX is Number
x := "x" OptionsOrX
else
Options := " " OptionsOrX
(y != "" && y := " y" y)
Gui, %GuiLabel%Add, ActiveX, % x . y . " w" w " h" h " v" ButtonGlobalVar . Options, Shell.Explorer
FileAppend, % Html_Str, % f
%ButtonGlobalVar%.Navigate("file://" . f)
, this.Html_Str := Html_Str
, this.ButtonName := ButtonName
, this.gLabelFunc := gLabelFunc
, this.Count := Count
, %ButtonGlobalVar%.silent := True
, this.ConnectEvents(ButtonGlobalVar, f)
if !DPIScale
%ButtonGlobalVar%.ExecWB(63, 1, Round((A_ScreenDPI/96*100)*A_ScreenDPI/96) ) ; Fix ActiveX control DPI scaling
}
Text(ButtonGlobalVar, ButtonText) {
Html_Str := StrReplace(this.Html_Str, ">" this.ButtonName "</bu", ">" ButtonText "</bu")
FileAppend, % Html_Str, % f := A_Temp "\" A_TickCount "-tmp.DELETEME.html"
%ButtonGlobalVar%.Navigate("file://" . f)
, this.ConnectEvents(ButtonGlobalVar, f)
}
ConnectEvents(ButtonGlobalVar, f) {
While %ButtonGlobalVar%.readystate != 4 or %ButtonGlobalVar%.busy
Sleep 5
this.MyButton := %ButtonGlobalVar%.document.getElementById("MyButton" this.Count)
, ComObjConnect(this.MyButton, this.gLabelFunc)
FileDelete, % f
}
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)