找回密码
 加入
搜索
查看: 5048|回复: 18

[GUI管理] 关于自动生成按钮和按钮内容提问[已解决]

 火.. [复制链接]
发表于 2017-8-13 19:58:30 | 显示全部楼层 |阅读模式
本帖最后由 cfanpc 于 2017-8-18 12:52 编辑

软件功能很简单,就是集成一个小工具箱一样的 [img][/img]
因为有的时间变动比较大,老是要去修改源码,很麻烦,于是想到用INI文件来代替,按钮标题和要执行的代码都在INI文件里面,要维护也方便,如果弄个内网服务器,自动检测INI文件更新下载就好了。
但是现在写不下去了   没思路   深奥的也不会   求各位大神帮帮忙
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>


#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 333, 438)
;$Button1 = GUICtrlCreateButton("Button1", 40, 32, 121, 49)
;$Button2 = GUICtrlCreateButton("Button1", 183, 31, 121, 49)
Dim $anniu[7]
Dim $two[7]
Global $a
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

For $i = 0 To 6
        $anniu[$i] = GUICtrlCreateButton("", 20, 20 + 55 * ($i), 121, 50, 0, $bs_bitmap)
        ;$two[$i] = GUICtrlCreateButton("", 180, 20 + 55 * ($i), 121, 50, 0, $bs_bitmap)
Next
ok()
While 1
        $nMsg = GUIGetMsg()
                        Switch $nMsg
                                Case $GUI_EVENT_CLOSE
                                        Exit
;~                                 Case $anniu[$i]
;~                                         ShellExecute($a[$i][$i])
                                        EndSwitch
WEnd


Func ok()
        Local $ini = @ScriptDir & "\file.ini"
        If FileExists($ini) = 0 Then
                MsgBox(32, "警告", "配置文件丢失或损坏,请联系管理员")
                Exit
        EndIf
         $a = IniReadSection($ini, "按钮")
        If Not @error Then
                For $i = 0 To $a[0][0]
                        GUICtrlSetData($anniu[$i], $a[$i][0])
                        


                        
                        
                Next
        EndIf
        
EndFunc   ;==>ok

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-8-14 11:21:08 | 显示全部楼层
本帖最后由 水木子 于 2017-8-14 11:22 编辑

Config.ini 文件格式如下,图标功能你可能用得上,先给你预留着。
[ACN]
link=www.autoitx.com
ico=

[百度]
link=www.baidu.com
ico=

[计算器]
link=calc.exe
ico=

[记事本]
link=notepad.exe
ico=
示例代码如下,不过还存在问题,比如按钮数量过多,超出GUI范围,是不是要加滚动条呢!你自己研究吧!
Global $sConfig = @ScriptDir & '\Config.ini'
Global $aConfig = IniReadSectionNames($sConfig)
Global $iButtonCount = $aConfig[0]
Global $aButton[$iButtonCount] ;按钮总数
Global $iNumber = 2 ;每行按钮数量
Global $iSpacingX = 180, $iSpacingY = 60 ;垂直、水平,间距

Opt('GUIOnEventMode', 1)

GUICreate('', 400, 400)
GUISetOnEvent(-3, '_ButtonEvents')
For $i = 0 To UBound($aButton) - 1
        $aButton[$i] = GUICtrlCreateButton($aConfig[$i + 1], $iSpacingX * Mod($i, $iNumber) + 35, $iSpacingY * Floor($i / $iNumber) + 25, 150, 50)
;~         GUICtrlSetImage(-1, "shell32.dll", 100)
        GUICtrlSetOnEvent(-1, '_ButtonEvents')
Next
GUISetState()

While 1
        Sleep(500)
WEnd

Func _ButtonEvents()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $aButton[0] To $aButton[UBound($aButton) - 1]
                        $sButtonText = GUICtrlRead(@GUI_CtrlId)
                        $sLink = IniRead($sConfig, $sButtonText, 'link', '')
                        ShellExecute($sLink)
        EndSwitch
