VB6编程交流—“助读器”(自创)的程序设计 (上传程序和源文件、分析算法和代码。代码并不复杂)
上台发言可以带着发言稿,但是始终低头看稿不妥;而离稿后,再看稿又得急匆匆地寻找“当前句子”,这是其一。二是“语速”问题:准备好是10分钟,而上台后由于紧张,语速没把控好,时间过短过长,又是件尴尬的事。这个软件就是针对这两个问题而设计的。看了插图你就会明白:文本中的红色句子,就是当前的位置(按“句”突出显示);而红色句子底下逐渐延伸的“下划线”,则指示了“当前该念的字”(接近)。由此可以让你控制好你的语速。
当然,由此又会引发出一些新的问题。比如:在“脱稿发挥”时,需要“暂停”;想要临时跳过某些内容时,需要“直接进入下一句”等等。“助读器”都必须要安排相应的控制键。
由于程序的代码并不是很复杂,我试着与读者解释、交流一下。下面有上面提到的两个关键问题:
1.要“按句突出显示(红色)”,用什么方法来把文本按“指定的标点”分割为“句”呢?
核心的语句是: RT1.Span ",。?!;", True, True
其中RT1是 “RTF文本框”,Span 是它的方法, 双引号内是“指定的字符”。 功能是:寻找指定的字符(标点),并选中经过的字。
例如: ……午茶和晚茶。早茶通常清晨4时开市,很多顾客……
当光标(起始点)在“。”和“早”之间时,执行这行语句后,会★自动选中 “早茶通常清晨4时开市”这10个字。而光标(起始点)★仍然在“。”和“早”之间。
2.语速问题:每分钟字数的计算与控制
《助读器》必须要能对“语速”进行设置和调节。“语速”的单位通常是:字数/分钟。而在我这样的“助读器”,需要知道的是:“当前句(红色)”保持的“时间”,单位是:毫秒,它等于:每个字保持的时间(毫秒/字)乘以这句的“字数”。我们不能调节“字数”(乘数),但可以调节“被乘数”。
它与“语速”之间是什么关系呢?又如何来进行调节呢?可以看出,两者正好是“倒数”关系。
例如: “语速”为 150字/1分钟,它的倒数是 1分钟/150字=60000毫秒/150字=6000\15(毫秒/字),正是前面说的“被乘数”。如果我们的 Timer 控件的“事件”是“1字1次”的话,“每个字保持的时间(毫秒/字)”不就是★Timer控件的Interval属性吗?如果我们用 H*10(H是个变量) 表示“语速”的话,Timer的Interval 就等于 60000\(H*10)=★6000\H 了。改变 H 的值就可以调节速度了。并且,当 H=20 时,语速就是200字/分钟。
当Timer 控件计数的累加值超过该句的“字数”时,启动了相关的过程,红色就会自动“转移”到下一句去了。
注意: RT1文本框的 Enabled 属性为 False,所以,它的“滚动条”、窗口等等都无法用鼠标去单击、使用。(如果允许使用的话,程序立刻大乱)
Text1本框的 Locked 属性为 True, 所以,它的“内容”无法改动。(不允许改动,仅是借它作为操作台)
尽管源文件里有全部的代码,但我还是将其中最“难”、使用最频繁的“核心过程”贴在下面。如果你能理解,那其余的都不在话下了。
Private Sub Displ() '更新显示红色★每一句都要执行的子过程
'停止计时--红变灰--移动到新起点--灰变红--开始计时
Timer1.Enabled = False
RT1.Span ",。?!;", True, True '找标点 朝旧红色串方向(文尾方向)
DoEvents
RT1.SelLength = RT1.SelLength + 1 '包含了“标点”
RT1.SelColor = RGB(150, 150, 150) '旧红串变灰色
RT1.SelUnderline = False
RT1.SelStart = RT1.SelStart + RT1.SelLength '起点进到下一句
RT1.Span ",。?!;", True, True '向文尾方向找标点
DoEvents
RT1.SelLength = RT1.SelLength + 1 ''包含了“标点”
Tmax = RT1.SelLength'Tmax是红色句子的字数(长度)
'----
If Tmax = 0 Then '文本结束
Timer1.Enabled = False
Exit Sub
End If
'----
RT1.SelColor = RGB(255, 0, 0) '红色
RT1.SelUnderline = False
Tmin = 0
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Tmin = Tmin + 1
RT1.SelLength = Tmin '红句逐字
RT1.SelUnderline = True '红句逐字加下划线
If Tmin > Tmax Then 'Tmax是红色句子的字数(长度)
RT1.SelUnderline = False
Timer1.Enabled = False
Tmin = 0
Displ
End If
End Sub
为了方便阅读代码,我在代码页中加了许多注释。如有疑问,或发现错误或不足,敬请留言。我会尽力解答并真诚感谢。
助读器.rar
(100.49 KB)
[此贴子已经被作者于2021-10-13 21:53编辑过]