当前位置:   article > 正文

aardio - 【库】customPlus自绘组件库

aardio

一、前言 

编写本库的初衷:

只需要定义一下需要绘制的内容,就可以做出非常漂亮的列表效果,而不用关心复杂的实现的过程

库文件下载:光庆·程序·在线 → aardio资源下载http://chengxu.onlineicon-default.png?t=N7T8http://chengxu.online

customPlus 库需要 paint 库支持,所以需要下载两个库文件

1、paint.rar

2、customPlus.rar

解压缩后,都放到 lib/godking/ 目录下

二、效果

三、简介

编写本库的目的,就是利用aardio的plus组件,通过gdip自绘实现漂亮的列表组件效果。

所以,通过使用本库,只需要简单进行设置,就可以做出很绚丽的界面效果。

四、功能

1、基本的项目行列排版,可指定行数、列数,可按指定项目的宽高自动计算数量。

2、基本的鼠标hover效果、点击事件。

3、分行、分页功能。

五、亮点

1、可通过itemModel表,自定义项目每个元素的位置、类型。

2、可通过itemModel表,为某个样式,单独封装为一个库,方便调用。

参考:https://blog.csdn.net/sdlgq/article/details/121653489

参考:https://blog.csdn.net/sdlgq/article/details/121679132

六、教程

一、基本使用

  1. 1、首先需要创建一个plus,如果需要鼠标事件,则开启事件回调。
  2. 2、引用自绘组件库:
  3. import godking.customPlus
  4. 3、创建自绘组件实例,绑定plus和配置表:
  5. var p = godking.customPlus( winform.plus, itemModel, itemList, {
  6. itemWidth=100, /*项目宽度,为0则自动根据项目列数及plus宽度调整项目宽度。不能与colnum同时=0*/
  7. itemHeight=100, /*项目高度,为0则自动根据项目行数及plus高度调整项目高度。不能与rownum同时=0*/
  8. colnum=5, /*项目列数,为0则根据项目宽度和plus宽度自动计算。不能与itemWidth同时=0*/
  9. rownum=5, /*项目行数,为0则根据项目高度和plus高度自动计算。不能与itemHeight同时=0*/
  10. padLeft=0, /*plus左边空白距离*/
  11. padTop=0, /*plus顶边空白距离*/
  12. padRight=0, /*plus右边空白距离*/
  13. padBottom=0, /*plus底边空白距离*/
  14. autoFit=false, /*是否自动调整plus组件宽度或高度,以保证能显示全部项目*/
  15. /*当 itemWidth>0 且 rownum>0 且 colnum=0 时,自动调整plus宽度,以能显示全部行*/
  16. /*当 itemHeight>0 且 colnum>0 且 rownum=0 时,自动调整plus高度,以能显示全部列*/
  17. vertical=false, /*是否将项目设置为竖向排列,行滚动方向设置为横向*/
  18. bkcolor=0xFFFFFFFF, /*背景颜色*/
  19. bkimg=null, /*背景图像*/
  20. singleCheck=0,/*元素check单选模式。0:多选;1:每个项目内单选;2:整个列表单选*/
  21. })
  22. 参数解释:
  23. 1、plus组件,如 winform.plus,不能为空。
  24. 2、itemModel:项目元素布局模板,可为空。在 init( ) 函数中可进行更改。
  25. 3、itemList :项目内容列表,可为空。可单独进行设置。
  26. 4、配置表:可为空,使用默认设置。
  27. 注意事项:
  28. a、itemModel、bkcolor、bkimg、vertical 也可以通过 init() 进行设置:
  29. p.init( itemModel, bkcolor, bkimg, vertical );
  30. b、项目列表:itemList 也可以通过以下方式进行设置:
  31. p.itemList = itemList;
  32. p.setItemList( itemList );
  33. 4、定义鼠标点击事件:
  34. p.onClick = function(itemIndex/*项目索引*/,elemIndex/*元素索引*/,elemID/*元素id*/,elemName/*元素name*/,plusIndex/*在当前显示列表中的序号*/){
  35. ..win.msgbox('您点击了\n项目索引:'++itemIndex++'\n元素索引:'++elemIndex++'\n元素id:'++(elemID:"")++'\n元素name:'++elemName)
  36. }
  37. 5、plus尺寸改变时,可重新初始化(非必须,内部已进行处理):
  38. winform.plus.adjust = function( cx,cy,wParam ) {
  39. p.init() //如果没有参数,则按照原来的项目模板、背景颜色、背景图片进行初始化。
  40. };
  41. 6、绑定滚动条:
  42. 正常绑定:
  43. p.bindScrollbar(winform.scrollbar);
  44. 尺寸及布局变化后,可重新绑定(非必须,内部已进行处理):
  45. winform.plus.adjust = function( cx,cy,wParam ) {
  46. p.init(); // 先重新调整布局
  47. p.bindScrollbar(winform.scrollbar); // 再重新绑定滚动条
  48. };

