虚表 —— 折叠列表框

光庆 1月前 475

import win.ui;
import godking.vlistEx;
import fonts.fontAwesome;
/*DSG{{*/
mainForm = win.form(text="vlistEx - table adapter";right=575;bottom=449)
mainForm.add(
listview={cls="vlistEx";left=8;top=8;right=184;bottom=438;acceptfiles=1;aw=1;db=1;dl=1;dr=1;dt=1;hscroll=1;vscroll=1;z=1}
)
/*}}*/

var t = {
	{' \uF0C5 基本操作',"[@treeLevel]"=0}
	{'  \uF0AE 数据录入',"[@treeLevel]"=1}
	{'  \uF0D0 数据编辑',"[@treeLevel]"=1}
	{'  \uF0CC 数据删除',"[@treeLevel]"=1}
	
	{' \uF080 数据查询',"[@treeLevel]"=0}
	{'  \uF0AE 人员查询',"[@treeLevel]"=1}
	{'  \uF0D0 地址查询',"[@treeLevel]"=1}
	{'  \uF0CC 编码查询',"[@treeLevel]"=1}
	{'  \uF0CC 索引查询',"[@treeLevel]"=1}
	
	{' \uF013 系统设置',"[@treeLevel]"=0}
	{'  \uF0AE 人员过滤',"[@treeLevel]"=1}
	{'  \uF0D0 数据管理',"[@treeLevel]"=1}
	{'  \uF0CC 账号登录',"[@treeLevel]"=1}
};
mainForm.listview.font = ::LOGFONT(name="fontAwesome";point=11;color=0x000000 )/*【属性】项目文本字体*/  
mainForm.listview.setHeaderHeight(0);
mainForm.listview.setRowHeight(35);
mainForm.listview.lineColorV = null;
mainForm.listview.hideScroll(true/*隐藏横向滚动条*/,true/*隐藏纵向滚动条*/);
mainForm.listview.setTable(t);

mainForm.listview.onDrawCellRect = function(row,col,hdc,rect,bkcolor,text){
	var rrow = mainForm.listview.getHideRowRealIndex(row /*虚表当前显示行号*/);
	if ..table.find({1,5,10},rrow){
		..gdi.fillRect(hdc,0x71B33C,rect);
		var font= gdi.getFont(owner.hwnd);
		font.color = 0xFFFFFF;
		..gdi.drawText(hdc,font,text,rect,0x20/*_DT_SINGLELINE*/|4/*_DT_VCENTER*/)
		return true; 
	}
}

mainForm.listview.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮序号*/){
	if row and col {
		var rrow = mainForm.listview.getHideRowRealIndex(row /*虚表当前显示行号*/);		
		if ..table.find({1,5,10},rrow){
			var ishide = mainForm.listview.isUnHideSubRow(rrow);
			mainForm.listview.hideSubRow( rrow /*行号*/,ishide/*是否隐藏*/,true/*是否立即刷新*/);
			return ; 
		}
		win.msgbox("您点击了:第"++rrow++"行,第"++col++"列"++mainForm.listview.getCellText(row,1));	
	}
}

mainForm.show();
win.loopMessage();
import win.ui;
import godking.vlistEx;
import fonts.fontAwesome;
/*DSG{{*/
mainForm = win.form(text="vlistEx - table adapter";right=575;bottom=449)
mainForm.add(
listview={cls="vlistEx";left=8;top=8;right=184;bottom=438;acceptfiles=1;aw=1;db=1;dl=1;dr=1;dt=1;hscroll=1;vscroll=1;z=1}
)
/*}}*/

var t = {
    {' \uF0C5 基本操作',"[@treeLevel]"=0}
    {'  \uF0AE 数据录入',"[@treeLevel]"=1}
    {'  \uF0D0 数据编辑',"[@treeLevel]"=1}
    {'  \uF0CC 数据删除',"[@treeLevel]"=1}
    
    {' \uF080 数据查询',"[@treeLevel]"=0}
    {'  \uF0AE 人员查询',"[@treeLevel]"=1}
    {'  \uF0D0 地址查询',"[@treeLevel]"=1}
    {'  \uF0CC 编码查询',"[@treeLevel]"=1}
    {'  \uF0CC 索引查询',"[@treeLevel]"=1}
    
    {' \uF013 系统设置',"[@treeLevel]"=0}
    {'  \uF0AE 人员过滤',"[@treeLevel]"=1}
    {'  \uF0D0 数据管理',"[@treeLevel]"=1}
    {'  \uF0CC 账号登录',"[@treeLevel]"=1}
};
mainForm.listview.font = ::LOGFONT(name="fontAwesome";point=11;color=0x000000 )/*【属性】项目文本字体*/  
mainForm.listview.setHeaderHeight(0);
mainForm.listview.setRowHeight(35);
mainForm.listview.lineColorV = null;
mainForm.listview.lineColorH = 0xEEEEEE;
mainForm.listview.padding = 0;
mainForm.listview.hideScroll(true/*隐藏横向滚动条*/,true/*隐藏纵向滚动条*/);
mainForm.listview.setTable(t);

