国际棋牌

 
 加入
查看: 2124|回复: 14

【已解决】关于独立窗口使用combo组件编辑listview表格的问题-国际棋牌

发表于 2021-4-11 13:31:22 | |
本帖最后由 anythinging 于 2021-4-14 13:53 编辑

各位朋友 ,我在编辑listview表格时遇到个问题,其中有几个表格内容比较多,需要独立弹出窗口再加载listview进入编辑等操作,在新窗口中弹出菜单操作正常,但通过icombo编辑的时候会无法定位到新弹出的listview中。尝试过更改创建icombo在主窗口或子窗口置等方法没有效果。
最后在新弹出的窗口创建并调用icombo2解决了,想求证下是此方法是否够正规,另请教教科书的方法?谢谢!
问题代码:编辑listview2时无法定位
  1. #notrayicon

  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include

  10. global $hgui, $hguisub
  11. global $hgui, $listview1, $hlistview1, $listview2, $hlistview2, $aitem, $iinput, $icombo,$icombo2
  12. global $hmenu
  13. opt("guioneventmode", 1)

  14. creategui()
  15. ;~ createguisub2()
  16. func creategui()
  17.         $hgui = guicreate("主窗口", 1200, 600, -1, -1, bitor($ws_minimizebox, $ws_caption, $ws_popup, $ws_sysmenu, $ws_sizebox))
  18.         guisetonevent($gui_event_close, "_exit")
  19.         guisetstate()

  20.                 local $idtreeview = guictrlcreatetreeview(2, 3, 200, 400, bitor($tvs_hasbuttons, $tvs_haslines, $tvs_linesatroot, $tvs_disabledragdrop, $tvs_showselalways), $ws_ex_clientedge)
  21.         local $idtreeviewa1 = guictrlcreatetreeviewitem("treea1", $idtreeview)
  22.         guictrlsetonevent(-1, 'treea1')
  23.                 local $idtreeviewa2 = guictrlcreatetreeviewitem("treea2", $idtreeview)
  24.         guictrlsetonevent(-1, 'treea2')

  25.         local $id1 = guictrlcreatedummy()
  26.         guictrlsetonevent(-1, '_udpdata')
  27.         local $aaccelkeys[1][2] = [['{enter}', $id1]]
  28.         guisetaccelerators($aaccelkeys)

  29.                 dim $icombo = guictrlcreatecombo('', -100, -100)
  30.                    dim $icombo2 = guictrlcreatecombo('', -100, -100)

  31.                 guiregistermsg(0x004e, '_wm_notify') ;$wm_notify = 0x004e

  32.                 local $context = guictrlcreatecontextmenu(guictrlcreatedummy())
  33.         dim $hmenu = guictrlgethandle($context)
  34.         guictrlcreatemenuitem('男', $context)
  35.         guictrlcreatemenuitem('女', $context)

  36. endfunc   ;==>creategui

  37. func createguisub1();-------------------------        子窗口 1   ------------------------------
  38.         $hguisub = guicreate("子窗口1", 1000, 600, 201, 1, $ws_child, $ws_ex_clientedge, $hgui)
  39.                 guisetbkcolor(0x4682b4)
  40.         guisetstate()
  41.                 guisetonevent($gui_event_close, "_sub1close")
  42.         _listview1()
  43. endfunc   ;==>createguisub1

  44. func createguisub2();-------------------------        子窗口 2   ------------------------------
  45.                 $hguisub = guicreate("子窗口2", 1000, 600, -1,-1)
  46.         guisetbkcolor(0x4682b4)
  47.         guisetstate()
  48.                 guisetonevent($gui_event_close, "_sub1close")
  49.       _listview2()
  50. endfunc   ;==>createguisub1

  51. while 1
  52.         sleep(10)
  53. wend

  54. func treea1()
  55.         if isarray($aitem) then
  56.                 _udpdata()
  57.                 endif
  58. ;~         guidelete($hguisub)
  59. ;~         guisetstate(@sw_disable,$hgui)
  60.                 createguisub1()
  61. endfunc   ;==>treea1

  62. func treea2()
  63.         if isarray($aitem) then
  64.                 _udpdata()
  65.                 endif
  66. ;~         guidelete($hguisub)
  67.         guisetstate(@sw_disable,$hgui)
  68.                 createguisub2()
  69. endfunc   ;==>treea2

  70. func _listview1()
  71.         dim $listview1 = guictrlcreatelistview('用户名1 | 密码1 |性别|管理', 1, 2, 596, 350)
  72.         dim $hlistview1 = guictrlgethandle(-1)
  73.         for $i = 1 to 10
  74.                 guictrlcreatelistviewitem('' & $i & '|111111|男|删除', $listview1)
  75.         next
  76. endfunc   ;==>_listview1

  77. func _listview2()
  78.         dim $listview2 = guictrlcreatelistview('用户名2 | 密码2 |性别|管理', 1, 2, 596, 350)
  79.         dim $hlistview2 = guictrlgethandle(-1)
  80.         for $i = 1 to 10
  81.                 guictrlcreatelistviewitem('' & $i & '|222222|女|删除', $listview2)
  82.         next
  83. endfunc   ;==>_listview2

  84. func _sub1close()
  85.         guisetstate(@sw_enable,$hgui)
  86.                 guidelete($hguisub)
  87. endfunc   ;==>_sub1close


  88. func _udpdata()
  89.         if not isarray($aitem) then return
  90.         local $srd = guictrlread($icombo), $sdata = ''
  91.         _guictrllistview_setitemtext($hlistview1, $aitem[0], $srd, $aitem[1])
  92.         guictrlsetpos($icombo, -1000, -100)
  93.         dim $aitem = 0
  94. endfunc   ;==>_udpdata

  95. func _wm_notify($hwnd, $imsg, $iwparam, $ilparam)
  96.         #forceref $hwnd, $imsg, $iwparam
  97.         local $tnmhdr = dllstructcreate($tagnmhdr, $ilparam)
  98.         $hwndfrom = hwnd(dllstructgetdata($tnmhdr, "hwndfrom"))
  99.         $iidfrom = dllstructgetdata($tnmhdr, "idfrom")
  100.         $icode = dllstructgetdata($tnmhdr, "code")
  101.         switch dllstructgetdata($tnmhdr, 'hwndfrom')
  102.                 case $hlistview1

  103.                         switch $icode
  104.                                 case -2 ;$nm_click = -2
  105.                                         if isarray($aitem) then
  106.                                                 _udpdata()
  107.                                         endif
  108.                                         local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  109.                                         local $index = dllstructgetdata($tinfo, 'index')
  110.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  111.                                         if $subitem = 2 then
  112.                                                 local $iid = _guictrlmenu_trackpopupmenu($hmenu, $hgui, -1, -1, 1, 1, 2)
  113.                                                 if $iid then _guictrllistview_setitemtext($hlistview1, $index, _guictrlmenu_getitemtext($hmenu, $iid, false), 2)
  114.                                                                                 endif
  115.                                 case -3 ;$nm_dblclk = -3
  116.                                         local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  117.                                         local $index = dllstructgetdata($tinfo, 'index')
  118.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  119.                                         dim $aitem = 0
  120.                                         local $arect = _guictrllistview_getsubitemrect($hlistview1, $index, $subitem)
  121.                                         dim $aitem[2] = [$index, $subitem]
  122.                                         local $sdef ;设置菜单
  123.                                         global $sdata = _guictrllistview_getitemtext($hlistview1, $index, $subitem)
  124.                                         guictrlsetpos($icombo, $arect[0] 204, $arect[1] 8, $arect[2] - $arect[0])
  125.                                         guictrlsetdata($icombo, '|' & $sdata, $sdata)
  126.                                         guictrlsetstate($icombo, 256)
  127.                                                 endswitch

  128.                                 case $hlistview2
  129.                                                          switch $icode
  130.                                 case -2 ;$nm_click = -2
  131.                                         if isarray($aitem) then
  132.                                                 _udpdata()
  133.                                         endif
  134.                                         local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  135.                                         local $index = dllstructgetdata($tinfo, 'index')
  136.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  137.                                         if $subitem = 2 then
  138.                                                 local $iid = _guictrlmenu_trackpopupmenu($hmenu, $hgui, -1, -1, 1, 1, 2)
  139.                                                 if $iid then _guictrllistview_setitemtext($hlistview2, $index, _guictrlmenu_getitemtext($hmenu, $iid, false), 2)
  140.                                                                                 endif
  141.                                                                  case -3 ;$nm_dblclk = -3
  142.                                                                                 local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  143.                                         local $index = dllstructgetdata($tinfo, 'index')
  144.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  145.                                         dim $aitem = 0
  146.                                         local $arect = _guictrllistview_getsubitemrect($hlistview2, $index, $subitem)
  147.                                         dim $aitem[2] = [$index, $subitem]
  148.                                         local $sdef = ('1|2|3') ;设置菜单
  149.                                         global $sdata = _guictrllistview_getitemtext($hlistview2, $index, $subitem)
  150.                                         guictrlsetpos($icombo, $arect[0] 4, $arect[1] 2, $arect[2] - $arect[0])
  151.                                         guictrlsetdata($icombo, '|' & $sdata&'|'&$sdef        , $sdata)
  152.                                         guictrlsetstate($icombo, 256)
  153.                                 endswitch
  154.         endswitch
  155. endfunc   ;==>_wm_notify

  156. func _exit()
  157.         exit
  158. endfunc   ;==>_exit
