【问题标题】:Create Identifier for input box with AHK GUI使用 AHK GUI 为输入框创建标识符
【发布时间】:2018-03-29 02:08:51
【问题描述】:

我在 AHK 中创建了一个 GUI,它现在运行良好。我正在处理多条记录,并希望能够跟踪我所在的位置。我的代码循环遍历每条记录并执行一些操作,然后再转到下一条记录。发生这种情况时,会显示 GUI 窗口。我也在 AHK 中写这个,然后使用转换工具并用它创建一个 .exe。我正在开发这个工具,作为一个独立的 EXE 分发,人们可以安装/保存,然后在他们想要的时候运行。下面是该工具的屏幕截图和要在名称中加载的代码。

Gui, PasteGUI:Add, Text,, Please add the Names that you want to Process.
Counter := 0
Loop, parse, Clipboard, `n, `r
{
    x%A_Index% := A_LoopField
    Counter++
}
Counter--    
Loop, %Counter%  ;  Dynamic List length
Gui PasteGUI:Add, Edit, vButton%A_Index%, % x%A_Index%
Gui PasteGUI:Add, Button, x200 y270 w88 h26 vButton02 gGoCont Default, Continue
Gui PasteGUI:Add, Button,  x290 y270 w88 h26 vButton03 gGoQuit, Cancel  
Gui, PasteGUI:Show
}
Return
GoCont:
{
    Loop, %Counter%
    {
        CODE TO PROCESS MY EACH NAME
    }
    MsgBox Done!
    Gui Destroy
}
Return
GoQuit:  
    Gui Destroy 
Return

我想添加一些东西,以便在处理 Jason 时可以识别它。当我在列表中循环时有一个移动的箭头会很好。正如我在下面描绘的那样,我用油漆画了它。否则,如果我可以将过去的记录变成一种也可以使用的颜色。因此,对于下面的示例,名称“Chris”和“Ben”将以某种颜色突出显示,或者这些框会以某种方式被识别为不同的。我不知道该怎么做,所以如果可能的话,学习两者都会很棒。最后,无论描述什么方法,我都需要能够使用 Ahk2Exe 将其转换为 .exe,然后能够运行 .exe,并且不需要在程序中包含任何其他文件或其他无法正常工作的引用。这是在标准 Windows 计算机上运行的,因此如果有一些可以访问的默认图像也可能有用。

【问题讨论】:

  • 也许您可以在每行之前或之后添加一个复选框,以便在您的 GUI 中创建一个编辑框。然后,在处理名称的代码中,您只需勾选复选框即可进行跟踪。先尝试一下,然后我可以帮助您编写代码。谢谢,

标签: user-interface autohotkey


【解决方案1】:

好的,我已经弄清楚了如何使用 PGilm 的复选框方法来做到这一点。您也可以使用某种表格来执行此操作。但是下面的代码看起来对我有用。

另外我想让你知道我将 var x 更改为 cliparray 以便更易于阅读。

Gui, Add, Text,section, Please add the Names that you want to Process.
Counter := 0
Loop, parse, Clipboard, `n, `r
{
    cliparray%A_Index% := A_LoopField
    Counter++
}
Counter--  


Loop, %Counter%  {
;  Dynamic List length
Gui, Add,  Checkbox,  xs vCheckBox%A_Index%
Gui Add, Edit, yp+1 xs+30 vTextbox%A_Index%, % cliparray%A_Index%

}
Gui Add, Button, x200 y270 w88 h26 gGoCont vButton02 Default, Continue
Gui Add, Button,  x290 y270 w88 h26 vButton03 gGoQuit, Cancel  
Gui, Show
Return

GoCont:
;needed to get the variables from the edits and check box, else the varibles dont exist See below for more information. 
Gui, Submit, NoHide  
msgbox, Go..
    Loop, %Counter%
    {
        line=Textbox%A_Index%
        GuiControl,, CheckBox%A_Index%, 1
        backone:=A_Index-1
        GuiControl,, CheckBox%backone%, 0

        Msgbox % "variable " line " contains: " Textbox%A_Index%
    }
    MsgBox Done!

Return
GoQuit:
   Gui Destroy 
Return

;Used to debug to see list of all variables. Super helpful :D
F7::
ListVars
return

需要注意的一些逻辑是在添加编辑和复选框的行上。我使用 Gui 定位的 Section 逻辑在同一行进行编辑和检查。在此代码中,section 元素在第一个 Gui, Add, 中设置为 text 部分。从而延续到其他 gui 元素。 Section AHK Documentation

Gui, Add,  Checkbox,  xs vCheckBox%A_Index%
Gui Add, Edit, yp+1 xs+30 vTextbox%A_Index%, % cliparray%A_Index%

下一部分要仔细研究的是GoCont 函数。我正在使用循环的索引来检查 CheckBox%A_Index% 复选框,以便打开当前行。我还使用GuiControl,, CheckBox%backone%, 0 行关闭了最后一个索引的复选框。当您处理每个元素中的文本时,这会产生复选框在列表中移动的效果。

最后要提到的一行是Gui, Submit, NoHide。如果没有这个,您将丢失为每个复选框创建的变量并进行编辑。这将使用来自每个 gui 元素的数据创建和填充变量。 Gui, Submit AHK Documentation

【讨论】:

  • 另一种解决方案可能是更改编辑框的颜色。但我以前没有做过。你可以在这里阅读autohotkey.com/boards/viewtopic.php?f=6&t=2197
  • 所以对我来说,我只是使用了粘贴的值,并没有真正提交 gui。所以我通过x1x%Counter%。我觉得没有必要重新提交,因为这会创建第二个不需要的列表。
  • 编辑框仅在使用从剪贴板粘贴方法时显示。我想真正访问剪贴板而不是编辑结果。编辑结果会引入潜在的错误。我有第二个例程确实使用了提交,而您实际上使用了编辑框,在这种情况下您确实使用了提交
  • 您应该能够修改底部的第二个循环以像顶部的那样解析 Loop, parse, Clipboard, 'n, 'r 我会尝试更新答案,但同时您可能不得不试一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
相关资源
最近更新 更多