[已解决]恳请指点--终于参照版主大人的帖子实现了ini文件内容的读取,但遇到了问题
本帖最后由 anythinging 于 2020-12-13 14:42 编辑终于参照版主大人的几个教程实现了ini文件内容的读取,但遇到了问题,就是左键点击1,2列的时候,位置和内容保存都存在问题,请各位大神指点!谢谢!感谢chzj589的指点
终于可以进入下一个阶段,保存表格内容至ini文件了。求例子经版主指点,已经改进ini格式,代码随同更新2020-11-28 21:43
感谢版主和chzj589的指点,总算实现了大部份功能。
完成如下:
1、实现了对指定指定字段跳过读取、保存内容。
2、解决了序号跳过字段后左侧序号缺失的问题
3、增加了新增条目
遇到的问题:
1、原本是保存的时候调用刷新,但发现有点小问题,没解决就单独做了个刷新,请问这样刷新对吗?(遇到的问题是如果下拉列表没确认修改完成,保存和刷新的时候那个下拉列表还一直存在)
2、借用了A版大人的回车功能,直接闪退,解决不了
3、可能用户名的修改处,使用_GUICtrlEdit_Create 可能更适合,版主能否给个_GUICtrlEdit_Create 和input的例子。
#include <GUIListView.au3>
#include <GuiMenu.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <ListViewConstants.au3>
Opt('GUIOnEventMode', 1)
Global $hGui, $hListView, $hMenu, $aItem, $iCombo
Global $iListView
Global $sDefCombo1 = '111|222', $sDefCombo2 = 'AAA|ZZZ' ,$sDefCombo3 = '12345|00000'
$dir = @ScriptDir&"\test1.ini"
Global $num
Dim $hGui = GUICreate('')
GUISetOnEvent(-3, '_Exit')
$Save=GUICtrlCreateButton('保存',200,300,80,30)
GUICtrlSetOnEvent($Save, "_save")
$Add=GUICtrlCreateButton('添加',100,300,80,30)
GUICtrlSetOnEvent($Add, "_Add")
$Ref=GUICtrlCreateButton('刷新',10,300,80,30)
GUICtrlSetOnEvent($Ref, "_Ref")
_Read()
Func _Read() ;读取ini内容,创建List
Dim $iCombo = GUICtrlCreateCombo('', -100, -100)
Global $iListView = GUICtrlCreateListView('序号|用户名称|密码|性别|修改密码|状态', 2, 2, 386, 258)
Dim $hListView = GUICtrlGetHandle(-1)
_GUICtrlListView_SetExtendedListViewStyle($iListView, $LVS_EX_GRIDLINES + $LVS_EX_FULLROWSELECT)
Global $zd = IniReadSectionNames($dir) ;获取字段数量——读取ini文件中的字段,并返回1维数组变量,$zd是字段总数
If Not @error Then
$skipnum = 0 ;跳过的字段数
For $i = 1 to $zd ;从1开始一直到$zd(总数),读取出每个字段名
If $zd[$i] <> 'set' and $zd[$i] <> 'admin' Then ;此处为不创建字段信息为set的内容
$num=$i-$skipnum
;MsgBox(262144,'正常,序号为',$num)
Else
$skipnum = $skipnum +1
;MsgBox(262144,'跳过的数量为',$skipnum)
EndIf
If $zd[$i] <> 'set' and $zd[$i] <> 'admin' Then ;此处为不创建字段信息为set的内容
;读取用户名
;$Lable=IniRead($dir,$zd[$i],'UserName','Error')
$Lable=$zd[$i]
;读取创建密码
$Password=IniRead($dir,$zd[$i],'PassWord','Error')
;读取性别
$UserMode=IniRead($dir,$zd[$i],'UserMode','Error')
If $UserMode = '1' Then
$Mode='男'
Else
$Mode='女'
EndIf
$PwMode=IniRead($dir,$zd[$i],'PwMode','Error')
If $PwMode = '1' Then;
$PW='允许'
Else
$PW='禁止'
EndIf
;自动创建
GUICtrlCreateListViewItem($num&'|'&$Lable&'|'&$Password&'|'&$Mode&'|'&$PW&'|保留', $iListView)
EndIf
Next
GUISetState()
Local $id1 = GUICtrlCreateDummy()
GUICtrlSetOnEvent(-1, '__UdpData')
Local $aAccelKeys = [['{Enter}', $id1]]
GUISetAccelerators($aAccelKeys)
GUIRegisterMsg(0x004E, '_WM_NOTIFY') ;$WM_NOTIFY = 0x004E
Else
MsgBox(262144,'','配置文件读取错误',1)
Exit
EndIf
EndFunc
Func _Add() ;添加新用户
$num=$num+1
GUICtrlCreateListViewItem('|新用户|123456|男|允许|保留', $iListView)
EndFunc
Func _save() ;保存至INI文件
;删除 除admin set 的所有字段
$zd = IniReadSectionNames($dir) ;获取字段数量——读取ini文件中的字段,并返回1维数组变量,$zd是字段总数
For $i = 1 to $zd ;从1开始一直到$zd,读取出每个字段 的关键字和值
If $zd[$i] <> 'set' and $zd[$i] <> 'admin' Then ;此处为不创建字段信息为set的内容
IniDelete($dir,$zd[$i])
EndIf
Next
;MsgBox(262144,'','检查是否清理完成非admin和set')
;获取表格总行数
Local $lineAll = _GUICtrlListView_GetItemCount($iListView);取得数组的行数
For $ID = 0 To $lineAll - 1
$row = _GUICtrlListView_GetItemTextArray($iListview, $ID) ;获取全部文本和列数,从第一列开始
$UserName=$row
$Password=$row
$UserMode=$row
$PwMode=$row
$DEL =$row
If $DEL = '保留' Then
;如果为保留,则写入ini
If $UserName <> '' Then IniWrite($dir, $UserName,'PassWord',$Password)
If $UserMode = '男' Then
IniWrite($dir, $UserName,'UserMode',1)
Else
IniWrite($dir, $UserName,'UserMode',0)
EndIf
If $PwMode = '允许' Then
IniWrite($dir, $UserName,'PwMode',1)
Else
IniWrite($dir, $UserName,'PwMode',0)
EndIf
EndIf
Next
;~ _Ref() ;刷新
EndFunc
Func _Ref() ;刷新
GUICtrlDelete($iListView)
_Read()
EndFunc
Func __UdpData()
;~
If Not IsArray($aItem) Then Return
Local $sRd = GUICtrlRead($aItem), $sData = ''
_GUICtrlListView_SetItemText($hListView, $aItem, $sRd, $aItem)
GUICtrlSetPos($aItem, -1000, -100)
Dim $aItem = 0
EndFunc ;==>__UdpData
While 1
Sleep(1000)
WEnd
Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
Switch DllStructGetData($tNMHDR, 'hWndFrom')
Case $hListView
Switch DllStructGetData($tNMHDR, 'Code')
Case -2 ;$NM_CLICK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $index = DllStructGetData($tInfo, 'Index')
Local $SubItem = DllStructGetData($tInfo, 'SubItem')
If IsArray($aItem) Then
_GUICtrlListView_SetItemText($hListView, $aItem, GUICtrlRead($iCombo), $aItem)
GUICtrlSetPos($iCombo, -1000, -100)
Dim $aItem = 0
EndIf
;弹出菜单
If $index < 0 Then Return 'GUI_RUNDEFMSG'
If $SubItem = 3 Then
Local $context = GUICtrlCreateContextMenu(GUICtrlCreateDummy())
Dim $hMenu = GUICtrlGetHandle($context)
GUICtrlCreateMenuItem('男',$context)
GUICtrlCreateMenuItem('女',$context)
Local $iid = _GUICtrlMenu_TrackPopupMenu($hMenu, $hGui, -1, -1, 1, 1, 2)
If $iid Then _GUICtrlListView_SetItemText($hListView, $index, _GUICtrlMenu_GetItemText($hMenu, $iid, False), 3)
EndIf
If $SubItem = 4 Then
Local $context = GUICtrlCreateContextMenu(GUICtrlCreateDummy())
Dim $hMenu = GUICtrlGetHandle($context)
GUICtrlCreateMenuItem('允许',$context)
GUICtrlCreateMenuItem('禁止',$context)
Local $iid = _GUICtrlMenu_TrackPopupMenu($hMenu, $hGui, -1, -1, 1, 1, 2)
If $iid Then _GUICtrlListView_SetItemText($hListView, $index, _GUICtrlMenu_GetItemText($hMenu, $iid, False), 4)
EndIf
If $SubItem = 5 Then
Local $sName = _GUICtrlListView_GetItemText($hListView, $Index)
If MsgBox(48 + 4, '确认删除', '是否删除用户 "' & $sName & '" ?', 0, $hGUI) = 6 Then
_GUICtrlListView_DeleteItem($hListView, $Index)
IniDelete($dir, $sName)
EndIf
EndIf
;修改框
If Not StringRegExp($SubItem, "^(1|2)[ DISCUZ_CODE_0 ]quot;) Then Return 'GUI_RUNDEFMSG'
Local $aRect = _GUICtrlListView_GetSubItemRect($hListView, $index, $SubItem)
Dim $aItem = [$index, $SubItem]
Local $sDef = $sDefCombo1
If $SubItem = 1 Then $sDef = $sDefCombo2
Local $sData = _GUICtrlListView_GetItemText($hListView, $index, $SubItem)
;GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 32, $aRect - $aRect)
GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 4, $aRect - $aRect)
GUICtrlSetData($iCombo, '|' & $sData & '|' & $sDef, $sData)
GUICtrlSetState($iCombo, 256)
If $SubItem = 2 Then $sDef = $sDefCombo3
Local $sData = _GUICtrlListView_GetItemText($hListView, $index, $SubItem)
;GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 32, $aRect - $aRect)
GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 4, $aRect - $aRect)
GUICtrlSetData($iCombo, '|' & $sData & '|' & $sDef, $sData)
GUICtrlSetState($iCombo, 256)
Case -5 ;$NM_CLICK
Case $NM_DBLCLK ; 双击
EndSwitch
EndSwitch
EndFunc ;==>_WM_NOTIFY
Func _Exit()
Exit
EndFunc ;==>_Exit
anythinging 发表于 2020-12-26 22:23
A版,请教下,关于回车确认的功能,如果Opt('GUIOnEventMode', 0)的话,如何生效?
我现在只会用了笨方 ...
你这种方式已经是很简单的了。如果你习惯都采用消息模式那就将注册快捷键那段中的
Local $id1 = GUICtrlCreateDummy() 改为全局变量,即:
在上面声明 Global $id1
然后 Local $id1 = GUICtrlCreateDummy() 改为 Dim $id1 = GUICtrlCreateDummy()
最后你的消息循环中GUIGetMsg() 可以
Case $id1
__UdpData() 本帖最后由 afan 于 2020-12-7 22:16 编辑
;GUICtrlSetPos($iCombo ,矩形左上角 X 坐标+4 ,矩形左上角 Y 坐标+2 ,矩形左上角 Y 坐标+22 ,矩形右下角 X 坐标 - 矩形左上角 X 坐标)
以上红色部分是多余的。
GUICtrlSetData 帮助文档内容:
对于 Combo(组合框)或 List(列表)控件 :
如果"数据"为已存在的条目, 则将它设置为默认.
如果"数据"以 GUIDataSeparatorChar 开始或空串 "", 则前一条列表被销毁. 尾随的 GUIDataSeparatorChar 将被忽略.
GUIDataSeparatorChar 定义 GUICtrlSetData() 函数多个数据间的分隔字符. 默认分隔字符为 '|'.
也就是说以|开头设置数据可以覆写的形式更新下拉列表,否则会以追加的形式添加到下拉列表中,那样重复的内容就不知道有多少了。 本帖最后由 afan 于 2020-11-28 22:20 编辑
不需要创建ini文件,程序会自动生成
双击第2列可编辑输入框;双击第3列可选择下拉框;单击第4列可删除;任意处单击或回车可确认修改,写入ini
#include <GUIListView.au3>
Global $fIni = 'test.ini'
If Not FileExists($fIni) Then ;---- 没有测试文件就自动生成一个
Local $sData = '', $aN = ['张', '李', '王', '赵', '钱', '孙'], $aAdm = ['是', '否']
For $ii = 1 To 100
$sData &= '[' & $aN & $ii & ']' & @CRLF & 'PassWord=' & Random(111111, 999999, 1) & @CRLF & 'UserMode=' & $aAdm & @CRLF
Next
Local $hFO = FileOpen($fIni, 512 + 10)
FileWrite($hFO, $sData)
FileClose($hFO)
EndIf
Opt('GUIOnEventMode', 1)
Global $hGUI, $ListView1, $hListView1, $aItem, $iInput, $iComb
_GUICreate()
While 1
Sleep(1000)
WEnd
Func _GUICreate()
Dim $hGUI = GUICreate('Ini 数据管理', 300)
GUISetOnEvent(-3, '_Exit')
Dim $iInput = GUICtrlCreateInput('', -100, -100)
Dim $iComb = GUICtrlCreateCombo('', -100, -100, -1, -1, 3) ; $CBS_DROPDOWNLIST=0x0003
GUICtrlSetData(-1, '是|否')
Dim $ListView1 = GUICtrlCreateListView('用户名 |密码 |管理员权限|管理', 2, 20, 296, 350)
Dim $hListView1 = GUICtrlGetHandle(-1)
GUICtrlSetFont(-1, 11, 400, 0, '微软雅黑')
_LoadIni2LVW()
GUISetState()
Local $id1 = GUICtrlCreateDummy()
GUICtrlSetOnEvent(-1, '__UdpData')
Local $aAccelKeys = [['{Enter}', $id1]]
GUISetAccelerators($aAccelKeys)
GUIRegisterMsg(0x004E, '_WM_NOTIFY') ;$WM_NOTIFY = 0x004E
EndFunc ;==>_GUICreate
Func _LoadIni2LVW()
Local $aIni = IniReadSectionNames($fIni)
If @error Then Return SetError(1, 0, 0)
Local $ii, $sPassWord, $sUserMode
For $ii = 1 To $aIni
$sPassWord = IniRead($fIni, $aIni[$ii], 'PassWord', '')
$sUserMode = IniRead($fIni, $aIni[$ii], 'UserMode', '否')
GUICtrlCreateListViewItem(StringFormat('%s|%s|%s|删除', $aIni[$ii], $sPassWord, $sUserMode), $ListView1)
Next
EndFunc ;==>_LoadIni2LVW
Func __UdpData()
If Not IsArray($aItem) Then Return
Local $sRd = GUICtrlRead($aItem), $sData = ''
_GUICtrlListView_SetItemText($hListView1, $aItem, $sRd, $aItem)
Switch $aItem
Case 1
IniWrite($fIni, _GUICtrlListView_GetItemText($hListView1, $aItem), 'PassWord', $sRd)
Case 2
IniWrite($fIni, _GUICtrlListView_GetItemText($hListView1, $aItem), 'UserMode', $sRd)
EndSwitch
GUICtrlSetPos($aItem, -1000, -100)
Dim $aItem = 0
EndFunc ;==>__UdpData
Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
If HWnd(DllStructGetData($tNMHDR, 'hWndFrom')) <> $hListView1 Then Return 'GUI_RUNDEFMSG'
Switch DllStructGetData($tNMHDR, 'Code')
Case -2 ;$NM_CLICK = -2
If IsArray($aItem) Then
__UdpData()
Else
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $iIndex = DllStructGetData($tInfo, 'Index')
Local $iSub = DllStructGetData($tInfo, 'SubItem')
If $iSub = 3 Then
Local $sName = _GUICtrlListView_GetItemText($hListView1, $iIndex)
If MsgBox(48 + 4, '确认删除', '是否删除用户 "' & $sName & '" ?', 0, $hGUI) = 6 Then
_GUICtrlListView_DeleteItem($hListView1, $iIndex)
IniDelete($fIni, $sName)
EndIf
EndIf
EndIf
Case -3 ;$NM_DBLCLK = -3
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $iIndex = DllStructGetData($tInfo, 'Index')
Local $iSub = DllStructGetData($tInfo, 'SubItem')
Dim $aItem = 0
If $iSub <> 1 And $iSub <> 2 Then Return 'GUI_RUNDEFMSG'
Local $aRect = _GUICtrlListView_GetSubItemRect($hListView1, $iIndex, $iSub)
Local $sData = _GUICtrlListView_GetItemText($hListView1, $iIndex, $iSub)
If $iSub = 1 Then
Dim $aItem = [$iIndex, $iSub, $iInput]
Else
Dim $aItem = [$iIndex, $iSub, $iComb]
EndIf
GUICtrlSetData($aItem, $sData)
GUICtrlSetPos($aItem, $aRect + 4, $aRect + 22, $aRect - $aRect)
GUICtrlSetState($aItem, 256)
EndSwitch
EndFunc ;==>_WM_NOTIFY
Func _Exit()
Exit
EndFunc ;==>_Exit anythinging 发表于 2020-11-28 19:02
就是这个样子,可以修改,位置也对了,但不能填入
GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 2, $aRect - $aRect)
两个座标要一致
Local $ListView1 = GUICtrlCreateListView('', 2,2, 396, 258)
##################
GUICtrlSetPos($iCombo, $aRect + 4, $aRect +32, $aRect - $aRect)
两个座标要一致
Local $ListView1 = GUICtrlCreateListView('', 2,32, 396, 258) 修改座标就可以了
原:
GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 32, $aRect - $aRect)
修改为:
GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 4, $aRect - $aRect)
ini文件内容如下
UserName=王王
PassWord=123456
PwMode=1
UserMode=1
UserName=王1
PassWord=66666
PwMode=0
UserMode=1
UserName=王2
PassWord=123456
PwMode=0
UserMode=0
我是把版主大人的2个教程合到一个代码里,现在遇到了编辑框不正常。 chzj589 发表于 2020-11-27 22:01
修改座标就可以了
原:
GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 32, $aRect - $aRect) ...
位置和内容保存都存在问题,没认真看你的问题,
1:位置问题
修改座标:Local $ListView1 = GUICtrlCreateListView('', 2, 28, 396, 258)
2:内容保存问题
Case -2 ;$NM_CLICK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $index = DllStructGetData($tInfo, 'Index')
Local $SubItem = DllStructGetData($tInfo, 'SubItem')
If $index < 0 Then Return 'GUI_RUNDEFMSG'
If IsArray($aItem) Then
_GUICtrlListView_SetItemText($hListView, $aItem, GUICtrlRead($iCombo), $aItem)
GUICtrlSetPos($iCombo, -1000, -100)
Dim $aItem = 0
EndIf
本帖最后由 anythinging 于 2020-11-28 19:03 编辑
chzj589 发表于 2020-11-28 14:02
位置和内容保存都存在问题,没认真看你的问题,
1:位置问题
修改座标:Local $ListView1 = GUICtrlCreat ...
感谢指点,按照您的回复
修改座标就可以了
原:
GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 32, $aRect - $aRect)
修改为:
GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 4, $aRect - $aRect)
右键弹出菜单位置的问题已经解决了,但有个问题是编辑框能修改,但填不上。您第二个回复的代码我没弄懂,也没成功加进去
我把代码在1楼更新了下,还请指点
就是这个样子,可以修改,位置也对了,但不能填入
anythinging 发表于 2020-11-28 19:02
就是这个样子,可以修改,位置也对了,但不能填入
Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
Switch DllStructGetData($tNMHDR, 'hWndFrom')
Case $hListView
Switch DllStructGetData($tNMHDR, 'Code')
Case -2 ;$NM_CLICK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $index = DllStructGetData($tInfo, 'Index')
Local $SubItem = DllStructGetData($tInfo, 'SubItem')
If $index < 0 Then Return 'GUI_RUNDEFMSG'
If IsArray($aItem) Then
_GUICtrlListView_SetItemText($hListView, $aItem, GUICtrlRead($iCombo), $aItem)
GUICtrlSetPos($iCombo, -1000, -100)
Dim $aItem = 0
EndIf
If $SubItem = 3 Then
Local $context = GUICtrlCreateContextMenu(GUICtrlCreateDummy())
Dim $hMenu = GUICtrlGetHandle($context)
GUICtrlCreateMenuItem('男', $context)
GUICtrlCreateMenuItem('女', $context)
Local $iid = _GUICtrlMenu_TrackPopupMenu($hMenu, $hGui, -1, -1, 1, 1, 2)
If $iid Then _GUICtrlListView_SetItemText($hListView, $index, _GUICtrlMenu_GetItemText($hMenu, $iid, False), 3)
EndIf
If $SubItem = 4 Then
Local $context = GUICtrlCreateContextMenu(GUICtrlCreateDummy())
Dim $hMenu = GUICtrlGetHandle($context)
GUICtrlCreateMenuItem('可以修改', $context)
GUICtrlCreateMenuItem('不能修改', $context)
Local $iid = _GUICtrlMenu_TrackPopupMenu($hMenu, $hGui, -1, -1, 1, 1, 2)
If $iid Then _GUICtrlListView_SetItemText($hListView, $index, _GUICtrlMenu_GetItemText($hMenu, $iid, False), 4)
EndIf
If $SubItem = 6 Then
;创建右键菜单
Local $context = GUICtrlCreateContextMenu(GUICtrlCreateDummy())
Dim $hMenu = GUICtrlGetHandle($context)
GUICtrlCreateMenuItem('保留', $context)
GUICtrlCreateMenuItem('删除', $context)
Local $iid = _GUICtrlMenu_TrackPopupMenu($hMenu, $hGui, -1, -1, 1, 1, 2)
If $iid Then _GUICtrlListView_SetItemText($hListView, $index, _GUICtrlMenu_GetItemText($hMenu, $iid, False), 6) ;最后的2,是列的意思 ,就是将选中的内容填入到第2列
EndIf
Case -5 ;$NM_CLICK
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $iIndex = DllStructGetData($tInfo, 'Index')
Local $iSub = DllStructGetData($tInfo, 'SubItem')
Dim $aItem = 0
If Not StringRegExp($iSub, "^(1|2)$") Then Return 'GUI_RUNDEFMSG'
Local $aRect = _GUICtrlListView_GetSubItemRect($hListView, $iIndex, $iSub)
Dim $aItem = [$iIndex, $iSub]
Local $sDef = $sDefCombo1
If $iSub = 1 Then $sDef = $sDefCombo2
Local $sData = _GUICtrlListView_GetItemText($hListView, $iIndex, $iSub)
GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 2, $aRect - $aRect)
GUICtrlSetData($iCombo, '|' & $sData & '|' & $sDef, $sData)
GUICtrlSetState($iCombo, 256)
If $iSub = 2 Then $sDef = $sDefCombo3
Local $sData = _GUICtrlListView_GetItemText($hListView, $iIndex, $iSub)
GUICtrlSetPos($iCombo, $aRect + 4, $aRect + 2, $aRect - $aRect)
GUICtrlSetData($iCombo, '|' & $sData & '|' & $sDef, $sData)
GUICtrlSetState($iCombo, 256)
EndSwitch
EndSwitch
EndFunc ;==>_WM_NOTIFY
anythinging 发表于 2020-11-28 19:02
就是这个样子,可以修改,位置也对了,但不能填入
A版的代码你没有完全理解,不然不会出错。 chzj589 发表于 2020-11-28 19:27
Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $tNMH ...
感谢指点,我按照您这个代码运行,会提示警告: $aItem: 可能使用在声明之前
在上面加了一个 Dim $aItem = 0也不行。
If IsArray($aItem) Then
_GUICtrlListView_SetItemText($hListView, $aItem, GUICtrlRead($iCombo), $aItem)
GUICtrlSetPos($iCombo, -1000, -100)
Dim $aItem = 0
EndIf chzj589 发表于 2020-11-28 19:38
A版的代码你没有完全理解,不然不会出错。
惭愧,以目前的水平,看A版的代码基本上晕晕的,但是真好用,目前仅能做简单的引用修改。 关于这个问题,我截了个动图,可能看的比较直观。
anythinging 发表于 2020-11-28 20:00
惭愧,以目前的水平,看A版的代码基本上晕晕的,但是真好用,目前仅能做简单的引用修改。
#include <GUIListView.au3>
#include <GuiMenu.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <ButtonConstants.au3>
#include <ListViewConstants.au3>
Opt('GUIOnEventMode', 1)
Global $hGui, $hListView, $hMenu, $aItem, $iCombo