文本对照后的“编辑位置目录”

发布时间:2026/9/24 10:12:30

文本对照后的“编辑位置目录” 文本对照后可以创建一个“目录”用以快速定位“改动过的区域”。在文本行数比较多、编辑点又比较分散时如果要反复观察“不同的对照区域”的话则需要反复拖动滚动条的滑块同时还需留意滚动中的文本手忙眼花。程序要是能象“章回小说”那样提供一个“目录”。用户只要在“关注的目录条”中任意选中几个字两个相关区域就会立刻同步跳转到“窗口”顶部。那样就方便多了。操作“目录”就是把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
延伸阅读

更多相关文章

2026/9/24 7:44:08

FPGA入门指南:从核心原理到LED流水灯实战开发

如果你是一名电子工程师、嵌入式开发者,或者正在研究高性能计算、人工智能加速,那么“FPGA”这个词你一定不陌生。它经常和“高性能”、“低延迟”、“可编程”这些词一起出现,听起来很强大,但又似乎带着一层神秘的面纱。很多人对…

2026/9/23 17:27:17

C# JSON解析实战:System.Text.Json与Newtonsoft.Json深度对比与性能优化

1. 从“字符串”到“对象”:为什么C#开发者必须掌握JSON解析 如果你用C#写过任何需要和外部系统打交道的程序,无论是调用一个Web API、读取一个配置文件,还是把数据存到NoSQL数据库里,那你肯定绕不开JSON。它就像程序员世界里的“…

2026/9/25 1:47:39

Font Awesome 4.7.0 部署、排坑与迁移实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 1:47:39

Spring Boot高校组团平台实战:轻量部署与多库适配

简介:这是一套基于SpringBoot开发的校园组团平台完整源码项目,面向高校计算机专业学生、Java后端初学者及Web全栈学习者,旨在解决大学生兴趣小组组建、活动协同与线上交流的实际需求。资源共789个文件,涵盖109个Java后端核心代码、…

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码