二、配置表

        1、配置表为一个非常重要的table,它定义了组件及项目的一些关键设置。

        2、创建组件库实例时,必须提供组件配置表,且部分设置不可更改。

                var p = godking.customPlus( winform.plus, 项目模板, 项目列表, 配置表 );

        3、配置表成员如下:

名称类型说明
itemWidth数值

项目最小宽度。为0时根据colnum自动计算,所以不能与colnum同时=0

itemHeight数值

项目最小高度。为0时根据rownum自动计算,所以不能与rownum同时=0

autoSizeWidth逻辑值为true则自动将项目总宽度拉伸填满plus宽度,每个项目宽度不小于itemWidth
autoSizeHeight逻辑值为true则自动将项目总高度拉伸填满plus高度,每个项目高度不小于itemHeight
rownum数值

项目行数。为0时根据itemHeight自动计算,所以不能与itemHeight同时=0

colnum数值

项目列数。为0时根据itemWidth自动计算,所以不能与itemWidth同时=0

padLeft数值最左侧项目的左边,与plus组件左边之间的留空距离。
padTop数值最顶部项目的顶边,与plus组件顶边之间的留空距离。
padRight数值最右侧项目的右边,与plus组件右边之间的留空距离。
padBottom数值最底部项目的底边,与plus组件底边之间的留空距离。
autoFit逻辑值是否自动调整plus组件宽度或高度(其中之一),保证能刚好显示全部行或列
当 itemHeight>0 且 colnum>0 且 rownum=0 时,自动调整plus高度,以能显示全部行
当 itemWidth>0 且 rownum>0 且 colnum=0 时,自动调整plus宽度,以能显示全部列
vertical逻辑值

项目是否竖向排列。

true:将项目设置为竖向排列,行滚动方向设置为横向。

false(默认):将项目设置为横向排列,行滚动方向设置为纵向。

bkcolor数值ARGB背景颜色
bkimg数据背景图像,数据类型:文件路径名或文件数据

以plus宽度940,高度570为例,如果itemWidth=330,itemHeight=140,不指定行数列数(或指定为3行2列),自动计算出的布局为3行2列,项目分布如下图:

 如果开了autoSizeWidth和autoSizeHeight,则会将item拉伸至填满plus,变为:

 三、项目模板

       1、【项目模板】也是一个非常重要的table,它的功能就是定义一个项目的各组成部分(元素)的信息(类型、尺寸位置、图像或文本数据等)。

       2、组件库正常使用前,必须用【项目模板】进行初始化:

                godking.customPlus( ,项目模板, )  或  init( 项目模板, )

       3、初始化时,会自动根据【项目模板】和【配置表】计算项目行列数量、各项目尺寸位置、各元素尺寸位置等信息,部分介绍见【配置表】。

       4、【项目模板】就是定义一个项目的组成部分,也就是各种元素拼凑起来的数组,比如在哪儿放个图片,在哪儿放个文本,在哪儿画个矩形等。

        绘制时:按【项目模板】数组顺序,从前到后依次绘制,先定义的元素先绘制(在底层),后定义的元素后绘制(在上层)。

        鼠标点击时:按【项目模板】数组顺序,从后往前(从上层到底层)依次检测,谁先处于鼠标点击范围内且具有click属性,则触发谁的点击事件。

        5、元素类型: 项目元素有三种类型:区域、图像、文本。

rect :主要是绘制某区域的边框、填充色,通常用作背景。

img :绘制图像。