复制代码



解决代码求证:使用icombo2
  1. #notrayicon

  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include

  10. global $hgui, $hguisub
  11. global $hgui, $listview1, $hlistview1, $listview2, $hlistview2, $aitem, $iinput, $icombo,$icombo2
  12. global $hmenu
  13. opt("guioneventmode", 1)

  14. creategui()
  15. ;~ createguisub2()
  16. func creategui()
  17.         $hgui = guicreate("主窗口", 1200, 600, -1, -1, bitor($ws_minimizebox, $ws_caption, $ws_popup, $ws_sysmenu, $ws_sizebox))
  18.         guisetonevent($gui_event_close, "_exit")
  19.         guisetstate()

  20.                 local $idtreeview = guictrlcreatetreeview(2, 3, 200, 400, bitor($tvs_hasbuttons, $tvs_haslines, $tvs_linesatroot, $tvs_disabledragdrop, $tvs_showselalways), $ws_ex_clientedge)
  21.         local $idtreeviewa1 = guictrlcreatetreeviewitem("treea1", $idtreeview)
  22.         guictrlsetonevent(-1, 'treea1')
  23.                 local $idtreeviewa2 = guictrlcreatetreeviewitem("treea2", $idtreeview)
  24.         guictrlsetonevent(-1, 'treea2')

  25.         local $id1 = guictrlcreatedummy()
  26.         guictrlsetonevent(-1, '_udpdata')
  27.         local $aaccelkeys[1][2] = [['{enter}', $id1]]
  28.         guisetaccelerators($aaccelkeys)

  29.                 dim $icombo = guictrlcreatecombo('', -100, -100)

  30.                 guiregistermsg(0x004e, '_wm_notify') ;$wm_notify = 0x004e

  31.                 local $context = guictrlcreatecontextmenu(guictrlcreatedummy())
  32.         dim $hmenu = guictrlgethandle($context)
  33.         guictrlcreatemenuitem('男', $context)
  34.         guictrlcreatemenuitem('女', $context)

  35. endfunc   ;==>creategui

  36. func createguisub1();-------------------------        子窗口 1   ------------------------------
  37.         $hguisub = guicreate("子窗口1", 1000, 600, 201, 1, $ws_child, $ws_ex_clientedge, $hgui)
  38.                 guisetbkcolor(0x4682b4)
  39.         guisetstate()
  40.                 guisetonevent($gui_event_close, "_sub1close")
  41.         _listview1()
  42. endfunc   ;==>createguisub1

  43. func createguisub2();-------------------------        子窗口 2   ------------------------------
  44.                 $hguisub = guicreate("子窗口2", 1000, 600, -1,-1)
  45.         guisetbkcolor(0x4682b4)
  46.         guisetstate()
  47.                 guisetonevent($gui_event_close, "_sub1close")
  48.                    dim $icombo2 = guictrlcreatecombo('', -100, -100)
  49.       _listview2()
  50. endfunc   ;==>createguisub1

  51. while 1
  52.         sleep(10)
  53. wend

  54. func treea1()
  55.         if isarray($aitem) then
  56.                 _udpdata()
  57.                 endif
  58. ;~         guidelete($hguisub)
  59. ;~         guisetstate(@sw_disable,$hgui)
  60.                 createguisub1()
  61. endfunc   ;==>treea1

  62. func treea2()
  63.         if isarray($aitem) then
  64.                 _udpdata()
  65.                 endif
  66. ;~         guidelete($hguisub)
  67.         guisetstate(@sw_disable,$hgui)
  68.                 createguisub2()
  69. endfunc   ;==>treea2

  70. func _listview1()
  71.         dim $listview1 = guictrlcreatelistview('用户名1 | 密码1 |性别|管理', 1, 2, 596, 350)
  72.         dim $hlistview1 = guictrlgethandle(-1)
  73.         for $i = 1 to 10
  74.                 guictrlcreatelistviewitem('' & $i & '|111111|男|删除', $listview1)
  75.         next
  76. endfunc   ;==>_listview1

  77. func _listview2()
  78.         dim $listview2 = guictrlcreatelistview('用户名2 | 密码2 |性别|管理', 1, 2, 596, 350)
  79.         dim $hlistview2 = guictrlgethandle(-1)
  80.         for $i = 1 to 10
  81.                 guictrlcreatelistviewitem('' & $i & '|222222|女|删除', $listview2)
  82.         next
  83. endfunc   ;==>_listview2

  84. func _sub1close()
  85.         guisetstate(@sw_enable,$hgui)
  86.                 guidelete($hguisub)
  87. endfunc   ;==>_sub1close


  88. func _udpdata()
  89.         if not isarray($aitem) then return
  90.         local $srd = guictrlread($icombo), $sdata = ''
  91.         _guictrllistview_setitemtext($hlistview1, $aitem[0], $srd, $aitem[1])
  92.         guictrlsetpos($icombo, -1000, -100)
  93.         dim $aitem = 0
  94. endfunc   ;==>_udpdata

  95. func _wm_notify($hwnd, $imsg, $iwparam, $ilparam)
  96.         #forceref $hwnd, $imsg, $iwparam
  97.         local $tnmhdr = dllstructcreate($tagnmhdr, $ilparam)
  98.         $hwndfrom = hwnd(dllstructgetdata($tnmhdr, "hwndfrom"))
  99.         $iidfrom = dllstructgetdata($tnmhdr, "idfrom")
  100.         $icode = dllstructgetdata($tnmhdr, "code")
  101.         switch dllstructgetdata($tnmhdr, 'hwndfrom')
  102.                 case $hlistview1

  103.                         switch $icode
  104.                                 case -2 ;$nm_click = -2
  105.                                         if isarray($aitem) then
  106.                                                 _udpdata()
  107.                                         endif
  108.                                         local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  109.                                         local $index = dllstructgetdata($tinfo, 'index')
  110.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  111.                                         if $subitem = 2 then
  112.                                                 local $iid = _guictrlmenu_trackpopupmenu($hmenu, $hgui, -1, -1, 1, 1, 2)
  113.                                                 if $iid then _guictrllistview_setitemtext($hlistview1, $index, _guictrlmenu_getitemtext($hmenu, $iid, false), 2)
  114.                                                                                 endif
  115.                                 case -3 ;$nm_dblclk = -3
  116.                                         local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  117.                                         local $index = dllstructgetdata($tinfo, 'index')
  118.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  119.                                         dim $aitem = 0
  120.                                         local $arect = _guictrllistview_getsubitemrect($hlistview1, $index, $subitem)
  121.                                         dim $aitem[2] = [$index, $subitem]
  122.                                         local $sdef ;设置菜单
  123.                                         global $sdata = _guictrllistview_getitemtext($hlistview1, $index, $subitem)
  124.                                         guictrlsetpos($icombo, $arect[0] 204, $arect[1] 8, $arect[2] - $arect[0])
  125.                                         guictrlsetdata($icombo, '|' & $sdata, $sdata)
  126.                                         guictrlsetstate($icombo, 256)
  127.                                                 endswitch

  128.                                 case $hlistview2
  129.                                                          switch $icode
  130.                                 case -2 ;$nm_click = -2
  131.                                         if isarray($aitem) then
  132.                                                 _udpdata()
  133.                                         endif
  134.                                         local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  135.                                         local $index = dllstructgetdata($tinfo, 'index')
  136.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  137.                                         if $subitem = 2 then
  138.                                                 local $iid = _guictrlmenu_trackpopupmenu($hmenu, $hgui, -1, -1, 1, 1, 2)
  139.                                                 if $iid then _guictrllistview_setitemtext($hlistview2, $index, _guictrlmenu_getitemtext($hmenu, $iid, false), 2)
  140.                                                                                 endif
  141.                                                                  case -3 ;$nm_dblclk = -3
  142.                                                                                 local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  143.                                         local $index = dllstructgetdata($tinfo, 'index')
  144.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  145.                                         dim $aitem = 0
  146.                                         local $arect = _guictrllistview_getsubitemrect($hlistview2, $index, $subitem)
  147.                                         dim $aitem[2] = [$index, $subitem]
  148.                                         local $sdef = ('1|2|3') ;设置菜单
  149.                                         global $sdata = _guictrllistview_getitemtext($hlistview2, $index, $subitem)
  150.                                         guictrlsetpos($icombo2, $arect[0] 4, $arect[1] 2, $arect[2] - $arect[0])
  151.                                         guictrlsetdata($icombo2, '|' & $sdata&'|'&$sdef        , $sdata)
  152.                                         guictrlsetstate($icombo2, 256)
  153.                                 endswitch
  154.         endswitch
  155. endfunc   ;==>_wm_notify

  156. func _exit()
  157.         exit
  158. endfunc   ;==>_exit
