文本对照后的“编辑位置目录”
文本对照后可以创建一个“目录”用以快速定位“改动过的区域”。在文本行数比较多、编辑点又比较分散时如果要反复观察“不同的对照区域”的话则需要反复拖动滚动条的滑块同时还需留意滚动中的文本手忙眼花。程序要是能象“章回小说”那样提供一个“目录”。用户只要在“关注的目录条”中任意选中几个字两个相关区域就会立刻同步跳转到“窗口”顶部。那样就方便多了。操作“目录”就是把2个文本中有特别意义的行滚动到窗口的第1行后面简称“顶行”方便用户观察、分析。怎样创建“目录”先介绍几个要用的“工具”一、 当前在窗口顶行的是文本内容的第几行 lngVPoslngVPos SendMessage(RT1.hwnd, EM_GETFIRSTVISIBLELINE, 0, ByVal 0) 其中 RT1 是文本框。二、 指定位置s的字在文本内容里是第几行NewLine例如文本 Text1200个字中有1个词“亮眼”全文唯一要知道它是在文本第几行跟它现在是否看得见无关先要查明它的“位置”是第几个字ssInStr(1,Txt1,亮眼) ★在博文后面“操作目录的代码”里“亮眼”对应于变量 hh。然后算出“亮眼”在第几行NewLineNewLine RT1.GetLineFromChar(s)三、当需要把含这个“亮眼”词的行滚动到窗口顶行时文本应该要滚动的“行数”lngVDifflngVDiff NewLine - lngVPos四、让文本在文本框RT1里滚动 lngVDiff 行的滚动命令SendMessage RT1.hwnd, EM_LINESCROLL, 0, ByVal lngVDiff 最后实现目标说明一、关于 SendMessage 、GetLineFromChar(s) 和 InStr(1,Txt1,亮眼) 这三个“命令”请自己查看相关的资料并注意2个“常数” EM_GETFIRSTVISIBLELINE 和 EM_LINESCROLL 的意义。二、本文中所有的“第几行”是从文本内容在控件里不是窗口的首行算起见。文本无论怎样滚动各行的内容都是不变的。例如如果“亮”字是在第3行第12个那么无论文本怎样滚动它总在第3行第12个即使它暂时看不见。我们的目标是把各次“开始编辑”的行即由“左右相同”转变为“左右不同”的行滚动到“可见第一行”或者第二行。第二行更好可以让用户确信这是差异的开始见图。看来问题的关键是每次滚动需要确定1个“在【需要滚动到窗口顶部的行】中存在、并且在全文中独有的”字符串。★“唯一的关键字符串”我在“CSDN网站”和“BCCN网站”发表过题为《文本比对程序设计--按‘求同存异’来梳理文本用‘反转的文本为‘状态数组’充值》的文章。里面介绍了可以获取“每一次编辑的起始行号QS()和连续行数CD()”的方法。在这里可以用到的是“起始行号QS()”。当然左端显示“ 85 ”的行在文本里的行数肯定超过 85。利用这两组数据就可以建立“目录”和操作“目录”了文末附上的3个过程的代码很短我实际使用的可以供读者参考。要编制这个程序还有几个必须的环节1 最重要的“比对算法”在本文中提到的、在本网站发表过的博文中有详细的叙述。2 利用上一环节中得到的数据QS()和CD(),给相应的行加上“”、“-”、“”标志。插入“///////”行。3 利用行首的“”、“-”、“”标志以及文本中的 Added 等标志给相关的行设置彩色高亮。4 操作“垂直滚动条”时的同步滚动。如果要运行我上传的“带目录的比对程序”需要在系统中注册2个 OCX 文件COMDLG32.OCX 和 RICHTX32.OCXPrivate Sub DiSan() 建立目录文本 参考插图。 Dim cha$, sha$, cuo$, mn%, Txt2new$, k$, sp$, xu$ sp String(25, )项目条之间的空行 cha Added 新增 sha Deleted 删除 cuo Changed 更换 Txt2new 编辑位置目录 vbCrLf 有5个空格用来退出。 mn 1第mn次编辑 Do xu Left$(mn , 3) k Left$(CD(0, mn) --- CD(1, mn) , 11) _ ------ Left$(Trim$(Str$(QS(1, mn) - 1)) , 3) vbCrLf sp ★“QS(1, mn)” 表示编辑后文本的第mn次编辑的起始行的行号 “-1”表示“上一行” ★ 关键数据是每个目录条的“最后5个字符” If CD(0, mn) 0 And CD(1, mn) 0 Then Txt2new Txt2new xu cuo k vbCrLf更换 ElseIf CD(1, mn) 0 Then Txt2new Txt2new xu sha k vbCrLf删除 Else Txt2new Txt2new xu cha k vbCrLf新增 End If mn mn 1 Loop Until mn mnMAX RT3.Text Txt2new RT3 是目录文本框 End Sub 操作目录 Private Sub RT3_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim txt3$, hh$, a, s2, s3 If RT3.SelLength 0 Then Exit Sub a RT3.SelStart 1 txt3 RT3.Text 找“行尾”的“回车”位置 s3 InStr(a, txt3, vbCrLf) 如果行尾是5个空格就退出。 If Mid$(txt3, s3 - 5, 5) Then Exit Sub ★标题和空白行的最后5个字都是空格 hh vbCrLf Mid$(txt3, s3 - 5, 5) ★“回车”加上目录条行尾的5个字符就成了“编辑后文本RT2”的唯一关键词行号。 txt2 RT2.Text s2 InStr(1, txt2, hh) 2 在编辑后文本RT2里寻找“唯一的关键词” NewLine RT2.GetLineFromChar(s2) NewLine是公共变量需要滚动到窗口顶行的内部行号。 Tong12 调用“滚动”过程送去 NewLine 的值。实现滚动。 DoEvents End Sub Public Sub Tong12() 被“操作目录”过程调用 ★NewLine是公共变量由调用Tong12的过程送来的、 “要滚动到窗口顶部的行”的内部行号 RT1是编辑前文本框RT2是编辑后文本框 lngVPos1 SendMessage(RT1.hwnd, EM_GETFIRSTVISIBLELINE, 0, ByVal 0) DoEvents lngVDiff NewLine - lngVPos1 If lngVDiff 0 Then SendMessage RT1.hwnd, EM_LINESCROLL, 0, ByVal lngVDiff End If DoEvents lngVPos2 SendMessage(RT2.hwnd, EM_GETFIRSTVISIBLELINE, 0, ByVal 0) DoEvents lngVDiff NewLine - lngVPos2 If lngVDiff 0 Then SendMessage RT2.hwnd, EM_LINESCROLL, 0, ByVal lngVDiff End If DoEvents End SubMDLG32.OCX 和 RICHTX32.OCX