text :绘制文本。

        各类型详细参数如下:

        注:每个元素,在项目列表中可赋值的成员,都存在六种状态(简称“六态”),按处理的优先级从低到高,分别是:

  1. 正常状态
  2. 鼠标划过项目,但未在本元素上时
  3. 元素所属项目被选中时
  4. 鼠标划过本元素时
  5. 本元素被选择时 (checked=true)
  6. 元素所属项目被禁用时

        六态值并非必须,而是根据实际情况设定。如果六态值都没有设置,则使用项目模板中定义的默认值,如果也没有默认值,则忽略该元素的处理。

        利用六态值,可以灵活实现各种效果。

★★★ 按照优先级别,从高到低排列如下:

1、disabled    //禁用状态。最高级。如果该元素所在的项目设置成员 disabled=true 则该项目将处于禁用状态,绘制项目元素时,优先使用禁用状态的值。

2、checked    // 元素被选择。如果元素被checked,且设置了checked状态值,则使用该值。否则检测下一级别(hover)的值。

3、hover     // 鼠标划过元素。如果鼠标当前位置在该元素上,且设置了hover状态值,则使用该值。否则检测下一级别(itemselected)的值。

4、itemselected   // 项目为当前选中项。如果该元素所在的项目被seleced,也就是当前选中项,且该元素设置了itemselected状态值,则使用该值。否则检测下一级别(itemhover)的值。

5、itemhover    // 鼠标划过项目。如果鼠标当前位置在该元素所在的项目范围内,且该元素设置了itemhover状态值,则使用该值。否则检测下一级别(正常状态)的值。

6、img\text\font\color\fillcolor  //正常状态,最低级。只有当以上状态全不满足时,才使用该状态值。

=====================================================================

7、默认值:如果以上值均未定义,则使用项目模板中定义的默认值。如果默认值也未定义,则该元素不进行处理。

