aardio —— 虚表 —— 模拟属性框

写了个简单的属性框例程,抛砖引玉,期待你做出更丰富强大的功能。

可折叠行、可输入文本、可下拉选择、支持下拉选择图片、颜色等功能。

只有想不到,没有做不到,发挥你的想象力吧。

import win.ui;
import godking.comboboxEx
import godking.vlistEx
/*DSG{{*/
var winform = win.form(text="aardio form";right=399;bottom=391)
winform.add(
vlistEx={cls="vlistEx";text="自定义控件";left=8;top=8;right=368;bottom=360;z=1}
)
/*}}*/import godking.paint
import inet.http
var p = godking.paint.fromBitmap("https://img95.699pic.com/xsj/07/ir/z7.jpg%21/fh/200" /*宽*/,/*高*/);
var imgs,curs = p.splitImage(4,4,10,10,10,10),{};
p.close();
for(i=1;16;1){..table.push(curs,"光标"++i);
}winform.show();
winform.vlistEx.setTable({
{"+","设备配置","","[@treeLevel]"=0}
{"","设备名称(文本输入)","我的设备","[@treeLevel]"=1}
{"","设备音量(数值输入)","0","[@treeLevel]"=1}
{"","锁定配置(下拉)","是","[@treeLevel]"=1}
{"","波特率(下拉)","9600","[@treeLevel]"=1}
{"","触摸提示音(下拉)","按下时","[@treeLevel]"=1}
{"","声音来源(下拉)","蜂鸣器","[@treeLevel]"=1}
{"+","其他设置","","[@treeLevel]"=0}
{"","图片选择(下拉)","光标1","[@treeLevel]"=1}
{"","颜色选择(下拉)","0xFF0000","[@treeLevel]"=1}
} /*数据表*/,/*列标题*/,{20,150,150}/*列宽*/,/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,/*是否克隆新表*/)winform.vlistEx.onResizeCol = false; 
winform.vlistEx.setHeaderHeight(0);
winform.vlistEx.setColumnType(3/*列号*/,1/*_vlistEx_ColType_ComboBox*/,true/*是否显示箭头或图片*/,0xAAAAAA/*箭头颜色或图片*/ );
winform.vlistEx.onEditBegin = {true,3}; 
winform.vlistEx.selectedBkColor = 0xFFFFFF;
winform.vlistEx.setColumnAlign(1 /*列号*/,1/*0左1中2右*/,1/*0顶1中2底*/)
winform.vlistEx.editOnClick = true;
winform.vlistEx.comboboxFilter = function(row,col,text){var rrow = winform.vlistEx.getHideRowRealIndex(row /*虚表当前显示行号*/);if ..table.find({4,5,6,7,9,10},rrow) return true;if ..table.find({2,3},rrow) return 0;  return false;
}
winform.vlistEx.onComboBoxDropDown = function(comboBox,row,col){var rrow = winform.vlistEx.getHideRowRealIndex(row /*虚表当前显示行号*/);if rrow===10 {comboBox.setColors({0xFF0000,0x00FF00,0x0000FF}/*颜色值数组*/,/*背景颜色*/,"BGR"/*显示文本数组*/,/*附加数据数组*/,/*宽度*/,/*高度*/)return ;} if rrow===9 {comboBox.setImages(imgs/*图像数组*/,0x00000000/*背景颜色*/,curs/*显示文本数组*/,/*附加数据数组*/,30/*宽度*/,30/*高度*/)return ;} var items;if rrow===4 items={"是","否"}; if rrow===5 items={"2400","4800","9600","115200"}; if rrow===6 items={"按下时","放开后"}; if rrow===7 items={"蜂鸣器","外置音箱"}; owner.setComboBoxItems(items,0/*可见项数量*/,null/*图片组*/);
}
winform.vlistEx.onEditEnd = function(row/*行*/,col/*列*/,text/*内容*/,endType/*结束类型*/){var rrow = winform.vlistEx.getHideRowRealIndex(row /*虚表当前显示行号*/);if rrow===3 { //限制第三行数值输入var v = tonumber(text):0;if v>100 or v<0 {win.msgbox("取值范围 0 ~ 100")return false; }winform.vlistEx.setCellText(rrow /*行号*/,col/*列号或字典key*/,tostring(v)/*单元格文本*/)} else {winform.vlistEx.setCellText(rrow /*行号*/,col/*列号或字典key*/,text/*单元格文本*/)}return false; 
}
winform.vlistEx.onDrawCellBg = function(row,col,hdc,rect,bkcolor,text){var rrow = winform.vlistEx.getHideRowRealIndex(row /*虚表当前显示行号*/);if rrow===1 or rrow===8 return false,0xDDDDDD;  //第1行、第8行,折叠单元格背景颜色return false;
}
winform.vlistEx.onDrawCellRectContent = function(row,col,hdc,rect,bkcolor,text,font,colalign){var rrow = winform.vlistEx.getHideRowRealIndex(row /*虚表当前显示行号*/);if rrow===9 and col===3 {var index = ..table.find(curs,text);if index {var w = rect.height(); var r = rect.copy(w,w).inflate(-1,-1);..gdi.drawBitmap(hdc,imgs[index].copyHandle(w,w),r);return false,null,"    "+text; //第9行、3列,图片单元格}}if rrow===10 and col===3 {var w = rect.height(); var r = rect.copy(w,w).inflate(-1,-1);..gdi.fillRect(hdc,eval(text),r);return false,null,"    "+text; //第10行、3列,颜色单元格}return false; 
}
winform.vlistEx.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮序号*/){var rrow = winform.vlistEx.getHideRowRealIndex(row /*虚表当前显示行号*/);if ..table.find({1,8},rrow) { //折叠第1行、第8行winform.vlistEx.hideSubRow(rrow /*行号*/,winform.vlistEx.isUnHideSubRow(rrow)/*是否隐藏*/,true/*是否立即刷新*/)}
}
win.loopMessage();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/501231.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word文档中的文档网格——解决相同行间距当显示出不同行间距的情况

1 问题 被一个行间距调疯了&#xff0c;就是样式改了没用&#xff0c;格式刷刷了没用。就是肉眼可以看出行间距完全不一样。 2 解决方法 1&#xff09;修改论文正文(即出现问题文本的样式)样式&#xff1a;样式>修改>格式>段落>缩进和间距>取消"如果定义了…

CDP集群安全指南-静态数据加密

[一]静态数据加密的架构 CDP 支持两种加密组件&#xff0c;这些组件可以组合成独特的解决方案。在选择密钥管理系统&#xff08;KMS&#xff09;时&#xff0c;您需要决定哪些组件能够满足企业的密钥管理和加密需求。 CDP 加密组件 以下是 Cloudera 用于静态数据加密的组件描…

ACM算法模板

ACM算法模板 起手式基础算法前缀和与差分二分查找三分查找求极值分治法&#xff1a;归并排序 动态规划基本线性 d p dp dp最长上升子序列I O ( n 2 ) O(n ^ 2) O(n2)最长上升子序列II O ( n l o g n ) O(nlogn) O(nlogn) 贪心二分最长公共子序列 背包背包求组合种类背包求排列…

AcWing练习题:差

读取四个整数 A,B,C,D&#xff0c;并计算 (AB−CD)的值。 输入格式 输入共四行&#xff0c;第一行包含整数 A&#xff0c;第二行包含整数 B&#xff0c;第三行包含整数 C&#xff0c;第四行包含整数 D。 输出格式 输出格式为 DIFERENCA X&#xff0c;其中 X 为 (AB−CD) 的…

前端路由 Hash 和 History 模式原理对比区别

前端路由 Hash 和 History 模式原理对比区别 1. 基本概念 1.1 什么是前端路由 前端路由是指在单页应用&#xff08;SPA&#xff09;中&#xff0c;通过 JavaScript 来实现页面的切换和状态管理&#xff0c;而无需向服务器请求新的页面。主要有两种实现方式&#xff1a;Hash …

头歌实训数据结构与算法 - 字符串匹配(第2关:实现KMP字符串匹配)

任务描述 本关任务&#xff1a;编写一个程序&#xff0c;利用kmp算法求子串在主串中不重叠出现的次数。 实验目的&#xff1a;深入掌握KMP算法的应用。实验内容&#xff1a;编写一个程序&#xff0c;利用KMP算法求子串t在主串s中出现的次数&#xff0c;例如&#xff1a;s“aa…

enzymejest TDD与BDD开发实战

一、前端自动化测试需要测什么 1. 函数的执行逻辑&#xff0c;对于给定的输入&#xff0c;输出是否符合预期。 2. 用户行为的响应逻辑。 - 对于单元测试而言&#xff0c;测试粒度较细&#xff0c;需要测试内部状态的变更与相应函数是否成功被调用。 - 对于集成测试而言&a…

UE5通过蓝图节点控制材质参数

通过蓝图节点控制材质的参数 蓝图节点 在材质上设置标量值 和 在材质上设置向量参数值 Set Scalar Parameter Value on Materials Set Vector Parameter Value on Materials 这两个蓝图节点都可以在蓝图中&#xff0c;控制材质的参数值和向量值

MySQL秘籍之索引与查询优化实战指南

MySQL秘籍之索引与查询优化实战指南 目录 MySQL秘籍之索引与查询优化实战指南相关阅读索引相关EXPLAIN 版本 1. 初级篇1.1 【练体术】基础1.1.1 库操作1.1.1 表操作创建一个表增加表字段 1.1.2 增删改插入一条数据删除一条数据更新一条数据库 1.1.3 查询查询所有数据条件查询&a…

沁恒CH32V208GBU6蓝牙MTU二:减小连接间隔提升速度;修改GAP里面的连接参数提高兼容性

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…

探索 Vue.js 的动态样式与交互:一个有趣的样式调整应用

修改日期备注2025.1.3初版 一、前言 今天和大家分享在 Vue.js 学习过程中开发的超酷的小应用。这个应用可以让我们通过一些简单的交互元素&#xff0c;如复选框、下拉菜单和输入框&#xff0c;来动态地改变页面上元素的样式哦 让我们一起深入了解一下这个项目的实现过程&…

Python应用指南:高德交通态势数据

在现代城市的脉络中&#xff0c;交通流量如同流动的血液&#xff0c;交通流量的动态变化对出行规划和城市管理提出了更高的要求。为了应对这一挑战&#xff0c;高德地图推出了交通态势查询API&#xff0c;旨在为开发者提供一个强大的工具&#xff0c;用于实时获取指定区域或道路…

整合版canal ha搭建--基于1.1.4版本

开启MySql Binlog&#xff08;1&#xff09;修改MySql配置文件&#xff08;2&#xff09;重启MySql服务,查看配置是否生效&#xff08;3&#xff09;配置起效果后&#xff0c;创建canal用户&#xff0c;并赋予权限安装canal-admin&#xff08;1&#xff09;解压 canal.admin-1…

物联网控制期末复习

第3章 物联网控制系统的过程通道设计 3.1 模拟量输出通道 3.1.1单模拟量输出通道的构成 计算机控制系统的模拟量输出通道将计算机产生的数字控制信号转换为模拟信号&#xff08;电压或电流&#xff09;作用于执行机构&#xff0c;以实现对被控对象的控制。 多D/A结构&#…

python生成、操作svg图片

生成svg图片 通过python生成svg图片的方法有许多&#xff0c;比如OpenCV的源码中有svgfig.py这个脚本可以用于生成svg图片(OpenCV的棋盘格图片可以通过这个方法生成)&#xff0c;也可以使用svg.py的库&#xff0c;安装方法如下 pip install svg.py 下面是通过这个库生成一个简…

2024年大型语言模型(LLMs)的发展回顾

2024年对大型语言模型&#xff08;LLMs&#xff09;来说是充满变革的一年。以下是对过去一年中LLMs领域的关键进展和主题的总结。 GPT-4的壁垒被打破 去年&#xff0c;我们还在讨论如何构建超越GPT-4的模型。如今&#xff0c;已有18个组织拥有在Chatbot Arena排行榜上超越原…

Servlet解析

概念 Servlet是运行在服务端的小程序&#xff08;Server Applet)&#xff0c;可以处理客户端的请求并返回响应&#xff0c;主要用于构建动态的Web应用&#xff0c;是SpringMVC的基础。 生命周期 加载和初始化 默认在客户端第一次请求加载到容器中&#xff0c;通过反射实例化…

图片验证码如何显示在 Apifox 的响应控制台中

当接口返回的响应数据结构非常复杂&#xff0c;充斥着嵌套的对象和数组&#xff0c;其中还可能包含着图片的 URL 时&#xff0c;如果要查找特定信息&#xff0c;你需要不断上下滚动 JSON 响应&#xff0c;试图找到所需的字段。这不仅让人恼火&#xff0c;还浪费了宝贵的时间。 …

设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析

单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;旨在确保某个类在应用程序的生命周期内只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。这种设计模式在需要控制资源访问、避免频繁创建和销毁对象的场景中尤为有用。 一、核心…

《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开

《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开&#xff0c;本次讲座中来自Xsens的人形机器人与动捕技术专家Jeffrey Muller与Dennis Kloppenburg不仅将就Xsens动作捕捉系统与人形机器人行为训练中的实际应用进行详细讲解&#xff0c;同时还会对目前大家所关注…