相关新闻

第 7 章 舵机控制的高级话题 速度曲线、扭矩管理、通信可靠性、寿命维护——那些规格书不会告诉你的真相

第 7 章 舵机控制的高级话题 速度曲线、扭矩管理、通信可靠性、寿命维护——那些规格书不会告诉你的真相

上一节:第 6 章 BusLinker舵机控制器开发 从20Hz到100Hz,串口通信的血泪史 第二部分:串口舵机——从协议到实战 第 7 章 舵机控制的高级话题 速度曲线、扭矩管理、通信可靠性、寿命维护——那些规格书不会告诉你的真相 前两章讲了怎么让舵…

2026/10/28 5:18:44 阅读更多 →
利用 Redis 实现每周热评,简直无敌

利用 Redis 实现每周热评,简直无敌

做每周热议,应该用缓存来做,如果直接查库的话,会对数据库造成压力。用缓存做的话,用Redis 来做缓存的话比较合适一点。 ## 利用Redsi 添加 数据命令 ## day:1 指的是在1号的时候 post:1 第一篇文章添加了 10 条评论。 #后面 6 pos…

2026/10/24 14:09:11 阅读更多 →
BDNF、EGF、IL10、IL6、IL6R、MCP1、SOD、TH 八因子 CBA 流式多因子 Panel—— 融合神经修复、氧化应激、中枢炎症多维通路,搭建神经损伤一体化生物标志物检测方案

BDNF、EGF、IL10、IL6、IL6R、MCP1、SOD、TH 八因子 CBA 流式多因子 Panel—— 融合神经修复、氧化应激、中枢炎症多维通路,搭建神经损伤一体化生物标志物检测方案

神经退行性疾病、脑缺血、创伤性脑损伤、神经炎症领域研究,同时涉及神经营养重塑、氧化应激损伤、中枢炎症浸润三大交互通路,BDNF、TH 代表神经细胞存活与多巴胺能神经元功能;SOD 反映机体抗氧化能力;EGF 调控胶质、血管组织修复&…

2026/10/31 0:53:40 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/1 0:24:43 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/1 10:36:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/1 10:36:51 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/1 1:06:58 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/1 10:35:11 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/1 9:35:41 阅读更多 →

日新闻

周新闻

月新闻