EndFunc   ;==>_ButtonEvents
发表于 2017-8-14 15:09:53 | 显示全部楼层
学习了。。。赞赞赞
发表于 2017-8-14 17:37:13 | 显示全部楼层
回复 2# 水木子


    看了他这帖子我也写了一段code。。基本和水大神的差不多。但是我是提早全部读取到数组,免去后期执行过程还要读ini文件,感觉没什么含量就没上传
发表于 2017-8-14 20:21:04 | 显示全部楼层
回复 2# 水木子

木子,请教:加滚动条后,如何用鼠标滚轮滑动
发表于 2017-8-15 10:08:08 | 显示全部楼层


这种效果?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-8-15 10:19:48 | 显示全部楼层
回复 6# tubaba

嗯!这个不错。
发表于 2017-8-15 11:16:08 | 显示全部楼层
本帖最后由 yamakawa 于 2017-8-15 12:27 编辑

回复 5# chzj589

首先
        GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL")
然后
        _GUIScrollBars_Init($hGUI);窗口句柄
最简单函数。没做判断
Func WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $lParam
        Local $updown = BitShift($wParam, 16)

        _GUIScrollBars_ScrollWindow($hWnd, 0, -$updown / 10)


        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOUSEWHEEL
发表于 2017-8-15 11:42:36 | 显示全部楼层
回复 8# yamakawa
谢谢!但页面滚动时,而滚动条却不动?能同步吗
 楼主| 发表于 2017-8-15 11:48:09 | 显示全部楼层
回复 6# tubaba


    你好,能麻烦您发下源码上来给我们学习一下么
 楼主| 发表于 2017-8-15 11:55:14 | 显示全部楼层
回复 2# 水木子


    谢谢水木大神,我要好好消化一下
发表于 2017-8-15 12:21:32 | 显示全部楼层
回复 9# chzj589


    那就比较麻烦。。。
首先 获取
_GUIScrollBars_GetScrollInfo
然后
_GUIScrollBars_SetScrollInfo
修改数据结构中。npos的数据
发表于 2017-8-15 12:44:38 | 显示全部楼层
回复 9# chzj589
Func WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam) ;稍微修改帮助文件中的例子
        #forceref $hWnd, $iMsg, $lParam
        Local $updown = BitShift($wParam, 16)
        $updown = $updown / 120
        Local $iIndex = -1, $iCharY, $iPosY
        Local $iMin, $iMax, $iPage, $iPos, $iTrackPos

        For $x = 0 To UBound($__g_aSB_WindowInfo) - 1
                If $__g_aSB_WindowInfo[$x][0] = $hWnd Then
                        $iIndex = $x
                        $iCharY = $__g_aSB_WindowInfo[$iIndex][3]
                        ExitLoop
                EndIf
        Next
        If $iIndex = -1 Then Return 0

        Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
        $iMin = DllStructGetData($tSCROLLINFO, "nMin")
        $iMax = DllStructGetData($tSCROLLINFO, "nMax")
        $iPage = DllStructGetData($tSCROLLINFO, "nPage")
        $iPosY = DllStructGetData($tSCROLLINFO, "nPos")
        $iPos = $iPosY

        $iTrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")


        DllStructSetData($tSCROLLINFO, "nPos", $iPos - $updown)

        DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
        _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
        _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
        $iPos = DllStructGetData($tSCROLLINFO, "nPos")

        If ($iPos <> $iPosY) Then
                _GUIScrollBars_ScrollWindow($hWnd, 0, $iCharY * ($iPosY - $iPos))
                $iPosY = $iPos
        EndIf

        Return $GUI_RUNDEFMSG

EndFunc   ;==>WM_MOUSEWHEEL

评分

参与人数 1金钱 +30 收起 理由
chzj589 + 30 谢谢!太感谢了!

查看全部评分

发表于 2017-8-15 12:59:56 | 显示全部楼层
回复 13# yamakawa
谢谢!太感谢了!
发表于 2017-8-15 13:09:28 | 显示全部楼层
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 22:24 , Processed in 0.083538 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表