搜索
aardio官方社区 门户 查看主题

listview嵌套listview,取数问题

发布者: onething | 发布时间: 2018-1-31 11:39| 查看数: 905| 评论数: 1|帖子模式

listview嵌套listview,取数问题,双击取数正确,单击取数是上一次的,求教有何正确方法?
import win.ui;
/*DSG{{*/
var winform = win.form(text="listview添加combobox ";right=522;bottom=300;parent=...)
winform.add(
listview={cls="listview";left=26;top=23;right=505;bottom=241;bgcolor=16777215;edge=1;fullRow=1;gridLines=1;z=1};
static={cls="static";text="点击单元格查看效果。";left=26;top=251;right=496;bottom=279;color=255;font=LOGFONT(h=-14;weight=700);transparent=1;z=2}
)
/*}}*/

winform.listview.insertColumn("测试项1",80)
winform.listview.insertColumn("测试项2",100)
winform.listview.insertColumn("测试项3",100)
for(i=1;29;1){
  winform.listview.addItem({tostring(i);"点我"++i;"不点我"++i});
}

//var tab_items ={ };
var searchcol=2

winform.listview.onnotify = function(id,code,ptr){
   
        if(code==0xFFFFFF4B){
                var nm0 = winform.listview.getNotifyMessage(code,ptr);
                if( ! nm0.iItem && nm0.iSubItem ) return ;
                if(!winform.listview.comboboxlvlable) return ;
                edit=winform.listview.editbox;
                comboboxlv = winform.listview.comboboxlvlable;
                rc=winform.listview.getItemRect(comboboxlv.listViewNotifyMessage.iItem,comboboxlv.listViewNotifyMessage.iSubItem,2);
                if(rc.top<rc.bottom-rc.top){
                    rc.top-=math.abs(rc.bottom);rc.bottom=rc.top;
                }else {
                   
                    rc.right += 45; rc.bottom += 200;
                }
                comboboxlv.setRect(rc);
                winform.listview.redraw();
        }
        if(code=0xFFFFFFFD){
                var nm0 = winform.listview.getNotifyMessage(code,ptr);
                if( ! nm0.iItem && nm0.iSubItem ) return ;
                var comboboxlv = winform.listview.comboboxlvlable;
                var edit= winform.listview.editbox;
                if( ! comboboxlv ){
                        winform.listview.addCtrl(editbox = {cls="edit";font = LOGFONT( h = 12 );left = 0;top = 0; right = 50;bottom = 50;autoResize = false ;edge = 1;
                                }
                        )
                    winform.listview.addCtrl(
                            comboboxlvlable = {bottom=50;text="选择";left=0;top=0;right=0;z=3;font = LOGFONT( h = 11 );edge=1;cls="listview" ;vscroll=1;
                                        fullRow=1;gridLines=1;msel=false;
                                    wndproc = function( hwnd, message, wParam, lParam ){
                                            if(  message = 0x8/*_WM_KILLFOCUS*/ ||(message == 0x101/*_WM_KEYUP*/ &&  wParam == 0x1B/*_VK_ESC*/ )){
                                                    owner.parent.editbox.show(false);owner.show(false);
                                            }elseif( message == 0x201/*_WM_LBUTTONDOWN*/ ){
                                                owner.parent.editbox.text=owner.getItemText(owner.selIndex ,searchcol );  //得到的是上一次的?
                        }elseif( message == 0x101/*_WM_KEYUP*/ && wParam == 0xD/*_VK_RETURN*/ || message == 0x203/*_WM_LBUTTONDBLCLK*/ ) {
                                                if(owner.selIndex){
                                                            owner.parent.editbox.text=owner.getItemText(owner.selIndex, searchcol );
                                                            owner.parent.setItemText( owner.parent.editbox.text, edit.listViewNotifyMessage.iItem, edit.listViewNotifyMessage.iSubItem );
                                                        owner.parent.editbox.show(false);owner.show(false);
                                                }
                                        }
                    }
                            }
                    )
                   
                        edit=winform.listview.editbox;
                    comboboxlv = winform.listview.comboboxlvlable;
                   
                    //comboboxlv.setTable(tab_items);
                    comboboxlv.insertColumn("列标题1",50,,0x0/*_LVCFMT_LEFT*/) ;
                    comboboxlv.insertColumn("列标题2",100,,0x0/*_LVCFMT_LEFT*/) ;
                for (i=1;10){
                            comboboxlv.addItem({i;"第"++i++"行内容"});
                    }

                }
                edit.listViewNotifyMessage = nm0;
                edit.text=winform.listview.getItemText(edit.listViewNotifyMessage.iItem,edit.listViewNotifyMessage.iSubItem);
                var rc=winform.listview.getItemRect( edit.listViewNotifyMessage.iItem,edit.listViewNotifyMessage.iSubItem,0,2/*_LVIR_LABEL*/ )
                rc.inflate(2,2);
                edit.setRect(rc);
        rc.top= rc.bottom;rc.right += 45; rc.bottom += 200;
                comboboxlv.setRect(rc);
        edit.show();
        comboboxlv.show();
        comboboxlv.setFocus();
        comboboxlv.capture = true;
        
        }
}


winform.show()
win.loopMessage();

最新评论

onething 发表于 2018-2-8 15:29:07
本帖最后由 onething 于 2018-2-8 15:30 编辑

消息错误,改message == 0x201/*_WM_LBUTTONDOWN*/message == 0x200/*_WM_MOUSEMOVE*/
入了消息误区