复制代码






发表于 2021-4-11 19:37:01 |

由于之前没学过编程基础,是从0开始学au3,不知有多少我这样的朋友?
现在总是缺乏信心,多谢各位的指点! ...

我就是0基础
发表于 2021-4-11 15:21:04 |
每次点击树treea1 都会创建一次子窗口1及其列表,点多少次创建多少次……  老问题多次提醒,不再重复解释。
创建子窗口2之后,虽然新建了$icombo2 没问题,但 _udpdata 都是1的数据,回车也不会响应。
之前给你的例子,listview是设置了字体的,实质是为了约束combobox坐标,可能在你自己的电脑看不出问题。
还有在第一列弹出的combobox宽度也不对,这些之前都有示例,可惜……
问题不少。
 楼主| 发表于 2021-4-11 15:37:28 |
本帖最后由 anythinging 于 2021-4-11 15:44 编辑

每次点击树treea1 都会创建一次子窗口1及其列表,点多少次创建多少次……  老问题多次提醒,不再重复解释。 ...

感谢回复,我发的是精简下来的代码,主要是表现listview在新生成的窗口中双击修改定位的情况原代码的treea1,treea2打开前会删除之前的子窗口,再新建一个同名子窗口及加载listview
update部份没改,我尝试解决下
第一列弹出的宽度问题,之前您特意指点过,暂时没加上去
 楼主| 发表于 2021-4-11 16:37:22 |