★★★ 三种元素类型(区域、图像、文本)全部设置选项如下:

  1. var itemModel = {
  2. [1]={ /* 矩形区域 */
  3. type="rect", /* 类型:rect */
  4. rectf={x=3;y=3;width=-3;height=-3}, /* 矩形区域范围。负数表示距离项目右边或底边的距离。 */
  5. /* 以下为可选项 */
  6. id=1,
  7. name="项目背景色",
  8. click=true; /* 是否响应鼠标点击事件 */
  9. check=true; /* 原素是否可选择。依赖name和click。鼠标点击元素,改变元素选择状态 */
  10. width=1, /* 边框宽度。为0则无边框。 */
  11. round=15, /* 圆角半径。0为矩形,-1为椭圆,其他值(>0)为圆角矩形。 */
  12. cur=32649, /* 鼠标指针,_IDC_ 开头的常量。 */
  13. /* 边框颜色(六态) */
  14. color=0xFF888888, /* 正常状态下,边框颜色 */
  15. hovercolor=0xFF888888, /* 元素鼠标划过时,边框颜色 */
  16. checkedcolor=0xFF000000, /* 元素被选择时,边框颜色 */
  17. itemhovercolor=0xFF888888, /* 项目鼠标划过时,边框颜色 */
  18. itemselectedcolor=0xFF000000, /* 项目选中时,边框颜色 */
  19. disabledcolor=0xFF000000, /* 项目禁用时,边框颜色 */
  20. /* 填充颜色(六态) */
  21. fillcolor=0xFF888888, /* 正常状态下,填充颜色 */
  22. hoverfillcolor=0xFF888888, /* 鼠标划过元素时,填充颜色 */
  23. checkedfillcolor=0xFF000000, /* 元素被选择时,填充颜色 */
  24. itemhoverfillcolor=0xFF888888, /* 鼠标划过项目时,填充颜色 */
  25. itemselectedfillcolor=0xFF000000, /* 项目选中时,填充颜色 */
  26. disabledfillcolor=0xFF000000, /* 项目禁用时,填充颜色 */
  27. },
  28. [2]={ /* 图像 */
  29. type="img", /* 类型:img */
  30. rectf={x=14;y=14;width=72;height=72},
  31. /* 图像显示范围(注意区分与posf图像画出范围的关系),坐标相对于整个item。 */
  32. /* 负数表示距离项目右边或底边的距离。 */
  33. /* 以下为可选项 */
  34. id=2,
  35. name="头像",
  36. click=true; /* 是否响应鼠标点击事件 */
  37. check=true; /* 原素是否可选择。依赖name和click。鼠标点击元素,改变元素选择状态 */
  38. round=6, /* 圆角半径。0为矩形,-1为椭圆,其他值(>0)为圆角矩形 */
  39. trans=null, /* 透明度。0(完全透明)到 1(完全不透明)之间的数值。不设置则不透明。 */
  40. scale=1, /* 缩放方式 0:原尺寸居中;1:按比例填满;2:拉伸填满;3:缩到合适 */
  41. thumbnail=true, /*当图片宽度大于绘制宽度时,自动生成缩略图绘制。 */
  42. /*使用缩略图,速度比较快,效果有失真,图片较大时建议使用。 */
  43. orientation=false; /*自动根据exif信息调整图片方向*/
  44. cur=32649, /* 鼠标指针,_IDC_ 开头的常量。 */
  45. posf={x=14;y=14;width=72;height=72},
  46. /* 图像画出范围,坐标相对于整个item。如果省略,则同rectf。 */
  47. /* 图像将按posf范围大小进行绘制,但只有在rectf范围内的部分才能显示出来。 */
  48. /* 图像(六态) */
  49. img="1.png", /* 正常状态下,图像 */
  50. hoverimg="2.png", /* 鼠标划过元素时,图像 */
  51. checkedimg="3.png", /* 元素被选择时,图像 */
  52. itemhoverimg = "4.png", /* 鼠标划过项目时,图像 */
  53. itemselectedimg="5.png", /* 项目选中时,图像 */
  54. disabledimg="5.png", /* 项目禁用时,图像 */
  55. },
  56. [3]={ /* 文本 */
  57. type="text", /* 类型:text */
  58. rectf={x=120;y=12;width=-10;height=20}, /* 文本范围。负数表示距离项目右边的距离。 */
  59. /* 以下为可选项 */
  60. id=3,
  61. name="标题文字",
  62. click=true, /* 是否响应鼠标点击事件 */
  63. check=true, /* 元素可被选择。依赖name和click。鼠标点击元素时改变元素选择状态 */
  64. align=0, /* 文本水平对齐方式。0、(近端)左对齐 1、居中 2、(远端)右对齐 */
  65. valign=0, /* 文本垂直对齐方式。0、(近端)顶对齐 1、居中 2、(远端)底对齐 */
  66. smooth=true, /* 使用平滑效果,抗锯齿 */
  67. cur=32649, /* 鼠标指针,_IDC_ 开头的常量。 */
  68. /* 文本(六态) */
  69. text="这里是默认文本", /* 正常状态下文本 */
  70. hovertext="这里是默认文本", /* 鼠标划过元素时文本 */
  71. checkedtext="这里是默认文本", /* 元素被选择时文本 */
  72. itemhovertext="这里是默认文本", /* 鼠标划过项目时文本 */
  73. itemselectedtext="这里是默认文本", /* 项目选中时文本 */
  74. disabledtext="这里是默认文本", /* 项目禁用时文本 */
  75. /* 字体(六态) */
  76. font={name="Tahoma",point=11,color=0xFFFF0000}, /* 正常状态下字体 */
  77. hoverfont={name="Tahoma",point=11,color=0xFF000000}, /* 鼠标划过元素时字体 */
  78. checkedfont={name="Tahoma",point=11,color=0xFF000000}, /* 元素被选择时字体 */
  79. itemhoverfont={name="Tahoma",point=11,color=0xFF000000}, /* 鼠标划过项目时字体 */
  80. itemselectedfont={name="Tahoma",point=11,color=0xFF000000},/* 项目选中时字体 */
  81. disabledfont={name="Tahoma",point=11,color=0xFF000000}, /* 项目禁用时字体 */
  82. }
  83. }

四、项目列表

1、项目列表就是所有项目的内容数组。

        每个项目内容就是一个表,里面包含了各元素的值。

        元素的值的定义: 元素name = 值表   或  元素name = 值 

        注意:

        1、元素要想在项目列表中给赋值,必须具备name。命名name时,不能重名。

        2、元素id只在onClick事件中用到,且可空,所以可不设置。

        3、元素要想设置checked属性,必须在模板中设置name属性。如果要在鼠标点击时自动改变其checked状态,必须设置 check=true 、click=true。 

        4、上层的元素的范围rectf尽量不要超过其下层,否则可能导致下层在鼠标移动时,检测不到hover状态的改变。原因:下层被上层覆盖了。因为上层范围大,如果因为鼠标的移动范围超过下层,但没超过上层,这种情况下,即使下层hover状态改变了,但因为上层还没改变hover状态,所以检测函数会认为整个项目的hover状态未改变,而忽略继续处理下层的hover状态。总之,检测函数在处理hover状态时,仅处理鼠标位置的最上层的元素。

