关于自动生成按钮和按钮内容提问[已解决]
本帖最后由 cfanpc 于 2017-8-18 12:52 编辑软件功能很简单,就是集成一个小工具箱一样的
因为有的时间变动比较大,老是要去修改源码,很麻烦,于是想到用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
Dim $two
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
GUICtrlSetData($anniu[$i], $a[$i])
Next
EndIf
EndFunc ;==>ok
本帖最后由 水木子 于 2017-8-14 11:22 编辑
Config.ini 文件格式如下,图标功能你可能用得上,先给你预留着。
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
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 To $aButton
$sButtonText = GUICtrlRead(@GUI_CtrlId)
$sLink = IniRead($sConfig, $sButtonText, 'link', '')
ShellExecute($sLink)
EndSwitch
EndFunc ;==>_ButtonEvents 学习了。。。赞赞赞 回复 2# 水木子
看了他这帖子我也写了一段code。。基本和水大神的差不多。但是我是提早全部读取到数组,免去后期执行过程还要读ini文件,感觉没什么含量就没上传 回复 2# 水木子
木子,请教:加滚动条后,如何用鼠标滚轮滑动
这种效果? 回复 6# tubaba
嗯!这个不错。 本帖最后由 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 回复 8# yamakawa
谢谢!但页面滚动时,而滚动条却不动?能同步吗 回复 6# tubaba
你好,能麻烦您发下源码上来给我们学习一下么 回复 2# 水木子
谢谢水木大神,我要好好消化一下 回复 9# chzj589
那就比较麻烦。。。
首先 获取_GUIScrollBars_GetScrollInfo
然后_GUIScrollBars_SetScrollInfo
修改数据结构中。npos的数据 回复 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] = $hWnd Then
$iIndex = $x
$iCharY = $__g_aSB_WindowInfo[$iIndex]
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 回复 13# yamakawa
谢谢!太感谢了!{:face (361):} http://www.autoitx.com/thread-55890-1-1.html
页:
[1]
2