本帖最后由 anythinging 于 2021-4-11 16:39 编辑

这个是我更新过的代码
1、更新updata,支持2个listview回车确认,用了2个$aaccelkeys[1][2]分别实现2个listvew的响应,是否有更好的方法?
2、座标修正
3、双击第1列屏蔽(偷懒了,实际 使用中我把第1列设置为序号了,就不需要修改了)
4、之前都是用的子窗口 表格,想请教同时有子窗口 表格 和独立窗口 表格的情况下,能否只用一个icombo?
5、dim $icombo = guictrlcreatecombo('', -100, -100)  和  $aaccelkeys[1][2] = 这2句代码是否是只在主窗口及子gui中生效?


更正代码如下
  1. #notrayicon

  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include

  10. global $hgui, $hguisub
  11. global $hgui, $listview1, $hlistview1, $listview2, $hlistview2, $aitem, $iinput, $icombo,$icombo2
  12. global $hmenu
  13. global $num

  14. opt("guioneventmode", 1)

  15. creategui()
  16. createguisub1()

  17. func creategui()
  18.         $hgui = guicreate("主窗口", 1200, 600, -1, -1, bitor($ws_minimizebox, $ws_caption, $ws_popup, $ws_sysmenu, $ws_sizebox))
  19.         guisetonevent($gui_event_close, "_exit")
  20.         guisetstate()

  21.                 local $idtreeview = guictrlcreatetreeview(2, 3, 200, 400, bitor($tvs_hasbuttons, $tvs_haslines, $tvs_linesatroot, $tvs_disabledragdrop, $tvs_showselalways), $ws_ex_clientedge)
  22.         local $idtreeviewa1 = guictrlcreatetreeviewitem("treea1", $idtreeview)
  23.         guictrlsetonevent(-1, 'treea1')
  24.                 local $idtreeviewa2 = guictrlcreatetreeviewitem("treea2", $idtreeview)
  25.         guictrlsetonevent(-1, 'treea2')

  26.         local $id1 = guictrlcreatedummy()
  27.         guictrlsetonevent(-1, '_udpdata')
  28.         local $aaccelkeys[1][2] = [['{enter}', $id1]]
  29.         guisetaccelerators($aaccelkeys)


  30. ;~                 dim $icombo = guictrlcreatecombo('', -100, -100)

  31.                 guiregistermsg(0x004e, '_wm_notify') ;$wm_notify = 0x004e

  32.                 local $context = guictrlcreatecontextmenu(guictrlcreatedummy())
  33.         dim $hmenu = guictrlgethandle($context)
  34.         guictrlcreatemenuitem('男', $context)
  35.         guictrlcreatemenuitem('女', $context)

  36. endfunc   ;==>creategui

  37. func createguisub1();-------------------------        子窗口 1   ------------------------------
  38.         $hguisub = guicreate("子窗口1", 1000, 600, 201, 1, $ws_child, $ws_ex_clientedge, $hgui)
  39.                 guisetbkcolor(0x4682b4)
  40.         guisetstate()
  41.                 guisetonevent($gui_event_close, "_sub1close")
  42.                    dim $icombo = guictrlcreatecombo('', -100, -100)

  43.                 _listview1()
  44.                 $num = 1
  45. endfunc   ;==>createguisub

  46. func createguisub2();-------------------------        子窗口 2   ------------------------------
  47.                 $hguisub = guicreate("子窗口2", 1000, 600, -1,-1)
  48.         guisetonevent($gui_event_close, "_sub1close")
  49.                 guisetbkcolor(0x4682b4)
  50.         guisetstate()

  51.                 local $id2 = guictrlcreatedummy()
  52.         guictrlsetonevent(-1, '_udpdata')
  53.         local $aaccelkeys[1][2] = [['{enter}', $id2]]
  54.         guisetaccelerators($aaccelkeys)

  55.                 dim $icombo2 = guictrlcreatecombo('', -100, -100)
  56.                 _listview2()
  57.                 $num = 2
  58. endfunc   ;==>createguisub

  59. while 1
  60.         sleep(10)
  61. wend

  62. func treea1()
  63.        if isarray($aitem) then
  64.                 _udpdata()
  65.                 endif
  66.         guidelete($hguisub)
  67.                 createguisub1()

  68. endfunc   ;==>treea1

  69. func treea2()
  70.         if isarray($aitem) then
  71.                 _udpdata()
  72.                 endif
  73.         guidelete($hguisub)
  74.         guisetstate(@sw_disable,$hgui)
  75.                 createguisub2()
  76. endfunc   ;==>treea2

  77. func _listview1()
  78.         dim $listview1 = guictrlcreatelistview('用户名1 | 密码1 |性别|管理', 1, 2, 596, 350)
  79.         dim $hlistview1 = guictrlgethandle(-1)
  80.         for $i = 1 to 10
  81.                         guictrlcreatelistviewitem('' & $i & '|111111|男|删除', $listview1)
  82.         next
  83. endfunc   ;==>_listview1

  84. func _listview2()
  85.         dim $listview2 = guictrlcreatelistview('用户名2 | 密码2 |性别|管理', 1, 2, 596, 350)
  86.         dim $hlistview2 = guictrlgethandle(-1)
  87.         for $i = 1 to 10
  88.                         guictrlcreatelistviewitem('' & $i & '|222222|女|删除', $listview2)
  89.         next
  90. endfunc   ;==>_listview2

  91. func _sub1close()
  92.         guisetstate(@sw_enable,$hgui)
  93.                 guidelete($hguisub)
  94. endfunc   ;==>_sub1close


  95. func _udpdata()
  96.         if not isarray($aitem) then return
  97.         switch $num
  98.                         case 1
  99.                                 local $srd = guictrlread($icombo), $sdata = ''
  100.                                 _guictrllistview_setitemtext($hlistview1, $aitem[0], $srd, $aitem[1])
  101.                                  guictrlsetpos($icombo, -1000, -100)
  102.                         case 2
  103.                                 local $srd = guictrlread($icombo2), $sdata = ''
  104.                                 _guictrllistview_setitemtext($hlistview2, $aitem[0], $srd, $aitem[1])
  105.                                  guictrlsetpos($icombo2, -1000, -100)
  106.                 endswitch

  107.                 dim $aitem = 0
  108. endfunc   ;==>_udpdata

  109. func _wm_notify($hwnd, $imsg, $iwparam, $ilparam)
  110.         #forceref $hwnd, $imsg, $iwparam
  111.         local $tnmhdr = dllstructcreate($tagnmhdr, $ilparam)
  112.         $hwndfrom = hwnd(dllstructgetdata($tnmhdr, "hwndfrom"))
  113.         $iidfrom = dllstructgetdata($tnmhdr, "idfrom")
  114.         $icode = dllstructgetdata($tnmhdr, "code")
  115.         switch dllstructgetdata($tnmhdr, 'hwndfrom')
  116.                 case $hlistview1
  117.                         switch $icode
  118.                                 case -2 ;$nm_click = -2
  119.                                         if isarray($aitem) then
  120.                                                 _udpdata()
  121.                                         endif
  122.                                         local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  123.                                         local $index = dllstructgetdata($tinfo, 'index')
  124.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  125.                                         if $subitem = 2 then
  126.                                                 local $iid = _guictrlmenu_trackpopupmenu($hmenu, $hgui, -1, -1, 1, 1, 2)
  127.                                                 if $iid then _guictrllistview_setitemtext($hlistview1, $index, _guictrlmenu_getitemtext($hmenu, $iid, false), 2)
  128.                                                                                 endif
  129.                                 case -3 ;$nm_dblclk = -3
  130.                                         local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  131.                                         local $index = dllstructgetdata($tinfo, 'index')
  132.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  133.                                         if $subitem = 0 then return
  134.                                                                                 dim $aitem = 0
  135.                                         local $arect = _guictrllistview_getsubitemrect($hlistview1, $index, $subitem)
  136.                                         dim $aitem[2] = [$index, $subitem]
  137.                                         local $sdef ;设置菜单
  138.                                         global $sdata = _guictrllistview_getitemtext($listview1, $index, $subitem)
  139.                                         guictrlsetpos($icombo, $arect[0] 4, $arect[1] 8, $arect[2] - $arect[0])
  140.                                         guictrlsetdata($icombo, '|' & $sdata, $sdata)
  141.                                         guictrlsetstate($icombo, 256)
  142.                                                 endswitch
  143.                                 case $hlistview2
  144.                                                 switch $icode
  145.                                 case -2 ;$nm_click = -2
  146.                                         if isarray($aitem) then
  147.                                                 _udpdata()
  148.                                         endif
  149.                                         local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  150.                                         local $index = dllstructgetdata($tinfo, 'index')
  151.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  152.                                         if $subitem = 2 then
  153.                                                 local $iid = _guictrlmenu_trackpopupmenu($hmenu, $hgui, -1, -1, 1, 1, 2)
  154.                                                 if $iid then _guictrllistview_setitemtext($hlistview2, $index, _guictrlmenu_getitemtext($hmenu, $iid, false), 2)
  155.                                                                                 endif
  156.                                                                  case -3 ;$nm_dblclk = -3
  157.                                                                                 local $tinfo = dllstructcreate($tagnmitemactivate, $ilparam)
  158.                                         local $index = dllstructgetdata($tinfo, 'index')
  159.                                         local $subitem = dllstructgetdata($tinfo, 'subitem')
  160.                                                                                 if $subitem = 0 then return
  161.                                                                                 dim $aitem = 0
  162.                                         local $arect = _guictrllistview_getsubitemrect($hlistview2, $index, $subitem)
  163.                                         dim $aitem[2] = [$index, $subitem]
  164.                                         local $sdef = ('1|2|3') ;设置菜单
  165.                                         global $sdata = _guictrllistview_getitemtext($hlistview2, $index, $subitem)
  166.                                         guictrlsetpos($icombo2, $arect[0] 4, $arect[1] 2, $arect[2] - $arect[0])
  167.                                         guictrlsetdata($icombo2, '|' & $sdata&'|'&$sdef        , $sdata)
  168.                                         guictrlsetstate($icombo2, 256)
  169.                                                 endswitch
  170.         endswitch
  171. endfunc   ;==>_wm_notify

  172. func _exit()
  173.         exit
  174. endfunc   ;==>_exit
