平滑/可视地迭代Microsoft Word文档中的单词

时间:2012-04-19 15:45:52

标签: c# algorithm vba ms-word interop

我在ActiveDocument.Characters上有一个循环。

我已检索到文档区域的设备上下文句柄,并希望显示一个叠加,以便从左到右平滑地突出显示文本。

目标是实现流畅的动画,就像应用程序引导您以一定的速度阅读一样。

当然,循环本身并不顺畅。对算法的任何建议。

1 个答案:

答案 0 :(得分:1)

动画有什么不那么顺利?它的动画效果非常好。干得好:):/ / p>

如果你指的是绘制下一个矩形的方式,我相信(我可能是错的),这完全取决于this.RenderSpeed。值越小,它的动画就越平滑。在当前代码中,它会在this.RenderGuidePoint.Offset(1, 0);处看起来最好,在this.RenderGuidePoint.Offset(25, 0);时会更差。

我不是图像方面的专家,但这里有一个我能想到的例子(尽管不是最好的例子)。想象一下你正在观看的电影,这完全取决于帧速率。如果fps超过普通人眼可以处理的范围,您会注意到图像显得更加突然(例如:当您使用2X速度或4X 快进电影时)。同样,代码中的.Offset()越多,矩形的绘制就越突然。

那么解决方案是什么?

由于我们不能对正在绘制的下一个矩形的“X”做太多,我们可以操纵Timer的时间间隔以更平滑地创建(重绘矩形)。 出于测试目的,我对一些值进行了硬编码,并对输出感到满意。看看你是否也得到了我得到的结果。

private void ToolStripComboBoxSpeed_SelectedIndexChanged (object sender, System.EventArgs e)
{
    this.RenderSpeed = (int) this.ToolStripComboBoxSpeed.SelectedItem;

    Switch (this.RenderSpeed)
    {
        case 5: TimerGuide.Interval = 50; break;
        case 10: TimerGuide.Interval = 40; break;
        case 15: TimerGuide.Interval = 30; break;
        case 20: TimerGuide.Interval = 20; break;
        case 25: TimerGuide.Interval = 10; break;
    }
}


private void PictureBox_Paint (object sender, System.Windows.Forms.PaintEventArgs e)
{
   //
   // '~~> Rest of the code remains same
   //

   //this.RenderGuidePoint.Offset(this.RenderSpeed, 0);
   this.RenderGuidePoint.Offset(1, 0);

   //
   // '~~> Rest of the code remains same
   //
}

HTH