完整代码如下:
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="listview添加combobox ";right=522;bottom=300;parent=...)
  4. winform.add(
  5. listview={cls="listview";left=26;top=23;right=505;bottom=241;bgcolor=16777215;edge=1;fullRow=1;gridLines=1;z=1};
  6. static={cls="static";text="点击单元格查看效果。";left=26;top=251;right=496;bottom=279;color=255;font=LOGFONT(h=-14;weight=700);transparent=1;z=2}
  7. )
  8. /*}}*/

  9. winform.listview.insertColumn("测试项1",80)
  10. winform.listview.insertColumn("测试项2",100)
  11. winform.listview.insertColumn("测试项3",100)
  12. for(i=1;29;1){
  13.   winform.listview.addItem({tostring(i);"点我"++i;"不点我"++i});
  14. }

  15. //var tab_items ={ };
  16. var searchcol=2

  17. winform.listview.onnotify = function(id,code,ptr){
  18.    
  19.         if(code==0xFFFFFF4B){
  20.                 var nm0 = winform.listview.getNotifyMessage(code,ptr);
  21.                 if( ! nm0.iItem && nm0.iSubItem ) return ;
  22.                 if(!winform.listview.comboboxlvlable) return ;
  23.                 edit=winform.listview.editbox;
  24.                 comboboxlv = winform.listview.comboboxlvlable;
  25.                 rc=winform.listview.getItemRect(comboboxlv.listViewNotifyMessage.iItem,comboboxlv.listViewNotifyMessage.iSubItem,2);
  26.                 if(rc.top<rc.bottom-rc.top){
  27.                     rc.top-=math.abs(rc.bottom);rc.bottom=rc.top;
  28.                 }else {
  29.                     
  30.                     rc.right += 45; rc.bottom += 200;
  31.                 }
  32.                 comboboxlv.setRect(rc);
  33.                 winform.listview.redraw();
  34.         }
  35.         if(code=0xFFFFFFFD){
  36.                 var nm0 = winform.listview.getNotifyMessage(code,ptr);
  37.                 if( ! nm0.iItem && nm0.iSubItem ) return ;
  38.                 var comboboxlv = winform.listview.comboboxlvlable;
  39.                 var edit= winform.listview.editbox;
  40.                 if( ! comboboxlv ){
  41.                      winform.listview.addCtrl(editbox = {cls="edit";font = LOGFONT( h = 12 );left = 0;top = 0; right = 50;bottom = 50;
  42.                              autoResize = false ;edge = 1;})
  43.                     winform.listview.addCtrl(comboboxlvlable = {bottom=50;text="选择";left=0;top=0;right=0;z=3;font = LOGFONT( h = 11 );
  44.                             edge=1;cls="listview" ;vscroll=1;fullRow=1;gridLines=1;msel=false;
  45.                             wndproc = function( hwnd, message, wParam, lParam ){
  46.                                 if(  message = 0x8/*_WM_KILLFOCUS*/ ||(message == 0x101/*_WM_KEYUP*/ &&  wParam == 0x1B/*_VK_ESC*/ )){
  47.                                      owner.parent.editbox.show(false);owner.show(false);
  48.                                 }elseif( message == 0x200/*_WM_MOUSEMOVE*/ ){
  49.                                      owner.parent.editbox.text=owner.getItemText(owner.selIndex ,searchcol );  //得到的是上一次的?
  50.                                 }elseif( message == 0x101/*_WM_KEYUP*/ && wParam == 0xD/*_VK_RETURN*/ || message == 0x203/*_WM_LBUTTONDBLCLK*/ ) {
  51.                                      if(owner.selIndex){
  52.                                            owner.parent.editbox.text=owner.getItemText(owner.selIndex, searchcol );
  53.                                            owner.parent.setItemText( owner.parent.editbox.text, edit.listViewNotifyMessage.iItem,
  54.                                                 edit.listViewNotifyMessage.iSubItem );
  55.                                            owner.parent.editbox.show(false);owner.show(false);
  56.                                      }
  57.                                 }
  58.                          }
  59.                     })
  60.                     
  61.                     edit=winform.listview.editbox;
  62.                     comboboxlv = winform.listview.comboboxlvlable;
  63.                     
  64.                     //comboboxlv.setTable(tab_items);
  65.                     comboboxlv.insertColumn("列标题1",50,,0x0/*_LVCFMT_LEFT*/) ;
  66.                     comboboxlv.insertColumn("列标题2",100,,0x0/*_LVCFMT_LEFT*/) ;
  67.                 for (i=1;10){
  68.                             comboboxlv.addItem({i;"第"++i++"行内容"});
  69.                     }

  70.                 }
  71.                 edit.listViewNotifyMessage = nm0;
  72.                 edit.text=winform.listview.getItemText(edit.listViewNotifyMessage.iItem,edit.listViewNotifyMessage.iSubItem);
  73.                 var rc=winform.listview.getItemRect( edit.listViewNotifyMessage.iItem,edit.listViewNotifyMessage.iSubItem,0,2/*_LVIR_LABEL*/ )
  74.                 rc.inflate(2,2);
  75.                 edit.setRect(rc);
  76.         rc.top= rc.bottom;rc.right += 45; rc.bottom += 200;
  77.                 comboboxlv.setRect(rc);
  78.         edit.show();
  79.         comboboxlv.show();
  80.         comboboxlv.setFocus();
  81.         comboboxlv.capture = true;
  82.         
  83.         }
  84. }


  85. winform.show()
  86. win.loopMessage();
复制代码

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-7-21 09:49 , Processed in 0.062500 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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