复制代码


发表于 2021-4-11 18:48:13 |
1、更新updata,支持2个listview回车确认,用了2个$aaccelkeys[1][2]分别实现2个listvew的响应,是否有更好的方法?
没有更好的方法(定义为函数调用也行),独立的窗口都要单独设置快捷键。
3、双击第1列屏蔽(偷懒了,实际 使用中我把第1列设置为序号了,就不需要修改了)
屏蔽是正解,不需要的操作一定要拦截。
4、之前都是用的子窗口 表格,想请教同时有子窗口 表格 和独立窗口 表格的情况下,能否只用一个icombo?
控件不能跨窗口单独显示。为什么要只用一个?
5、dim $icombo = guictrlcreatecombo('', -100, -100)  和  $aaccelkeys[1][2] = 这2句代码是否是只在主窗口及子gui中生效?
上贴的问题还没搞清楚?guictrlcreate* 一定要有窗口,没有窗口单独创建控件一定会失败。如果你进行某个操作时新创建了窗口,之后关闭时又删除了该窗口,此时任何guictrlcreate*都会失败。它可不会自行找到主窗口去创建,需要你指定,比如用 guiswitch(主窗口)

点评

听您一席话,令我茅塞顿开,感谢指点!  发表于 2021-4-11 19:18
 楼主| 发表于 2021-4-11 19:18:31 |