1、rect 矩形区域 类型的元素,赋值方法及可赋值参数如下:

           a、正常用法:用table赋值,分别指定 color 、fillcolor 的六态数值。

                各成员均为可选项,并遵循优先级顺序取值。

                如果没有从中取到合理值,则使用【项目模板】里面的默认值:

                项目背景色 = 

            {
            color=0xFF888888,               // 正常状态下,边框颜色
            hovercolor=0xFF888888,          // 鼠标划过元素时,边框颜色
            checkedcolor=0xFF000000,        // 元素被选择时,边框颜色
            itemselectedcolor=0xFF000000,   // 项目被选中时,边框颜色
            itemhovercolor=0xFF888888,      // 鼠标划过项目时,边框颜色

            disabledcolor=0xFF888888,      // 项目禁用时,边框颜色

            fillcolor=0xFF888888,                // 正常状态下,填充颜色
            hoverfillcolor=0xFF888888,           // 元素鼠标划过时,填充颜色
            checkedfillcolor=0xFF000000,         // 元素被选择时,填充颜色
            itemselectedfillcolor=0xFF000000,    // 项目选中时,填充颜色
            itemhoverfillcolor=0xFF888888,       // 项目鼠标划过时,填充颜色
            disabledfillcolor=0xFF888888,       // 项目禁用时,填充颜色
            }

        b、简化用法:直接赋值,表示 color 和 fillcolor 的六态数值都相同:

                项目背景色 = 0xFF555588;// 表示以上12个颜色值,都是0xFF555588

2、img 图像 类型的元素,赋值方法及可赋值参数如下:

           a、正常用法:用table赋值,分别指定 img 的六态数值。

                各成员均为可选项,并遵循优先级顺序取值。

                如果没有从中取到合理值,则使用【项目模板】里面的默认值:

                头像 = 

            {
            img="1.png",                     // 正常状态下,图像
            hoverimg="2.png",            // 鼠标划过元素时,图像
            checkedimg="3.png",        // 元素被选择时,图像
            itemhoverimg = "4.png"     // 鼠标划过项目时,图像
            itemselectedimg="5.png",   // 项目选中时,图像
            disabledimg="5.png",         // 项目禁用时,图像

            }

       b、简化用法:直接赋值,表示 img 的六态数值都相同:

                img="1.png";// 表示以上6个状态图像,都是1.png

 3、text 文本 类型的元素,赋值方法及可赋值参数如下:

           a、正常用法:用table赋值,分别指定 text 、font 的六态数值。

                各成员均为可选项,并遵循优先级顺序取值。

                如果没有从中取到合理值,则使用【项目模板】里面的默认值:

                标题文本 = 

            {
            text = "这里是标题文字";                         // 正常状态下文字
            hovertext = "这里是标题文字";                // 鼠标划过元素时文字

            checkedtext = "这里是标题文字";            // 元素被选择时文字
            itemhovertext = "这里是标题文字";          // 鼠标划过项目时文字
            itemselectedtext = "这里是标题文字";      // 项目选中时文字
            disabledtext = "这里是标题文字";            // 项目禁用时文字
            font={name="Tahoma",point=11,color=0xFFFF0000},  // 正常状态下字体
            hoverfont={name="Tahoma",point=11,color=0xFF000000},// 鼠标划过元素时字体
            checkedfont={name="Tahoma",point=11,color=0xFF000000},// 元素被选择时字体
            itemhoverfont={name="Tahoma",point=11,color=0xFF000000},// 鼠标划过项目时字体
            itemselectedfont={name="Tahoma",point=11,color=0xFF000000},// 项目选中时字体

            disabledfont={name="Tahoma",point=11,color=0xFF000000},// 项目禁用时字体
            }

        b、简化用法:只能修改文本或字体其中之一。直接赋值,如果值是文本型,表示文本;如果是table且含有“name”成员,表示字体。如果想同时改变文本和字体,请用正常用法,而不是简化用法。

                不管值为文本或字体,都表示六态用统一设置。

                标题文本 = "这里是文本型值";// 表示文本,6个状态都一样。

                标题文本 = {name="Tahoma",point=11,color=0xFFFF0000};// 表示字体,6个状态都一样。

