Autohotkey 中文论坛
一填理想的AHK编辑工具 - 可打印的版本

+- Autohotkey 中文论坛 (http://ahkcn.net)
+-- 版块: AutoHotkey (/forum-3.html)
+--- 版块: 作品展示 (/forum-7.html)
+--- 主题: 一填理想的AHK编辑工具 (/thread-6597.html)



一填理想的AHK编辑工具 - fywlts - 2018-08-30 13 : 46

一、设计初衷
我学习ahk,完全是看中了它的热键功能。特别的方便快捷。可因为个人英语能力有限。里面的参数又多还有各种限制。稍不留意就会出错。往往还找不到出错的地方和原因。学习​ahk的所有资料就是附带的帮助文件汉化版。所以想做一个适合新手ahk爱好者的编辑工具。把平时收集到的大神的写函数及作品,集中整理,把平时自学ahk存在的易注意的​。加入可自定义修改的参数面板中。
二、希望具备的功能
1、框架合理分类出几大功能模块。以树状列表可快速选择。在选择函数或命令后,下面的参数面板则会显示出详细的参数选项,
【用户可自由在配置文件中添加对参数的理解注释等。有能力的也可以修改参数面板。】
【所以参数面板为独立的ahk文件,由主窗口调用,用户或爱好者可自由增加或修改完善。】
【根据用户使用命令或函数的次数,将常用的命令或函数置顶加变色显示】
4、大神函数集合,可随时收集增添内容。
5、库函数的汉化介绍说明
6、汉化一些常用的大神作品,比如autogui
三、此工具的好处是所有参数面板不需要一个人完成。爱好者可以自己设计好了传上来。用户也可以自己设计自己的参数面板,去掉用的不多的参数。每隔一段时间。由工具管理者过​滤出比较好的参数面板加入下载包。方便新用户加入后下载使用。所以,各位大神有能力的,觉得这款工具有前途的,帮忙设计完善下主框架。有好作品的回贴可申请加入工具里的大​神作品集。另:函数借用了部分大神的函数。因为不懂英文,所以汉化了下,结果可能把原作者的信息给搞掉了。请谅解。在此致歉并感谢。其实到现在还没弄懂AutoXYWH这​个函数中第一个参数中数字的作用。改来改去,改好多种,感觉没啥变化。水平还是太低了。好多功能只能想想实现不了,希望有时间的大神指点下。
四、最好,希望广大ahk爱好者,特别是像我一样不懂英文的。一起来完善下参数面板吧。
因源码有不同的文件夹及附件,可能无法正常运行,上传几次zip包均失败,所以源码后另外百度的zip包下载地址
源码:
代码:
#NoEnv
#Warn,,OutputDebug
#SingleInstance Force
FileInstall,SciLexer.dll, %A_ScriptDir%\SciLexer.dll,1
SCI_edit:= DllCall("LoadLibrary", "Str", "SciLexer.dll", "Ptr")  ; 避免了在循环中每次都需要使用 DllCall() 装载库.
SetWorkingDir %A_ScriptDir%
#Include %A_ScriptDir%\Toolbar.ahk
global 屏幕宽,屏幕高,主窗口宽,主窗口高,主窗口句柄
global 当前参数面板,默认参数面板,面板坐标x,面板坐标y,面板宽,面板高
;获取当前显示器的可用分辨率,存于变量 屏幕信息
SysGet, 屏幕信息, MonitorWorkArea
屏幕宽=屏幕信息Right-屏幕信息left
屏幕高=屏幕信息down-屏幕信息top

;========免注册调用大漠============
;iPath := A_ahkpath . "\AHKdm\dm.dll"  
;WhichButton := DllCall("AHKdm\DmReg.dll\SetDllPathW",  "Str", iPath, "Int", 0)
;MsgBox % WhichButton
;dm :=  ComObjCreate("dm.dmsoft")
;ver := dm.Ver()
;=========================免注册失败?


Gui main:New, +hWndhmainGui +Labelmain +Resize
主窗口句柄:=hmainGui
;------------------创建窗口的状态栏--------------------
Gui Add, StatusBar, x0 y680 w屏幕宽 h22, Status Bar
;----------------------添加一个菜单栏--------------------------
Menu MenuHandler, Add, 打开(&O)`tCtrl+O, MenuHandler
Menu MenuHandler, Add, 保存(&S)`tCtrl+S, MenuHandler
Menu MenuHandler, Add, 另存为(&A)`tCtrl+Shift+S, MenuHandler
Menu MenuHandler, Add, 编码, MenuHandler
Menu MenuHandler,add
Menu MenuHandler,add
Menu MenuHandler,add,退出(&X)`t,MenuHandler
Menu MenuBar, Add, 文件(&F), :MenuHandler
;-----------------
Menu EditMenu, Add, 复制(&C)`tCtrl+C, MenuHandler
Menu EditMenu, Add, 剪切(&X)`tCtrl+X, MenuHandler
Menu EditMenu, Add, 粘贴(&V)`tCtrl+V, MenuHandler
Menu EditMenu, Add, 撤销(&U)`tCtrl+Z, MenuHandler
Menu EditMenu, Add, 重做(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add, 编辑(&E), :EditMenu
;-----------------
Menu ViewMenu, Add, 复制(&C)`tCtrl+C, MenuHandler
Menu ViewMenu, Add, 剪切(&X)`tCtrl+X, MenuHandler
Menu ViewMenu, Add, 粘贴(&V)`tCtrl+V, MenuHandler
Menu ViewMenu, Add, 撤销(&U)`tCtrl+Z, MenuHandler
Menu ViewMenu, Add, 重做(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add, 查看(&E), :ViewMenu
;-----------------
Menu CompileMenu, Add, 运行(&R)`tF5, MenuHandler
Menu CompileMenu, Add, 调试(&D)`tF7, MenuHandler
Menu CompileMenu, Add, 编译(&C)`tCtrl+F7, MenuHandler
Menu CompileMenu, Add, 备用(&U)`tCtrl+Z, MenuHandler
Menu CompileMenu, Add, 备用(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add,编译(&O), :CompileMenu
;-----------------
Menu OptionMenu, Add, 配置SCI(&C)`tCtrl+C, MenuHandler
Menu OptionMenu, Add, 代码样式选择(&X)`tCtrl+X, MenuHandler
Menu OptionMenu, Add, 自定义快捷键(&V)`tCtrl+V, MenuHandler
Menu OptionMenu, Add, 撤销(&U)`tCtrl+Z, MenuHandler
Menu OptionMenu, Add, 重做(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add, 选项(&O), :OptionMenu
;-----------------
Menu ToolMenu, Add, 窗口信息查看(&I)`t, MenuHandler
Menu ToolMenu, Add, 快速脚本界面(&W)`t, MenuHandler
Menu ToolMenu, Add, 代码格式化(&G)`t, MenuHandler
Menu ToolMenu, Add, 正则辅助测试(&Z)`t, MenuHandler
Menu ToolMenu, Add, 快速插入片段(&P)`t, MenuHandler
Menu ToolMenu, Add, 插件接口查看(&V)`t, MenuHandler
Menu ToolMenu, Add, SCI配置工具(&S)`t, MenuHandler
Menu ToolMenu, Add, 自定义工具栏(&T)`t, MenuHandler
Menu ToolMenu, Add, 库文件介绍(&L)`t, MenuHandler
Menu MenuBar, Add, 工具(&T), :ToolMenu
;-----------------
Menu HelpMenu, Add, 帮助(&H)`tF1, MenuHandler
Menu HelpMenu, Add, 赞助注册(&C)`t, MenuHandler
Menu MenuBar, Add, 帮助(&H), :HelpMenu
Gui Menu, MenuBar
;-----------------------代码编辑栏-----------------------------
;Gui Add, Edit, x270 y50 w760 h392, #NoEnv`n#Warn,, OutputDebug`n#SingleInstance Force`nSetWorkingDir `%A_ScriptDir`%
gui add,Custom,ClassScintilla x270 y50 w760 h392 hwndhSci_edit ;添加 Scintilla 控件. 注意必须加载 SciLexer.dll 库后才能添加此控件
;-----------------------代码块快捷命令区------------------------
Gui Add, GroupBox, x248 y45 Section w22 h620
Gui add,Picture, xp yp  AltSubmit,代码背景.bmp
Gui Add, Button, hwnd_left xp+2 yp+8 w18 h18 +BackgroundTrans +0x0080 +0x0040
BT1Options:= [ {BC: "代码背景.bmp", TC: "000000", 3D: 9, G: 1}] ;普通状态
BT1Options[2] := {BC: "代码背景.bmp", TC: "000000", 3D: 9, G: 1} ;鼠标悬停
BT1Options[3] := {BC: "代码背景.bmp", TC: "000000", 3D: 0, G: 0} ;3鼠标按下
CreateImageButton(_left,BT1Options)

Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
;-------------------------左侧选择命令区-----------------------
Gui Add, Tab2, +hWndtiaoshi vtabts x8 y50 w240 h620 AltSubmit +0x280, 选择命令|项目管理|全局变量
    Gui Tab, 1
        Gui Add, TreeView, x32 y58 w210 h600 vtvcmd gcmts
    Gui Tab, 2
        Gui Add, ListView, x32 y58 w210 h600, ListView
    gui tab
        ;------------------------下侧命令参数区------------------------
        ;-----------下侧:调试:cmd插件---------------------------
        ;Gui Add, ActiveX, x267 y450 w750 h198, Shell.Explorer

;===============-显示窗口-===============
Gui main:Show, w1280 h780, 积木AHK

;------------创建工具栏-------------
GuiAddToolbar(主窗口句柄)
OnMessage(0x003,"更新参数面板位置") ;0x0003 WM_MOVE

#Include %A_ScriptDir%\lib\lib.ahk

        ;=====================程序主体部分===============
        ;---程序初始化
        ;生成配置文件()
载入配置文件()  ;此处是读取目录下的文件生成命令区TV控件的数据

;Run, Target [, WorkingDir, Max|Min|Hide|UseErrorLevel, OutputVarPID]
;AutoHotkey.exe [Switches] [Script Filename] [Script Parameters] ;%面板宽% %面板高%
窗口坐标更新()
Run,autohotkey.exe /force `"%A_ScriptDir%`"\命令\默认面板.ahk %面板坐标x% %面板坐标y% 900 240,%A_AhkPath%,, 默认参数面板
当前参数面板:=默认参数面板



    

        ;——————————————————————————————————
        ;=====================程序主体部分结束==================


        ;———————————————以下是函数、标签部分——————————————
return
MenuHandler:
return

mainSize:
AutoXYWH("w0.75 h0.75", hSci_edit)
AutoXYWH("h0.75", tiaoshi,"tvcmd")

更新参数面板位置()
return



;触发了命令选择中树形列表项的标签
cmts:
;SendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText, Timeout]
    if (A_GuiEvent=="S") {
        TV_GetText(选中的项目文本,A_EventInfo )
        父项目id:=TV_GetParent(A_EventInfo )
        if (父项目id!=0){
            tV_GetText(父项目文本,父项目id)
            Process,Close,%当前参数面板%
            窗口坐标更新()
            Run,autohotkey.exe /force `"%A_ScriptDir%`"\命令\%父项目文本%\%选中的项目文本%.ahk %面板坐标x% %面板坐标y% 900 240,%A_AhkPath%,, 当前参数面板
            return
        }
    }
return

mainEscape:

return

mainClose:
    DetectHiddenWindows On ; 允许探测脚本中隐藏的主窗口。
    SetTitleMatchMode 2
    ;PostMessage, 0x111, 65307,,,内置变量.ahk - AutoHotkey ; 退出
    Process,Close,%当前参数面板%
    DllCall("FreeLibrary", "Ptr", hSci_edit)  ; 为了释放内存, 在使用 DLL 后需要进行卸载
    ExitApp
return



;===================下面是函数区==================
; 工具栏按钮生成函数

GuiAddToolbar(hWnd) {
    ImageList := IL_Create(7)
    IL_Add(ImageList, "shell32.dll", 16)
    IL_Add(ImageList, "shell32.dll", 96)
    IL_Add(ImageList, "shell32.dll", 28)
    IL_Add(ImageList, "shell32.dll", 24)
    IL_Add(ImageList, "shell32.dll", 174)
    IL_Add(ImageList, "shell32.dll", 138)
    IL_Add(ImageList, "shell32.dll", 142)
    hToolbar := Toolbar_Add(hWnd, "OnToolbar", "flat list ToolTips", ImageList)
    Buttons =
    (LTrim
        我的电脑
        计算器
        关闭电脑
        帮助关于
        整理代码
        运行
        调试
    )
    Toolbar_Insert(hToolbar, Buttons)
}

OnToolbar(hWnd, Event, Text, Pos, Id) {
    if (Event = "Hot") {
        return
    }
}


;根据目录及相关文件生成配置文件
生成配置文件(){
    ;第一步,遍历同目录的[命令]文件夹下的文件夹,得到配置文件cmd.ini的字段
    loop, Files, %A_WorkingDir%\命令\*, D
    {
        IniWrite,%A_Space%,cmd.ini,%A_LoopFileName%
    }
}

载入配置文件(){
    Gui,TreeView,tvcmd
    loop, Files, %A_WorkingDir%\命令\*, D
    {
        ;新建父项目,样式为字体加粗
        TV_Add(A_LoopFileName,,"Bold")
    }
    ;含子目录式循环读取所有文件
    loop, Files, %A_WorkingDir%\命令\*, R
    {
        StringTrimRight, 写入项, A_LoopFileName, 4
        ;SplitPath, A_LoopFileDir, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive
        Loop, Parse, A_LoopFileDir , "\"
            目录名:=A_LoopField
        if (目录名!="命令"){
            ItemID = 0  ; 这样使得首次循环从树的顶部开始搜索.
            conut:=TV_GetCount()
            Loop,%conut%
                {
                ItemID := TV_GetNext(ItemID)  ; 把 "Full" 替换为 "Checked" 来找出所有含复选标记的项目.
                    if (ItemID){
                        TV_GetText(ItemText, ItemID)
                        if (ItemText==目录名)
                        TV_Add(写入项,ItemID)
                    }
                }  
    }
    }
}

窗口坐标更新(){
local 代码控件x坐标,代码控件y坐标,代码控件宽,代码控件高
WinGetPos, 面板坐标x, 面板坐标y,主窗口宽,主窗口高,ahk_id %主窗口句柄%
ControlGetPos , 代码控件x坐标, 代码控件y坐标, 代码控件宽, 代码控件高, ,ahk_id %hSci_edit%
面板坐标x:=面板坐标x+代码控件x坐标
面板坐标y:=面板坐标y+代码控件y坐标+代码控件高+2
面板宽:=代码控件宽
面板高:=主窗口高-代码控件高-46
}

更新参数面板位置(){
窗口坐标更新()
WinMove,ahk_pid %当前参数面板%,,%面板坐标x%,%面板坐标y%
}

转短路径(原路径){
local 短路径
Loop, Parse, 原路径, "\" ;转换为短路径
    {
        if (StrLen(A_LoopField)>8){
            路径:=Substr(A_LoopField,1,6) "~1\"
        }else{
            路径:=A_LoopField "\"
    }
        短路径:=短路径 路径
}
return 短路径
}

客户转屏幕坐标(r,客户坐标x="275",客户坐标y="470"){
local x,y
WinGetPos, x, y,,,ahk_id %主窗口句柄%
x:=x+客户坐标x
y:=y+客户坐标y
if (r=="x")
return x
if (r=="y")
return y
}

[Image: 1zvz6ah.jpg]
[Image: 28mogom.jpg]
[Image: 2mww0au.jpg]
[Image: wk0474.jpg]


百度zip包:https://pan.baidu.com/s/1ZhaDHpTOX75LwAPXMqTo2w


RE: 一填理想的AHK编辑工具 - ecolzero - 2018-09-06 19 : 52

去看了下 AutoXYWH(DimSize, cList*) 这个 里面第一个参数 说是 x/y/w/h
那我想你说的数字应该是xy起始坐标


RE: 一填理想的AHK编辑工具 - tmplinshi - 2018-09-14 18 : 30

AutoXYWH 的第一个参数中的数字是按比例变动的意思。比如有上下两个并排的编辑框,你想让它们的高度自动缩放,那么变动的时候必然是各变动一半的高度。

代码:
Gui, +Resize
Gui, Add, Edit, w200,
Gui, Add, Edit, w200,
Gui, Show
Return

GuiSize:
    AutoXYWH("w h0.5", "Edit1")
    AutoXYWH("w h0.5 y0.5", "Edit2")
Return

GuiClose:
ExitApp