1、更新updata,支持2个listview回车确认,用了2个$aaccelkeys[1][2]分别实现2个listvew的响应,是否有更好 ...

请教a版四楼的代码没什么大问题了吧?想以后我就当模板用了
发表于 2021-4-11 19:25:24 |

请教a版四楼的代码没什么大问题了吧?想以后我就当模板用了

问题我基本上在上面都提到了,解决了当然可以。
符合自己的编程习惯就不错
 楼主| 发表于 2021-4-11 19:26:33 |
由于之前没学过编程基础,是从0开始学au3,不知有多少我这样的朋友?
现在总是缺乏信心,多谢各位的指点!给我继续学习下去的勇气
 楼主| 发表于 2021-4-11 19:34:17 |
其实还有一件事挺担忧的,指点问题的基本就是a版、chzj589等少数,如果没有几位的指点,象我这种新人可以说是寸步难行,恐怕早早放弃了。
祝论坛的所有朋友都开开心心,笑口常开!
 楼主| 发表于 2021-4-11 21:26:45 |
本帖最后由 anythinging 于 2021-4-11 21:32 编辑

请教a版,有个疑惑的地方不理解,就是弹出菜单是正常的。它是创建在主gui或其子gui1中,而在新建的gui2中却能正常调用,只有icombo的下拉菜单不行。开始就是因为这个地方,让我以为是icombo的下拉菜单问题是调用的方法不对,还请解惑。

        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($hlistview1, $index, _guictrlmenu_getitemtext($hmenu, $iid, false), 2)

        local $iid = _guictrlmenu_trackpopupmenu($hmenu, $hgui, -1, -1, 1, 1, 2)
        if $iid then _guictrllistview_setitemtext($hlistview2, $index, _guictrlmenu_getitemtext($hmenu, $iid, false), 2)