mainForm.listview.onDrawCellRect = function(row,col,hdc,rect,bkcolor,text,font,colalign){
    var rrow = mainForm.listview.getHideRowRealIndex(row /*虚表当前显示行号*/);
    if ..table.find({1,5,10},rrow){
        font.color = 0xFFFFFF;
        return false,0x71B33C; 
    }	
}

mainForm.listview.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮序号*/){
    if row and col {
        var rrow = mainForm.listview.getHideRowRealIndex(row /*虚表当前显示行号*/);        
        if ..table.find({1,5,10},rrow){
            var ishide = mainForm.listview.isUnHideSubRow(rrow);
            mainForm.listview.hideSubRow( rrow /*行号*/,ishide/*是否隐藏*/,true/*是否立即刷新*/);
            return ; 
        }
        win.msgbox("您点击了:第"++rrow++"行,第"++col++"列"++mainForm.listview.getCellText(row,1));    
    }
}

mainForm.show();
win.loopMessage();


最新回复 (7)
  • 小肥羊 1月前
    0 引用 2
    这个用法很高级,值得收藏,后面肯定用的上
  • zhhyit 23天前
    0 引用 3
    确实不错啊,感觉很高级
  • zhhyit 23天前
    0 引用 4
    报了这个错误,查了下我使用的vlistEx中好像缺这个函数,gook应该是最新的了 不支持此操作:call 定义类型:method(table) 名字:'getHideRowReallndex' 类型:null ​
  • zhhyit 23天前
    0 引用 5
    更新了一下最新的vlistEx,这个问题解决了
  • redchina 21天前
    1 引用 6

    为代码添加了数据录入子窗体在源码中添加

     if(string.find(cellText,"数据录入")){
                var inputForm = win.loadForm("\dlg\inputForm.aardio");  // 修改这一行
                inputForm.show();
                return;
            }

    同时新建子窗体

    inputForm
    import win.ui;
    /*DSG{{*/
    var winform = win.form(text="数据录入";right=459;bottom=309;parent=...)
    winform.add(
    btnCancel={cls="button";text="取消";left=339;top=264;right=442;bottom=295;z=7};
    btnSave={cls="button";text="保存";left=229;top=264;right=332;bottom=295;z=6};
    edit_address={cls="edit";left=89;top=127;right=442;bottom=158;edge=1;z=4};
    edit_code={cls="edit";left=89;top=173;right=442;bottom=204;edge=1;z=5};
    edit_name={cls="edit";left=89;top=81;right=442;bottom=112;edge=1;z=2};
    static={cls="static";text="姓名:";left=28;top=84;right=76;bottom=104;transparent=1;z=1};
    static2={cls="static";text="地址:";left=28;top=130;right=76;bottom=150;transparent=1;z=3};
    static3={cls="static";text="编码:";left=28;top=176;right=76;bottom=196;transparent=1;z=8}
    )
    /*}}*/
    
    winform.btnSave.oncommand = function(id,event){
        var data = {
            name = winform.edit_name.text;
            address = winform.edit_address.text;
            code = winform.edit_code.text;
        }
        
        if(#data.name==0){
            win.msgbox("请输入姓名!");
            return;
        }
        
        // 发送消息给父窗口
        if(winform.parent){
            winform.parent.sendMessage(0x1000/*自定义消息*/, data);
        }
        
        winform.close();
    }
    
    winform.btnCancel.oncommand = function(id,event){
        winform.close();
    }
    
    winform.show();
    return winform;


  • 光庆 21天前
    0 引用 7
    redchina 为代码添加了数据录入子窗体在源码中添加 if(string.find(cellText,"数据录入")){  &nbs ...

    1、调用子窗口,建议用模式窗口,在操作过程中,让父窗口禁止。

    2、子窗口中,可以直接调用父窗口的函数,实现添加数据操作。代替消息方式。

    子窗口 winform1 代码:

    import win.ui;
    /*DSG{{*/
    var winform = win.form(text="数据录入";right=459;bottom=309;parent=...)
    winform.add(
    btnCancel={cls="button";text="取消";left=339;top=264;right=442;bottom=295;z=7};
    btnSave={cls="button";text="保存";left=229;top=264;right=332;bottom=295;z=6};
    edit_address={cls="edit";left=89;top=127;right=442;bottom=158;edge=1;z=4};
    edit_code={cls="edit";left=89;top=173;right=442;bottom=204;edge=1;z=5};
    edit_name={cls="edit";left=89;top=81;right=442;bottom=112;edge=1;z=2};
    static={cls="static";text="姓名:";left=28;top=84;right=76;bottom=104;transparent=1;z=1};
    static2={cls="static";text="地址:";left=28;top=130;right=76;bottom=150;transparent=1;z=3};
    static3={cls="static";text="编码:";left=28;top=176;right=76;bottom=196;transparent=1;z=8}
    )
    /*}}*/
    
    winform.btnSave.oncommand = function(id,event){
        var data = {
            name = winform.edit_name.text;
            address = winform.edit_address.text;
            code = winform.edit_code.text;
        }
        if(#data.name==0){
            win.msgbox("请输入姓名!");
            return;
        }
        // 调用父窗口函数
        if(winform.parent){
            winform.parent.addData(data);
        }
        winform.close();
    }
    
    winform.btnCancel.oncommand = function(id,event){
        winform.close();
    }
    winform.show();
    return winform;

    主窗口 winform2 代码:

    import win.ui;
    import godking.vlistEx;
    import fonts.fontAwesome;
    /*DSG{{*/
    mainForm = win.form(text="vlistEx - table adapter";right=575;bottom=449)
    mainForm.add(
    listview={cls="vlistEx";left=8;top=8;right=184;bottom=438;acceptfiles=1;aw=1;db=1;dl=1;dr=1;dt=1;hscroll=1;vscroll=1;z=1}
    )
    /*}}*/
    
    var t = {
        {' \uF0C5 基本操作',"[@treeLevel]"=0}
        {'  \uF0AE 数据录入',"[@treeLevel]"=1}
        {'  \uF0D0 数据编辑',"[@treeLevel]"=1}
        {'  \uF0CC 数据删除',"[@treeLevel]"=1}
        
        {' \uF080 数据查询',"[@treeLevel]"=0}
        {'  \uF0AE 人员查询',"[@treeLevel]"=1}
        {'  \uF0D0 地址查询',"[@treeLevel]"=1}
        {'  \uF0CC 编码查询',"[@treeLevel]"=1}
        {'  \uF0CC 索引查询',"[@treeLevel]"=1}
        
        {' \uF013 系统设置',"[@treeLevel]"=0}
        {'  \uF0AE 人员过滤',"[@treeLevel]"=1}
        {'  \uF0D0 数据管理',"[@treeLevel]"=1}
        {'  \uF0CC 账号登录',"[@treeLevel]"=1}
    };
    mainForm.listview.font = ::LOGFONT(name="fontAwesome";point=11;color=0x000000 )/*【属性】项目文本字体*/  
    mainForm.listview.setHeaderHeight(0);
    mainForm.listview.setRowHeight(35);
    mainForm.listview.lineColorV = null;
    mainForm.listview.lineColorH = 0xEEEEEE;
    mainForm.listview.padding = 0;
    mainForm.listview.hideScroll(true/*隐藏横向滚动条*/,true/*隐藏纵向滚动条*/);
    mainForm.listview.setTable(t);
    
    mainForm.listview.onDrawCellRect = function(row,col,hdc,rect,bkcolor,text,font,colalign){
        var rrow = mainForm.listview.getHideRowRealIndex(row /*虚表当前显示行号*/);
        if ..table.find({1,5,10},rrow){
            font.color = 0xFFFFFF;
            return false,0x71B33C; 
        }    
    }
    mainForm.addData = function(...){
    	import console;
    	console.dump("添加新数据:",...);
    }
    mainForm.listview.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮序号*/){
        if row and col {
            var cellText = mainForm.listview.getCellText(row,1); //此处不要使用rrow,getCellText函数内部已自动处理
    		if(string.find(cellText,"数据录入")){
                var inputForm = mainForm.loadForm("\winform1.aardio");
                inputForm.doModal();
                return;
            }        
            var rrow = mainForm.listview.getHideRowRealIndex(row /*虚表当前显示行号*/);
            if ..table.find({1,5,10},rrow){
                var ishide = mainForm.listview.isUnHideSubRow(rrow);
                mainForm.listview.hideSubRow( rrow /*行号*/,ishide/*是否隐藏*/,true/*是否立即刷新*/);
                return ; 
            }
            win.msgbox("您点击了:第"++rrow++"行,第"++col++"列"++mainForm.listview.getCellText(row,1));    
        }
    }
    
    mainForm.show();
    win.loopMessage();


  • redchina 21天前
    0 引用 8
    学习了,在主程序中再添加一个虚表,可以接收子窗体的输入数据,变显示
返回