“发言提词器”程序设计中的2个问题--“按句突显提示”(按标点分句)和“语速”控制 (附:程序和VB源文件)

默认分类 | 2021-10-23 18:22:50 | 阅读 264 次 | 评论(0)
1.我觉得“按句突出显示”,比“按行突出显示”的可读性更好。这里的“突出显示”,是指:用红色显示当前的句子。用什么方法来把文本按“指定的标点”分割为“句”呢?
   在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, 所以,它的“内容”无法改动。(不允许改动,仅是借它作为操作台)

插图.png (上传于2021-10-23 18:22:50)
插图.png

我将其中最“难”、使用最频繁的“核心过程”贴在下面。如果你能理解,那其余的都不在话下了。

'停止计时--朝旧红色串方向(文尾方向)找标点--旧红色句子变灰--起点移动到下一句--向文尾方向找标点--新选中的句子变红色--开始延迟计时

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

文章评论,共0条
游客请输入验证码
浏览65414次
文章分类