[AHK]编写Dialog类代替内置的InputBox命令

更灵活的自定义的Dialog类,可以用来平替内置的InputBox命令

AHK v1代码

#requires  Autohotkey v1.0
answer := Dialog("输出结果:", "good")
MsgBox, % "you answered: " answer
ExitApp

Dialog(Question, DefaultValue := "") {
    return new Dialog(Question, DefaultValue).Wait()
}
class Dialog
{
    __New(Question, DefaultValue) {
        Gui, New, +hwndhGui +LabelDialog.On_, Dialog
        this.hwnd := hGui
        Gui, Add, Text,, % Question
        Gui, Add, Edit, w200 h100 hwndhEdit, %DefaultValue%
        this.hEdit := hEdit
        Gui, Add, Button, gDialog.On_ButtonSendAnswer, 确定
        this.SaveStatus := False
        Gui, Show
        Dialog.Instances[hGui] := this
    }
    
    On_Close() {
        MsgBox, 4, % " ", Do you want to close the window?
        IfMsgBox, No
            Return 1
        Dialog.RemoveInstance(A_Gui)
    }

    On_ButtonSendAnswer() {
        this := Dialog.Instances[A_Gui]
        this.SaveStatus := True
        Dialog.RemoveInstance(this.hwnd)
        Gui, Cancel
    }
 
    RemoveInstance(hwnd) {
        Dialog.Instances.Delete(hwnd)
    }
 
    Wait() {
        dhw := A_DetectHiddenWindows
        DetectHiddenWindows, Off
        WinWaitClose, % "ahk_id " this.hwnd
        DetectHiddenWindows, % dhw

        If !this.SaveStatus
          Return "not saved"
        GuiControlGet, value,, % this.hEdit
        return value
    }

    __Delete() {
        Gui, % this.hwnd ":Destroy"
    }
}

AHK v2代码

#Requires AutoHotkey v2.0

answer := myDialog("输出结果:", "good")
MsgBox("you answered: " . answer)
ExitApp

myDialog(Question, DefaultValue := "") {
    return Dialog.Create(Question, DefaultValue).Wait()
}

class Dialog {
    static Instances := Map()

    static Create(Question, DefaultValue) {
        return Dialog(Question, DefaultValue)
    }

    __New(Question, DefaultValue) {
        this.gui := Gui()
        this.gui.Add("Text", , Question)
        this.edit := this.gui.Add("Edit", "w200 h100", DefaultValue)
        this.MyBtn :=this.gui.Add("Button", "", "确定")
        this.MyBtn.OnEvent("Click", this.On_ButtonSendAnswer) 
        this.SaveStatus := false
        this.gui.OnEvent("Close", this.On_Close)
        this.gui.Show()
        Dialog.Instances[this.gui.Hwnd] := this
    }

    On_Close(*) {
        if (MsgBox("Do you want to close the window?", " ", 4) = "No")
            return true
        Dialog.RemoveInstance(this)
    }

    On_ButtonSendAnswer(*) {
        this := Dialog.Instances[this.gui.Hwnd]
        this.SaveStatus := true
        Dialog.RemoveInstance(this.gui)
        this.gui.Hide()
    }
    static RemoveInstance(gui) {
        Dialog.Instances.Delete(gui.Hwnd)
    }

    Wait() {
        dhw := A_DetectHiddenWindows
        DetectHiddenWindows(false)
        WinWaitClose("ahk_id " . this.gui.Hwnd)
        DetectHiddenWindows(dhw)

        if (!this.SaveStatus)
            return "not saved"
        return this.edit.Value
    }

    __Delete() {
        this.gui.Destroy()
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值