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

相关推荐

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

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

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

📅 2026/10/2 18:46:47
Zookeeper集群部署与分布式锁实现实战指南

Zookeeper集群部署与分布式锁实现实战指南

1. Zookeeper集群与分布式锁的核心价值 在分布式系统中,数据一致性和资源协调是两大核心挑战。Zookeeper作为一个分布式协调服务,通过其独特的ZAB协议和树形数据结构,为分布式应用提供了可靠的协调基础。而分布式锁作为Zookeeper最典型的应用…

📅 2026/9/17 13:47:06
04 Pandas 数据清洗实战:从表格读取到机器学习特征准备

04 Pandas 数据清洗实战:从表格读取到机器学习特征准备

前言前面三篇分别介绍了机器学习流程、Python 环境和 NumPy 数组。真正进入项目后,我们通常不会马上调用模型的 fit(),而是先花时间理解数据:文件能否正确读取,每一列代表什么,有没有缺失、重复或格式错误,…

📅 2026/8/21 12:29:18
MORE NEWS

更多资讯

📰

从零部署EMQX:MQTT服务器搭建与物联网消息链路实战指南

最近在给一个设备数据采集项目搭建消息通道,选型的时候在几个MQTT broker 之间来回对比了一圈,最后定下来用 EMQX 做 MQTT 服务器。这篇文章就是我从零开始把 EMQX 部署起来、跑通客户端连接、处理常见坑的完整记录。标题里写的"mtqq"其实是 M…

📰

AI漫剧工业化流水线:番茄+豆包+ComfyUI+红果四环协同实战

1. 项目概述:这不是“AI工具堆砌”,而是一套可落地的漫剧工业化生产流水线你刷到过那种开头三秒就抓住眼球的AI漫剧吗?主角一抬眼,背景光影随情绪流动,台词刚落,镜头自动切到特写——不是靠剪辑师熬通宵调色…

📰

Red Hat为NVIDIA Vera Rubin定制RHEL:AI平台深度优化底座

NVIDIA在GTC上公布Vera Rubin架构路线图之后,Red Hat这边同步官宣的消息也值得圈内人注意:专门为英伟达Vera Rubin AI平台定制RHEL操作系统。如果你常年跟Linux服务器、GPU集群、大模型训练这些事打交道,这条消息的分量比"又有一家厂商宣…

📰

EMQX部署MQTT服务器实战:从Docker到生产环境

先说一句题外话:你搜“使用emqx部署mtqq服务器”的时候,八成是把MQTT这几个字母打反了。这种手滑我太熟悉了,自己当年第一次查资料的时候也干过同样的事。但不管你是刚接触MQTT的小白,还是已经在设备端写了好一阵子固件的工程师&a…

📰

LinuxDeploy安卓容器中MySQL与Redis启动失败排查与修复指南

用LinuxDeploy在安卓手机上玩Linux,最劝退人的一步往往不是安装,而是装完MySQL、Redis后启动就报错。我早期在这上面踩了整整一个月的坑,日志翻烂了才摸清套路——这类问题90%不是因为数据库本身坏了,而是LinuxDeploy的chroot环境…

📰

MindSpore大模型预训练数据质量过滤实战:规则、打分与去重

大模型预训练这件事,真正跑过一遍的人都会有一个共同感受:模型结构、并行策略、显存优化这些"硬骨头"其实都有成熟方案可抄,真正让人头疼的是数据。我前后参与过几个十亿到百亿参数级别的预训练项目,踩得最深的坑几乎全…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