在AutoHotKey中,我希望有类似InputBox的东西,除了文本输入是多行的。 (比如textarea)。
我希望有两个按钮,“Ok”和“Cancel”,我希望它们都有加速器。我希望这个代码是一个函数的形式,我可以从其他热键调用,以便随时获取多行用户输入。我希望能够设置显示对话框时显示的默认文本。如果按下取消按钮,我希望函数返回null或空字符串。我希望Esc键使对话框关闭,就像按下取消按钮一样(并且不退出整个脚本)。我希望对话框显示在屏幕的中央,并使用Windows通常用于对话框的字体。
答案 0 :(得分:5)
试试这个
!1::
MsgBox % MultiLineInputBox("Hello World:", "stuff, more stuff", "Custom Caption")
return
MultiLineInputBox(Text:="", Default:="", Caption:="Multi Line Input Box"){
static
ButtonOK:=ButtonCancel:= false
if !MultiLineInputBoxGui{
Gui, MultiLineInputBox: add, Text, r1 w600 , % Text
Gui, MultiLineInputBox: add, Edit, r10 w600 vMultiLineInputBox, % Default
Gui, MultiLineInputBox: add, Button, w60 gMultiLineInputBoxOK , &OK
Gui, MultiLineInputBox: add, Button, w60 x+10 gMultiLineInputBoxCancel, &Cancel
MultiLineInputBoxGui := true
}
GuiControl,MultiLineInputBox:, MultiLineInputBox, % Default
Gui, MultiLineInputBox: Show,, % Caption
SendMessage, 0xB1, 0, -1, Edit1, A
while !(ButtonOK||ButtonCancel)
continue
if ButtonCancel
return
Gui, MultiLineInputBox: Submit, NoHide
Gui, MultiLineInputBox: Cancel
return MultiLineInputBox
;----------------------
MultiLineInputBoxOK:
ButtonOK:= true
return
;----------------------
MultiLineInputBoxGuiEscape:
MultiLineInputBoxCancel:
ButtonCancel:= true
Gui, MultiLineInputBox: Cancel
return
}
答案 1 :(得分:1)
你可以保持很短的时间:
(测试和工作)
MultiLineInput(Text:="Waiting for Input") {
Global MLI_Edit
Gui, Add, Edit, vMLI_Edit x2 y2 w396 r4
Gui, Add, Button, gMLI_OK x1 y63 w199 h30, &OK
Gui, Add, Button, gMLI_Cancel x200 y63 w199 h30, &Cancel
Gui, Show, h94 w400, %Text%
Goto, MLI_Wait
MLI_OK:
GuiControlGet, MLI_Edit
MLI_Cancel:
GuiEscape:
ReturnNow := True
MLI_Wait:
While (!ReturnNow)
Sleep, 100
Gui, Destroy
Return %MLI_Edit%
}
MsgBox % MultiLineInput("Tell me 5 things you like.")
这就是它的样子:
以下是在MsgBox中打印的内容:Click
答案 2 :(得分:1)
答案https://stackoverflow.com/a/25800045/2043349中的更新版本,修复了多次使用该功能时提示文本不会更新的错误:
MultiLineInputBox(Text:="", Default:="", Caption:="Multi Line Input Box")
{
static
ButtonOK:=ButtonCancel:= false
Gui GuiMLIB:New,, % Caption
Gui, add, Text, w600, % Text
Gui, add, Edit, r10 w600 vMLIBEdit, % Default
Gui, add, Button, w60 gMLIBOK , &OK
Gui, add, Button, w60 x+10 gMLIBCancel, &Cancel
Gui, Show
while !(ButtonOK||ButtonCancel)
continue
if ButtonCancel
return
Gui, Submit
return MLIBEdit
;----------------------
MLIBOK:
ButtonOK:= true
return
;----------------------
GuiMLIBGuiEscape:
GuiMLIBGuiClose:
MLIBCancel:
ButtonCancel:= true
Gui, Cancel
return
}
答案 3 :(得分:0)
这是一段代码:
版本1(与Gosub一起):
return
StartGui:
Gui, Add, Edit, x22 y19 w240 h120 vMyEdit, Here is default text
Gui, Add, Button, x22 y179 w100 h30 gGuiCloseOk, Ok
Gui, Add, Button, x162 y179 w100 h30 gGuiCloseCancel, Cancel
; Generated using SmartGUI Creator for SciTE
Gui, Show, w286 h231, My Gui Name
WinGetPos,,, Width, Height, My Gui Name
WinMove, My Gui Name,, (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2)
return
return
GuiCloseOK:
GuiControlGet, MyEdit
Gui, Destroy
return
GuiCloseCancel:
MyEdit:=""
Gui, Destroy
return
return
Esc::
Gui, Destroy
return
将代码放在您喜欢的任何地方。要在任何地方调用GUI添加Gosub, StartGui
。 编辑控件的内容,您将获得MyEdit
变量。
例如,如果要通过 CTRL + ALT + z 调用GUI,请将该代码放在脚本中的任何位置:
return
!^z::
Gosub, StartGui
return
版本2(带功能):
GuiFunc(DefaultText)
{
global MyEdit
MyEdit:=""
Gui, Add, Edit, x22 y19 w240 h120 vMyEdit, %DefaultText%
Gui, Add, Button, x22 y179 w100 h30 gGuiCloseOk, &Ok
Gui, Add, Button, x162 y179 w100 h30 gGuiCloseCancel, &Cancel
; Generated using SmartGUI Creator for SciTE
Gui, Show, w286 h231, My Gui Name
WinGetPos,,, Width, Height, My Gui Name
WinMove, My Gui Name,, (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2)
return
return
GuiCloseOK:
GuiControlGet, MyEdit
Gui, Destroy
return
GuiCloseCancel:
MyEdit:=""
Gui, Destroy
return
}
return
Esc::
Gui, Destroy
return
将代码放在您喜欢的任何地方。要调用GUI,请使用默认情况下在编辑控件中显示的文本参数调用GuiFunc(DefaultText)
函数。运行函数后,全局变量MyEdit
设置为编辑控件的内容。因此,您可以在函数外的任何位置使用MyEdit
变量。我知道你希望函数返回MyEdit
变量的内容,但我尝试了很多方法却没有成功。
例如,将该代码放在脚本中的任何位置。要调用GUI,请按 CTRL + ALT + z 并显示MyEdit
变量的内容按 CTRL + ALT + a :
return
!^z::
DefaultText:= "Here is default text"
GuiFunc(DefaultText)
return
return
!^a::
MsgBox, %MyEdit%
return
对于这两个版本,如果您决定重命名Window Title My Gui Name
,请记住,您需要在3个位置重命名它才能使脚本正常工作。
此外,始终使用来自http://ahkscript.org/的AutoHotkey及其文档(当前最新版本,新官方网站)! Autohotkey.com上的AutoHotkey及其文档已过时,使用它们可能会遇到一些问题!