在VB里,现成的语句是: RT1.Span ",。?!;", True, True
其中RT1是 “RTF文本框”,Span 是它的方法, 双引号内是“指定的字符”。功能是:寻找指定的字符(标点),并选中经过的字。
例如: ……午茶和晚茶。早茶通常清晨4时开市,很多顾客……
当起始点(光标)在“。”和“早”之间时,执行这行语句后,会★自动选中 “早茶通常清晨4时开市”这10个字。而起始点(光标)★仍然在“。”和“早”之间。
★用这个语句编制的过程,其代码也相应的比较简洁和易读。(相关代码附后)
2.语速问题:
“语速”的单位是:字数/分钟。而在设计我这样的“提词器”时,需要知道的是:“当前句子(红色)”延迟的“时间”,单位是:毫秒,它等于:每个字延迟的时间(毫秒/字)乘以这句的“字数”。我们不能调节“字数”(乘数),但可以调节“被乘数”。
每个字延迟的时间(毫秒/字)与“语速”之间是什么关系呢?又如何来进行调节呢?可以看出,两者正好是“倒数”关系。
例如: “语速”为 150字/1分钟,它的倒数是 1分钟/150字=(60000/150)(毫秒/字)。如果我们的 Timer 控件的“事件”是“1字1次”的话,“每个字延迟的时间(毫秒/字)”不就是★Timer控件的Interval属性吗?如果我们用 变量H表示“语速”的话,Timer的Interval 就等于★60000\H 了。改变 H 的值就可以调节速度了。并且,当 H=200 时,语速就是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
RT1.SelLength = Tmin '红色句逐字
RT1.SelUnderline = True '红色句逐字加下划线
If Tmin > Tmax Then 'Tmax是红色句子的字数(长度)
RT1.SelUnderline = False
Timer1.Enabled = False
Tmin = 0
Displ
End If
End Sub