项目列表格式灵活,可以参考如下各种形式:

  1. itemList = {
  2. [1]= {
  3. 头像="E:\图片素材\png\png128_警告类\2.png",
  4. 标题文字="这里是标题文本",
  5. 简介文字='居中显示1\n这里是信息内容这里是信息内容这里是信息内容这里是信息内容',
  6. }
  7. [2]= {
  8. 头像={
  9. img="E:\图片素材\png\png128_警告类\2.png",
  10. hoverimg="E:\图片素材\png\png128_警告类\5.png",
  11. checkedimg="E:\图片素材\png\png128_警告类\6.png",
  12. itemselectedimg="E:\图片素材\png\png128_警告类\7.png",
  13. },
  14. 标题文字={
  15. text="这里是标题文本左对齐";
  16. font={name="Tahoma",point=11,color=0xFFFF0000};
  17. },
  18. 简介文字={
  19. text='居中显示1\n这里是信息内容这里是信息内容这里是信息内容这里是信息内容'
  20. }
  21. }
  22. [3]= {
  23. // 部分元素可以不设置数据,则使用默认数据。如“头像”可不设置。
  24. 标题文字={name="Tahoma",point=11,color=0xFFFF0000};
  25. 简介文字='居中显示1\n这里是信息内容这里是信息内容这里是信息内容这里是信息内容'
  26. }
  27. }

