2012-04-19 2 views
1

ActiveDocument.Charactersにループがあります。Microsoft Word文書の単語を滑らかに/視覚的に繰り返します。

ドキュメント領域へのデバイスコンテキストハンドルを取得し、オーバーレイを表示してテキストをスムーズに左から右に1行ずつハイライトしたいとします。

目的は、アプリケーションが特定の速度で読むことを誘導しているかのように滑らかなアニメーションを実現することです。

ループ自体はまったく滑らかではありません。アルゴリズムの提案。

+0

? –

+0

あなたが持っているコードを教えてもらえますか? –

+0

@DanielHilgarth:Lol ...ループはうまくいきます...ビジュアルオーバーレイを読み込みガイドとしてアニメーション化しようとしています。私はすぐに参考のために書いたC#サンプルをアップロードします。 –

答えて

1

アニメーションについてとても滑らかではない点は何ですか?美しくアニメーション化しています。素晴らしい仕事をあなたは次の四角形を描画する方法を参照している場合は、私は(そして、私は間違っている可能性)と信じて:)

を行って、それはすべてthis.RenderSpeedに依存します。値が小さいほど、スムーズにアニメートされます。現在のコードでは、それはthis.RenderGuidePoint.Offset(1, 0);で良く、this.RenderGuidePoint.Offset(25, 0);で悪く見えます。

私はイメージの熟練者ではありませんが、ここで私が考えることができる例があります(しかし、最良の例ではありません)。あなたが見ている映画を想像してください、それはすべてフレームレートに依存します。 fpsが通常の人間の目で処理できるものより多い場合、画像がより突然表示されます(例:2倍速または4倍のを使用して早送りする場合)。同様に.Offset()をコードに追加するほど、矩形の描画がより突然表示されます。

解決策は何ですか?

描画されている次の矩形の「X」ではあまり働かないので、タイマーのスムーズな作成のために時間間隔を操作できます(矩形の再描画)。 テスト目的のために、いくつかの値をハードコードし、出力に満足していました。また、私が得ている結果を得るかどうかを見てください。

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

+0

努力してくれてありがとう。 (1)アップロードされたソリューションは、素早いプロトタイプのためのものだったので、非常に粗いコードです。 (2)解は、所望の効果のみを示す。私は実際には、文字の位置と大きさに影響を及ぼす文字ごとに異なる書式設定を保持しながら、このテキストをMicrosoft Wordからインポートしたいと考えています。 (3)次のコメントが出てくる。 –

+0

(3)タイマーコンポーネントは高解像度(FPS)を保証できないため、このアプリケーションを高速化するソリューションはより論理的ですが、実際のシナリオでは機能しません。よりネイティブのWin32タイマーを使用していたとしても、WinFormsのリフレッシュレートは、遷移のスムーズさを十分に制限する可能性が非常に高いです。 Double Buffferingは解決策になるかもしれませんが、私はそれをさらに調べる必要があります。 –

+0

あなたのポイントについて2:それはまさに私が「Xの "X"で何もできないので言っていたときのことを意味しています...あなたのコードは文字のフォーマットに基づいて計算しています。もう1つの方法は、 '5-25'から '1X-5X'と言うようにドロップダウンを変更し、スピードの面で作業することです。ちょうど2セント –

関連する問題