我测试了下,发现反复调用会有问题,开始2个窗口都能弹出 ,但最终会只有一个窗口能弹出。是否验证了控件只对应一个窗口及其子窗口?
发表于 2021-4-11 21:38:44 |
弹出菜单更适合用弹出窗口来描述,它不是常规的控件。
combobox 是下拉列表,列表(list) 和 菜单(menu) 是完全不同类别的东西
 楼主| 发表于 2021-4-11 22:07:09 |
感谢指点,虽然 不明白其中道 理,但要学的东西确实很多。
发表于 2021-4-12 08:37:54 |

其实还有一件事挺担忧的,指点问题的基本就是a版、chzj589等少数,如果没有几位的指点,象我这种新人可以说 ...

想学就要有信心,你的基础应该不会比我低。
说一点我的想法,象你的例子,列表1测试己通过。复制列表1的代码建立新代码,在scite编辑器打开,点击编辑器的<搜索>下拉<替换>,把$listview1全部替换$listview2,然后测试运行情况。这样那里有问题就方便修改解决。
运行通过后,两个代码再合并。新增代码也这样操作。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

||小黑屋|国际棋牌 ( ) "));

gmt 8, 2023-12-7 01:08 , processed in 0.114398 second(s), 21 queries .

powered by x3.5

© 2001-2023 .

返回列表
网站地图