七、完整例程 

  1. import win.ui;
  2. import fonts.fontAwesome
  3. import win.dlg.message
  4. /*DSG{{*/
  5. var winform = win.form(text="aardio form";right=904;bottom=530)
  6. winform.add(
  7. button={cls="button";text="跳到第3项";left=354;top=463;right=446;bottom=514;db=1;dl=0.39;dr=0.51;z=2};
  8. button2={cls="button";text="上一页";left=137;top=463;right=229;bottom=514;db=1;dl=0.15;dr=0.75;z=3};
  9. button3={cls="button";text="下一页";left=555;top=463;right=637;bottom=514;db=1;dl=0.61;dr=0.3;z=4};
  10. button4={cls="button";text="到尾页";left=650;top=463;right=764;bottom=514;db=1;dl=0.72;dr=0.16;z=5};
  11. button5={cls="button";text="选中第3项";left=246;top=463;right=342;bottom=514;db=1;dl=0.27;dr=0.62;z=6};
  12. button6={cls="button";text="到首页";left=16;top=463;right=130;bottom=514;db=1;dl=0.02;dr=0.86;font=LOGFONT(name='FontAwesome');z=7};
  13. button7={cls="button";text="修改本页第2项
  14. 标题文本";left=774;top=462;right=888;bottom=513;db=1;dl=0.86;dr=0.02;z=8};
  15. button8={cls="button";text="删除第3项";left=456;top=462;right=546;bottom=513;db=1;dl=0.5;dr=0.4;z=9};
  16. plus={cls="plus";left=21;top=16;right=886;bottom=450;bgcolor=12639424;db=1;dl=1;dr=1;dt=1;notify=1;z=1}
  17. )
  18. /*}}*/
  19. winform.show();
  20. itemModel = {
  21. { // 项目背景
  22. type="rect",
  23. round=5,
  24. rectf={x=3;y=3;width=-3;height=-3},
  25. itemselectedcolor=0xFF888888;
  26. width=1,
  27. fillcolor=0xFFEEEEEE,
  28. itemhoverfillcolor=0xFF9d896c,
  29. itemselectedfillcolor=0xFFCdB99c;
  30. },
  31. {
  32. // 头像背景色,
  33. type="rect",
  34. round=5,
  35. rectf={x=10;y=10;width=80;height=80},
  36. color=0xFFCCCCCC,
  37. width=1,
  38. fillcolor=0x88FFFFFF,
  39. },
  40. {
  41. name="logo",
  42. type="img",
  43. rectf={x=14;y=14;width=72;height=72},
  44. round=5,
  45. },
  46. {
  47. //标题背景
  48. type="rect",
  49. rectf={x=100;y=10;width=-10;height=25},
  50. round=3,
  51. fillcolor=0x88FFFFFF,
  52. },
  53. {
  54. name="title",
  55. type="text",
  56. rectf={x=105;y=12;width=-10;height=20},
  57. font={name="Tahoma",point=11,color=0xFF5d492c},
  58. itemselectedfont={name="Tahoma",point=11,color=0xFFFF0000},
  59. align=0
  60. },
  61. {
  62. name="content",
  63. type="text",
  64. rectf={x=100;y=40;width=-65;height=-10},
  65. font={name="Tahoma",point=9,color=0xFF888888},
  66. itemhoverfont={name="Tahoma",point=9,color=0xFFFFFFFF},
  67. itemselectedfont={name="Tahoma",point=9,color=0xFFAA5555},
  68. text='居中显示\n这里是信息内容\n里是信息内容里是信息内容息内容里是里是信息内容里洒发',
  69. },
  70. {
  71. name = "编辑",
  72. type="rect",
  73. rectf={x=-65;y=40;width=-10;height=22},
  74. round=3,
  75. click=true,
  76. fillcolor= 0xFF4CAF50,
  77. hoverfillcolor = 0xFF65318e
  78. },
  79. {
  80. type="text",
  81. rectf={x=-65;y=45;width=-10;height=17},
  82. align=1;
  83. font={name="FontAwesome",point=9,color=0xFFFFFFFF},
  84. text='\uF044 编辑',
  85. },
  86. {
  87. name = "删除",
  88. type="rect",
  89. rectf={x=-65;y=67;width=-10;height=22},
  90. round=3,
  91. click=true,
  92. fillcolor= 0xFFf44336,
  93. hoverfillcolor = 0xFF65318e
  94. },
  95. {
  96. type="text",
  97. rectf={x=-65;y=72;width=-10;height=17},
  98. align=1;
  99. font={name="FontAwesome",point=9,color=0xFFFFFFFF},
  100. text='\uF1F8 删除',
  101. },
  102. }
  103. itemList = {}
  104. for(i=1;100;1){
  105. ..table.push(itemList, {
  106. logo="E:\图片素材\png\png128_警告类\2.png",
  107. title="这里是标题文本"++i++",左对齐",
  108. content='居中显示1\n这里是信息内容这里是信息内容这里是信息内容这里是信息内容',
  109. })
  110. }
  111. import godking.customPlus
  112. var p = godking.customPlus(winform.plus/*plus*/,itemModel,itemList,{
  113. itemWidth=300, /*项目宽度*/
  114. itemHeight=100, /*项目高度*/
  115. autoSizeWidth=true, /*自动根据项目列数及plus宽度调整项目宽度*/
  116. autoSizeHeight=true, /*自动根据项目行数及plus高度调整项目高度*/
  117. colnum=0, /*项目列数,为0则根据项目宽度和plus宽度自动计算*/
  118. rownum=0, /*项目行数,为0则根据项目高度和plus高度自动计算*/
  119. padLeft=5, /*plus左边空白距离*/
  120. padTop=5, /*plus顶边空白距离*/
  121. padRight=5, /*plus右边空白距离*/
  122. padBottom=5 /*plus底边空白距离*/
  123. })
  124. p.onClick = function(itemIndex/*项目索引*/,elemIndex/*元素索引*/,elemID/*元素id*/,elemName/*元素name*/,plusIndex/*在当前显示列表中的序号*/){
  125. if elemName = "删除" {
  126. if winform.msgAsk("确定要删除该项吗?") {
  127. ..table.remove(itemList,itemIndex);
  128. p.update();
  129. }
  130. } elseif elemName = "编辑" {
  131. if winform.msgAsk("确定要编辑该项吗?") {
  132. itemList[itemIndex].title="该项标题文字已被成功编辑!";
  133. p.update(itemIndex);
  134. }
  135. }
  136. }
  137. winform.button.oncommand = function(id,event){
  138. p.firstIndex=3
  139. }
  140. winform.button2.oncommand = function(id,event){
  141. p.toPrevPage()
  142. }
  143. winform.button3.oncommand = function(id,event){
  144. p.toNextPage();
  145. }
  146. winform.button4.oncommand = function(id,event){
  147. p.toPage(p.pageCount)
  148. }
  149. winform.button5.oncommand = function(id,event){
  150. winform.text = p.selectedindex;
  151. p.selectedIndex=3
  152. }
  153. winform.button6.oncommand = function(id,event){
  154. p.toPage(1)
  155. }
  156. winform.plus.adjust = function( cx,cy,wParam ) {
  157. p.init()
  158. };
  159. winform.button7.oncommand = function(id,event){
  160. var index = p.firstIndex + 1;
  161. if index>1 and index<=#itemList {
  162. itemList[index]["标题文字"] = {
  163. text="// 正常状态", // 正常状态下文本
  164. hovertext="// 鼠标在本元素上了", // 鼠标划过元素时文本
  165. checkedtext="// 元素被选择了", // 元素被选择时文本
  166. itemhovertext="// 鼠标在项目上,但不在本元素上",
  167. itemselectedtext="// 项目被选中了",
  168. }
  169. itemList[index]["简介文字"] = {
  170. text = "本项标题文本被改变,你可以尝试鼠标移动上去试试效果,并对标题文本进行六态测试。";
  171. font = {name="宋体",point=11,color=0xFF0000FF},
  172. hoverfont = {name="宋体",point=11,color=0xFF00FF00},
  173. }
  174. p.drawPageItem(2);
  175. }
  176. }
  177. winform.button8.oncommand = function(id,event){
  178. if #itemList>=3 {
  179. ..table.remove(itemList,3);
  180. p.update();
  181. }
  182. }
  183. win.loopMessage();

