从2个插图可以看出,文本中红色的句子(按标点分割文本)指示了“当前的句子”。这使得你的眼光搜索起来非常迅捷;红字下面逐字延伸的下划线,使得你的“语速”可以把握得相当精准。
而在“下划线”延伸到标点符号之前,整个文本是“静止”的。就是说,滚动的时机,是由你调节好的“语速”来决定的。
下面是2个关键问题:
1.“按句提示(红色)”和★文本自动向上滚动。用什么方法来把文本按“指定的标点”分割为“句”呢?
核心的语句是: RT1.Span ",。?!;", True, True
其中RT1是 “RTF文本框”,Span 是它的方法, 双引号内是“指定的字符”。 功能是:寻找指定的字符(标点),并选中经过的字。
例如: ……午茶和晚茶。早茶通常清晨4时开市,很多顾客……
当光标(起始点)在“。”和“早”之间时,执行这行语句后,会★自动选中 “早茶通常清晨4时开市”这10个字。而光标(起始点)★仍然在“。”和“早”之间。
'★★★如果这个“标点”这时正“躲”在文本框下面看不见的地方,文本就会★自动向上滚动,直到它“出来”。
2.语速问题:每分钟字数的计算与调节
《提词器》必须要能对“语速”进行设置和调节。(通过预演可以★选定合适的语速)“语速”的单位通常是:字数/分钟。而在我这样的“提词器”,需要知道的是:“当前句子(红色)”保持的“时间”,单位是:毫秒,它等于:每个字保持的时间(毫秒/字)乘以这句子的“字数”。我们不能调节“字数”(乘数),但可以调节“被乘数”。它与“语速”之间是什么关系呢?可以看出,两者正好是“倒数”关系。
例如: “语速”为 150字/1分钟,它的倒数是 1分钟/150字=60000毫秒/150字=60000\语速(毫秒/字),正是前面说的“被乘数”。如果我们的 Timer 控件的★“事件”是“1字1次”的话,“每个字保持的时间(毫秒/字)”不就是★Timer控件的Interval属性吗?如果我们用 H(H是个变量) 表示“语速”的话,Timer的Interval 就等于 600000\H。改变 H 的值就可以调节“每个字保持的时间(毫秒/字)”了。
当Timer 控件计数的字数累加值超过该句的“字数”时,启动了相关的过程,红色就会自动“转移”到下一句去了。
★要注意: RT1文本框的 Enabled 属性为 False。所以,它的“滚动条”、窗口等等都无法用鼠标去单击、使用。(如果允许使用的话,程序立刻大乱)
而且Text1本框的 Locked 属性为 True, 所以,它的“内容”无法编辑改动。(不允许改动,仅是借它作为操作平台)
以上2个关键问题解决了,编制这个程序也就没有什么难度了。