Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述—— 隐鹤 / HelloWorld
Excel阅读模式/聚光灯开发技术之二
超级逐步录入提示功能开发原理简述———— 隐鹤 / HelloWorld
1. 引言
自本人第一篇博文“Excel阅读模式/单元格行列指示/聚光灯开发技术要点再分享”阐述ExcelPower_Helper中的聚光灯/阅读模式功能后,网友们遍历测试Kutools,uuoffice,DnaTools,方方格子,易用宝等等各大知名插件的聚光灯,发现都没我最早发出的测试版好使,不少网友,私聊我要本人开发的插件ExcelPower_Helper。然而,久而未发,主要原因有三:
1.位置算法不精准的Bug未解决。早期发出的测试版,有一个位置计算不够精准的Bug,导致在缩放的时候某些位置会有1-4个像素的误差。请注意,这是所有基于HUD技术开发的聚光灯/阅读模式的通有的BUG, 包括:Kutools(收费),DNAtools,UUoffice,方方格子,以及EH论坛网友的导航灯。
2. HUD技术三大神器未完成。聚光灯用到的HUD技术是打开winform深度技术的一扇门。本人决定开发基于此技术的三部作品(即聚光灯(阅读模式),超级任务窗格,超级录入提示)后,再出来惊天地,泣鬼神,^_^。
3. 俗务缠身,各种忙碌。。
截止本文发出之际,可以很愉快的告诉各位网友,是时候,真正吹个牛逼了(^_^),基于HUD技术开发的聚光灯/阅读模式的通有的BUG已得到完美解决,误差修正到1个像素内,ExcelPower_Helper的聚光灯/阅读模式将是Number One,各路插件被斩杀麾下,仰天大笑出辕营,媲美WPS原生功能。
牛逼不多吹,进入正题。
各位试想下,如果能在Excel单元格中的输入内容的同时,提供与当前输入关联的提示列表,类似百度、Google的搜索框,将是个非常酷,有意思的功能。比如在生产企业做跟单的时候,往往要根据客户报来的购买产品的信息查看录入相应的产品型号等信息,如我们能添加自己的产品信息作为数据源,随着输入出现提示信息列表,将会十分受用。
Excel单元格逐步输入提示功能的简要定义:所谓Excel单元格逐步录入提示, 其本质就是要结合单元格这种特殊文本框的一个Keypress事件,随着键入内容的变化做一些事情。可惜,微软并没有为Excel单元格提供这个编程接口。
由于微软并没有为Excel单元格提供类似KeyPress事件的编程接口,如果要从KeyPress方向着手,将是十分困难的一件事。
2. 目前各路大神实现方式:
2.1 内置表单控件方式
本人较早看到这种实现是在eh论坛,印像是“百度不到去谷歌“网友这的一篇帖子。之后看到国外论坛已有类似思路。概括来说,其思路主要是在Excel里插入一个表单控件Texbox,和一个Listbox,通过Texbox的Textchange事件,动态的呈现与输入相关的数据在列表框Listbox中,并在选择单元格事件里动态的移动Textbox的位置,使其覆盖单元格的位置,造成一种在单元格里输入的假象。这里面,有个巧妙的地方就是利用了List box的visible属性,以实时更新列表关联数据。如图所示。
2.1.1 内置表单控件方式优点:这个效果还是不错的,包括速度等。优点也很多,比如列表框,可以支持多列内容,而且可以表格化对齐(这个好像很少人会用,大多数是用特殊符合如▲等,将多列内容连接,然后再拆分到表格的不同列,这样的问题是Listbox里的各列会因为字符原因对不齐,外观视觉效果也不好。其实大可不必这样,是有方法的可以做到列表里的各列实行表格化对齐的。),这种开发方式也很方便。
2.1.2 内置表单控件方式不足:要严格的说,不足的地方就是用户体验不够好。有网友就和我反应,当调整下列宽之类的,或者其他的正常操作会导致textbox和listbox突然显示在表中,很突兀,有时候不小心还会被用户无意删除,而如果开发者,不处理这种情况,代码将直接无法继续运行。而且覆盖在单元格上,用户要对单元格进行选中进行一些格式调整等等,也十分不方便。可能不够友好。
2.2 外载winform窗体方式
或许是上述表单控件的开发方式的不足,有人用直接挂载一个包含textbox和listbox控件的winform窗体。直接在窗体上操作,脱离表格。通过窗体控件的textbox的keypress或者Textchange事件以及输入完成击键控制活动单元格的位置,如下图。
2.2.1 外载窗口优点:开发简单,可以充分利用Winform控件提供的事件,进行堆代码式的开发。
2.2.1 外载窗口不足:个人依然觉得,不够友好,挂载一个窗体操作一个Excel尽管开发上方便了,但显然不如在单元格里直接输入来得爽快,直接,有种隔靴搔痒的意味。实际是开发技术不够的一个妥协解决方案。
2.3 基于单元格的输入消息捕获方式(体验最好)
总体上来说,目前就我所见和了解就是以上两种方式,目前为止还没有人开发出直接在单元格里输入逐步提示这样一种方式的,这种需求倒是有网友提过。
这种方式就是要通过实时捕获、处理windows消息的技术手段来达到给单元格增加KeyPress事件的目的,并通过加载一个无焦点的ListBox的容器窗体,以动态显示列表。个人认为这种方式是用户体验最好的,直接、爽快,当然实现起来也是最需要技术的。具体作品见ExcelPower_Helper中的录入提示功能。
此部分最后,继续来谈下本人作品ExcelPower Helper中的录入提示,目前支持Google拼音输入法,搜狗输入法,百度输入法,QQ输入法,以及微软输入法,后续将继续改进,让其支持更多的输入法,增加快捷键等。客观来说,能实现到现在的功能,已经可以让目前的那些逐步录入提示相形见绌了,又要树立标杆了。(牛皮又吹起来了^_^)
ExcelPower Helper中的录入提示 支持模糊匹配,支持拼音首字母检索,支持被检索词以加粗的方式突出显示与列表框中。支持中英文混合输入。
3.开发技术要点简述
后来居上,本文最重要的部分,来谈一谈实现这种方式的简要原理:
1.用一些工具我们可以看到,Excel中的活动单元格实际是一个不断调整显示位置的窗体,其类名为“EXCEL6”,其句柄在Excel的工作簿运行周期中总是固定的。
2.从Windows消息角度看,一切事件都是基于Windows消息的包装。我们可以通过工具查看当用户在单元各种输入内容时候,发生的消息,通过Hook或者微软提供的基类来对消息进行捕获拦截。当识别到输入完成的消息时,做我们的处理,把关联内容写入到无焦点的装载Listbox控件的窗体中,并根据活动单元格的位置将其显示给用户。
3,比较难处理的地方是,你要去区分输入的字符类型和输入法的状态,比如英文,数字,中文,不同的输入法消息类型和对消息的处理及其返回值也不一样。
.Excel在Win7和win10下的处理的消息方式还不太一样。
5.更好的用户体验,要考虑匹配的速度和呈现的方式问题,如检索字在目标条目中突出显示,加粗等。
6.另外一些需求还可能要用到KEYBOARD Hook。
感兴趣的可以按以上六点思路,去研究下。
【总结】
其实这玩意,远比聚光灯/行列指示/阅读模式的开发要复杂,聚光灯,也是捕获消息,但是要考虑的东西比较单一。录入提示涉及到输入法的这一部分就够考验人的。各大输入法都有自己方式。要摸清他们的消息的递送逻辑也是很费事的。
接下来会发一篇关于高级任务窗格的文章,简述原理。高级任务窗格这个词早已有之,国外有专门卖这个的。所以是有根据的,高不高级另说,先告诉大家怎么实现才是最重要的,下一篇见。
祝各位看官,安好。
Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述—— 隐鹤 / HelloWorld的更多相关文章
- Excel阅读模式/聚光灯开发技术序列作品之三 高级自定义任务窗格开发原理简述—— 隐鹤
Excel阅读模式/聚光灯开发技术序列作品之三 高级自定义任务窗格开发原理简述—— 隐鹤 1. 引言 Excel任务窗格是一个可以用来存放各种常用命令的侧边窗口(准确的说是一个可以停靠在类名为x ...
- Excel阅读模式/单元格行列指示/聚光灯开发 技术要点再分享
1. 引言 文题中所谓技术要点再分享,本意是想在大神Charltsing Liu的博文“简单介绍Excel单元格行列指示的实现原理(俗称聚光灯功能)”的基础上写一点个人开发体会.写本文的初衷有三点,一 ...
- 开发指南专题二:JEECG微云高速开发平台JEECG框架初探
开发指南专题二:JEECG微云高速开发平台JEECG框架初探 2.JEECG框架初探 2.1演示系统 打开浏览器输入JEECG演示环境界址:http://demo.jeecg.org:8090/能够看 ...
- WPF软件开发系统之二——水环境检测Surface触摸屏软件开发
该系统采用C#.WPF语言开发,开发工具Visual Studio 2015.Blend,环境WIN7系统及以上,适用于PC.Windows触摸屏Surface等设备. 部分截图效果如下: 开发工具环 ...
- [转]TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)
本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284 第三章 创建一个分组报表 1. 建立数据模型 数据模型用于 ...
- vue移动音乐app开发学习(二):页面骨架的开发
本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 完成后的页面状态以及项目结构如下: 一: ...
- react-native 扫一扫功能(二维码扫描)功能开发
1.安装插件 yarn add react-native-smart-barcode 2.关联 react-native link react-native-smart-barcode 3.修改 an ...
- [原创].NET 分布式架构开发实战之二 草稿设计
原文:[原创].NET 分布式架构开发实战之二 草稿设计 .NET 分布式架构开发实战之二 草稿设计 前言:本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下 ...
- Autodesk 最新开发技术研讨会 -8月22日-Autodesk北京办公室
为了增进与广大中国地区Autodesk产品的二次开发人员的了解与互动,帮助中国地区的Autodesk产品二次开发人员了解Autodesk最新的二次开发技术动向,并获得Autodesk公司专业开发支持顾 ...
随机推荐
- sqlserver数据库备份时出现3241问题
工作中需要将生产上的数据库备份到测试数据库一份,然后同步生产环境进行测试.但是在将数据库还原的过程中,遇到了下面的问题: 说是,介质簇结构不正确,猜测应该是sqlserver的版本不一致的问题,然后查 ...
- 为什么不要使用 async void?
问题 在使用 Abp 框架的后台作业时,当后台作业抛出异常,会导致整个程序崩溃.在 Abp 框架的底层执行后台作业的时候,有 try/catch 语句块用来捕获后台任务执行时的异常,但是在这里没有生效 ...
- Centos扩容swap分区
今天在vps上装了个msf,装了一半竟然被kill掉了,因为RAM只有512M,swap也只有130M.遂到网上寻求解决办法,下面是我的笔记: 查看当前swap大小: free -h 修改swap大小 ...
- DotNetCore跨平台~关于appsettings.json里各种配置项的读取
回到目录 对于dotnet Core来说,依赖注入的集成无疑是最大的亮点,它主要用在服务注册与注入和配置文件注册与注入上面,我们一般会在程序入口先注册服务或者文件,然后在需要的地方使用注入即可,下面主 ...
- 前端笔记之移动端&响应式(上)媒体查询&Bootstrap&动画库&zepto&velocity
一.媒体(介)查询 1.1 基本语法 媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成.媒体查询中可用于检测的媒体特性有:width.height和color(等).使用媒体查询可以在不改变 ...
- 使用logdashboard进行可视化的日志追踪
本文源码在Github可以找到下载 LogDashboard 如果你还不了解LogDashboard请看这里. LogDashboard 1.1版本支持请求追踪,虽然目前版本还没有发布.不过这个功能可 ...
- 深入Go的底层,带你走近一群有追求的人
目录 缘起 自我介绍的技巧 硬核知识点 什么是plan9汇编 汇编角度看函数调用及返回过程 汇编角度看slice 正确参与Go夜读活动的方式 阅读原文 上周六晚上,我参加了"Go夜读&quo ...
- Java基础系列--HashMap(JDK1.8)
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10022092.html Java基础系列-HashMap 1.8 概述 HashMap是 ...
- Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则
上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则.Apollo是国内用户非常多的配置中心,所以,今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储 ...
- Spring Boot 2.x基础教程:工程结构推荐
Spring Boot框架本身并没有对工程结构有特别的要求,但是按照最佳实践的工程结构可以帮助我们减少可能会遇见的坑,尤其是Spring包扫描机制的存在,如果您使用最佳实践的工程结构,可以免去不少特殊 ...