简单几句代码就可以实现如下功能:

  1. import win.ui;
  2. import fonts.fontAwesome
  3. /*DSG{{*/
  4. var winform = win.form(text="aardio form";right=728;bottom=459)
  5. winform.add(
  6. plus={cls="plus";left=21;top=16;right=266;bottom=450;db=1;dl=1;dr=1;dt=1;notify=1;z=1}
  7. )
  8. /*}}*/
  9. winform.show();
  10. itemModel = {
  11. { // 项目背景
  12. type="rect",
  13. click=true;
  14. rectf={x=0;y=0;width=0;height=0},
  15. width=1;
  16. color = 0x88FFFFFF;
  17. fillcolor=0xFFdcd3b2,
  18. itemhoverfillcolor=0xFF9d896c,
  19. itemselectedfillcolor=0xFFCdB99c;
  20. disabledfillcolor=0xFFEEEEEE,
  21. },
  22. {
  23. name="logo",
  24. type="text",
  25. rectf={x=20;y=18;width=40;height=40},
  26. AntiAlias=true,
  27. font={name="FontAwesome",point=28,color=0xFF1e50a2},
  28. itemhoverfont={name="FontAwesome",point=28,color=0xFFFFFFFF},
  29. },
  30. {
  31. name="title",
  32. type="text",
  33. AntiAlias=true,
  34. rectf={x=75;y=18;width=-10;height=40},
  35. font={name="Tahoma",point=20,color=0xFF5d492c},
  36. itemhoverfont={name="Tahoma",point=20,color=0xFFFFFFFF},
  37. align=0
  38. },
  39. }
  40. itemList = {}
  41. for(i=1;5;1){
  42. ..table.push(itemList, {
  43. logo=eval("'\uF01"++(i+5)++"'"),
  44. title="菜单项目"++i,
  45. })
  46. }
  47. itemList[3].disabled=true
  48. import godking.customPlus
  49. var p = godking.customPlus(winform.plus/*plus*/,itemModel,itemList,{
  50. itemWidth=300, /*项目宽度*/
  51. itemHeight=80, /*项目高度*/
  52. autoSizeRow=false, /*自动根据项目行数及plus高度调整项目高度*/
  53. autoSizeCol=true, /*自动根据项目列数及plus宽度调整项目宽度*/
  54. colnum=1, /*项目列数,为0则根据项目宽度和plus宽度自动计算*/
  55. rownum=0, /*项目行数,为0则根据项目高度和plus高度自动计算*/
  56. padLeft=0, /*plus左边空白距离*/
  57. padTop=0, /*plus顶边空白距离*/
  58. padRight=0, /*plus右边空白距离*/
  59. padBottom=0, /*plus底边空白距离*/
  60. })
  61. p.onClick = function(itemIndex/*项目索引*/,elemIndex/*元素索引*/,elemID/*元素id*/,elemName/*元素name*/,pageIndex/*当前页项目索引*/){
  62. win.msgbox(itemIndex)
  63. }
  64. win.loopMessage();

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号