虚表 —— 模拟横向工具栏

光庆 3月前 1017

1、使用_vlistEx_ColType_Button类型实现:

Code AardioLine:32复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
    • import win.ui;
    • import godking.vlistEx;
    • /*DSG{{*/
    • var winform = win.form(text="aardio form";right=711;bottom=311;bgcolor=16777215)
    • winform.add(
    • menu={cls="vlistEx";left=8;top=8;right=704;bottom=72;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;z=1}
    • )
    • /*}}*/
    • winform.menu.setTable({{"\1 - 副本.png|\1.png",
    • "\2 - 副本.png|\2.png",
    • "\3 - 副本.png|\3.png",
    • "\4 - 副本.png|\4.png",
    • "\0.png|\0.png",
    • "\5 - 副本.png|\5.png",
    • "\6 - 副本.png|\6.png",
    • "\0.png|\0.png",
    • "\7 - 副本.png|\7.png",
    • }} /*数据表*/,/*列标题*/,{50,50,50,50,30,50,50,30,50}/*列宽*/,/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,/*是否克隆新表*/);
    • winform.menu.hideScroll(true/*隐藏横向滚动条*/,true/*隐藏纵向滚动条*/);
    • winform.menu.setHeaderHeight(0);
    • winform.menu.setRowHeight(50);
    • winform.menu.lineWidthV = null;
    • winform.menu.selectedBkColor = null;
    • winform.menu.padding = {top=10,bottom=10};
    • winform.menu.setColumnType(/*列号*/,5/*_vlistEx_ColType_Button*/,1/*0居中1缩放2填满*/,/*正常图片*/,/*鼠标悬停图片*/ );
    • winform.menu.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮序号*/){
    • if row and table.find({1,2,3,4,6,7,9},col){
    • win.msgbox("您点击了第"++col++"个按钮");
    • }
    • }
    • winform.show();
    • win.loopMessage();

    2、使用_vlistEx_ColType_Button类型+gdi绘图,给图标添加标题:

    Code AardioLine:40复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
    • import win.ui;
    • import godking.vlistEx;
    • /*DSG{{*/
    • var winform = win.form(text="aardio form";right=711;bottom=311;bgcolor=16777215)
    • winform.add(
    • menu={cls="vlistEx";left=8;top=8;right=704;bottom=72;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;z=1}
    • )
    • /*}}*/
    • winform.menu.setTable({{"\1 - 副本.png|\1.png",
    • "\2 - 副本.png|\2.png",
    • "\3 - 副本.png|\3.png",
    • "\4 - 副本.png|\4.png",
    • "\0.png|\0.png",
    • "\5 - 副本.png|\5.png",
    • "\6 - 副本.png|\6.png",
    • "\0.png|\0.png",
    • "\7 - 副本.png|\7.png",
    • }} /*数据表*/,/*列标题*/,{50,50,50,50,30,50,50,30,50}/*列宽*/,/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,/*是否克隆新表*/);
    • var title={"打开","编辑","视图","阅览","|","打印","帮助","|","关于"};
    • winform.menu.hideScroll(true/*隐藏横向滚动条*/,true/*隐藏纵向滚动条*/);
    • winform.menu.setHeaderHeight(0);
    • winform.menu.setRowHeight(50);
    • winform.menu.lineWidthV = null;
    • winform.menu.selectedBkColor = null;
    • winform.menu.padding = {top=0,bottom=20};
    • winform.menu.setColumnType(/*列号*/,5/*_vlistEx_ColType_Button*/,1/*0居中1缩放2填满*/,/*正常图片*/,/*鼠标悬停图片*/ );
    • winform.menu.onDrawCellEnd = function(row,col,hdc,rect,bkcolor,text,font,colalign){
    • if row and table.find({1,2,3,4,6,7,9},col){
    • rect.top +=30;
    • ..gdi.drawTextCenter(hdc,..gdi.getFont(owner.hwnd),title[col],rect,4/*_DT_VCENTER*/|0x20/*_DT_SINGLELINE*/);
    • }
    • }
    • winform.menu.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮序号*/){
    • if row and table.find({1,2,3,4,6,7,9},col){
    • win.msgbox("您点击了第"++col++"个按钮");
    • }
    • }
    • winform.show();
    • win.loopMessage();

    3、使用_vlistEx_ColType_OwnerDrawCustom类型实现图标+标题:

    Code AardioLine:66复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
    • import win.ui;
    • import godking.vlistEx;
    • /*DSG{{*/
    • var winform = win.form(text="aardio form";right=711;bottom=311;bgcolor=16777215)
    • winform.add(
    • menu={cls="vlistEx";left=8;top=8;right=704;bottom=72;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;z=1}
    • )
    • /*}}*/
    • var itemModel = {
    • { type="img";
    • name="img";
    • rectf={x=10,y=0,width=30,height=30};
    • hover=true;
    • scale=true;
    • }
    • { type="text";
    • name="text";
    • rectf={x=0,y=30,width=50,height=20};
    • font={name="宋体",h=12,color=0xFF000000};
    • itemhoverfont={name="宋体",h=12,color=0xFFFF0000};
    • hover=true;
    • align=1;
    • valign=1;
    • }
    • }
    • winform.menu.setTable({{"\1 - 副本.png|\1.png|打开",
    • "\2 - 副本.png|\2.png|编辑",
    • "\3 - 副本.png|\3.png|视图",
    • "\4 - 副本.png|\4.png|阅览",
    • "\0.png",
    • "\5 - 副本.png|\5.png|打印",
    • "\6 - 副本.png|\6.png|帮助",
    • "\0.png",
    • "\7 - 副本.png|\7.png|关于",
    • }} /*数据表*/,/*列标题*/,{50,50,50,50,30,50,50,30,50}/*列宽*/,/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,/*是否克隆新表*/);
    • winform.menu.setColumnType({1,2,3,4,6,7,9}/*列号*/,7/*_vlistEx_ColType_OwnerDrawCustom*/,itemModel/*参考godking.customPlus中的itemModel定义规则*/ );
    • winform.menu.setColumnType({5,8}/*列号*/,2/*_vlistEx_ColType_Image*/,1/*0居中1缩放2填满*/,5/*边距*/ );
    • winform.menu.hideScroll(true/*隐藏横向滚动条*/,true/*隐藏纵向滚动条*/);
    • winform.menu.setHeaderHeight(0);
    • winform.menu.setRowHeight(50);
    • winform.menu.lineWidthV = null;
    • winform.menu.selectedBkColor = null;
    • winform.menu.padding = 0;
    • winform.menu.ownerDrawCustom = function (row,col,text/*当前单元格文本*/){
    • /* 当列类型为7(_vlistEx_ColType_OwnerDrawCustom)时,调用本函数。
    • 通过返回值,设置itemModel中定义的各元素的值,以供虚表进行绘制。
    • 返回值格式可参考godking.customPlus中的itemList中项目的定义格式。
    • 支持绘制:img、text、rect、line 四种类型的元素。
    • 支持定义:正常、hover、itemhover 三种状态的属性值。
    • 使用鼠标悬浮的元素,要在itemModel中设置hover=true。
    • 建议使用悬浮的各元素的rectf不要部分重叠,可以完全不重叠或完全重叠。*/
    • var s=..string.split(text,"|");
    • return { img={
    • img = s[1];
    • itemhoverimg = s[2];
    • };
    • text = s[3];
    • };
    • }
    • winform.menu.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮序号*/){
    • if row and table.find({1,2,3,4,6,7,9},col){
    • win.msgbox("您点击了第"++col++"个按钮");
    • }
    • }
    • winform.show();
    • win.loopMessage();



    代码文件及素材见附件。

    上传的附件:
    最新回复 (15)
    • 近我者赤 3月前
      0 引用 2

    • 近我者赤 3月前
      0 引用 3
      能在图标下方加标题不?
    • 光庆 3月前
      0 引用 4
      近我者赤 能在图标下方加标题不?
      已添加例子代码
    • 近我者赤 3月前
      0 引用 5

    • lcj21 3月前
      0 引用 6
      虚表越来越好越来越强大了
    • breezee 3月前
      0 引用 7
      老大威武!虚表被你玩出花来了!
    • xiaobai 2月前
      0 引用 8

      请问在设置横向工具栏后,鼠标第一次从两侧进入工具栏是不显示悬浮图片吗?从中间进入一次后之后就正常了;鼠标离开后悬浮图片不恢复成正常图片吗?

      Code AardioLine:28复制
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
    • 25.
    • 26.
    • 27.
    • 28.
      • import win.ui;
      • import godking.vlistEx;
      • /*DSG{{*/
      • mainForm = win.form(text="aardio";right=487;bottom=351)
      • mainForm.add(
      • menu={cls="vlistEx";left=0;top=0;right=150;bottom=51;edge=1;z=1}
      • )
      • /*}}*/
      • var menutab = {{"\res\文档.png|\res\维修.png","\res\信用卡银行卡.png|\res\维修.png","\res\分布式.png|\res\维修.png"},{"新建","打开","设置"}};
      • mainForm.menu.setTable(menutab /*数据表*/,/*列标题*/,50/*列宽*/,/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,/*是否克隆新表*/);
      • mainForm.menu.hideScroll(true/*隐藏横向滚动条*/,true/*隐藏纵向滚动条*/);
      • mainForm.menu.setHeaderHeight(0);
      • mainForm.menu.setRowHeight(50);
      • mainForm.menu.lineWidthV = null;
      • mainForm.menu.lineWidthH = null;
      • mainForm.menu.selectedBkColor = null;
      • mainForm.menu.padding = {top=10,bottom=10};
      • mainForm.menu.setColumnType(/*列号*/,5/*_vlistEx_ColType_Button*/,1/*0居中1缩放2填满*/,/*正常图片*/,/*鼠标悬停图片*/ );
      • mainForm.menu.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮序号*/){
      • /*鼠标左键点击项目事件。x、y为鼠标相对于虚表的坐标。
      • 按钮序号为:列类型为图片按钮时,在 ownerDraw() 函数中使用 setButtonRects() 添加的按钮区域的序号。*/
      • mainForm.msgbox("您点击了"++col++"列!")
      • }
      • mainForm.show();
      • win.loopMessage();


    • 光庆 2月前
      0 引用 9
      xiaobai 请问在设置横向工具栏后,鼠标第一次从两侧进入工具栏是不显示悬浮图片吗?从中间进入一次后之后就正常了;鼠标离开后悬浮图片不恢复成正常图片吗?import win.ui; import ...
      已升级,请下载最新版本。
    • xiaobai 2月前
      0 引用 10
      此楼层已删除
    • xiaobai 2月前
      0 引用 11
      光庆 已升级,请下载最新版本。

      给光庆大佬打call

    • xiaobai 2月前
      0 引用 12
      光庆 已升级,请下载最新版本。
      光庆大佬,新问题,点击图标弹框变成鼠标离开后才会弹出而不是立即弹出了
    • xiaobai 2月前
      0 引用 13
      xiaobai 光庆大佬,新问题,点击图标弹框变成鼠标离开后才会弹出而不是立即弹出了
      单元格编辑时鼠标不离开光标也不会闪烁了
    • 光庆 2月前
      0 引用 14
      xiaobai 光庆大佬,新问题,点击图标弹框变成鼠标离开后才会弹出而不是立即弹出了
      已修改,升级试试。
    • 光庆 2月前
      0 引用 15
      另:如果隐藏滚动条,请将虚表宽高调大一点,不要让滚动条占位,影响鼠标移出事件的准确性。 menu={cls="vlistEx";left=0;top=0;right=160;bottom=56;edge=1;z=1} 这样效果更好。
    • xiaobai 2月前
      0 引用 16
      光庆 已修改,升级试试。

    返回