問題タブ [flicker]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
text - Win32 テキスト描画パズル
Win32 でちょっとしたテキスト描画パズルを手に入れました。ウィンドウの上部にアプリケーションのユーザー向けの指示を表示しようとしています。
以下のウィンドウを参照してください(境界が見えるようにテキストの背景色を変更しました)
(出典: billy-oneal.com )
現在、DrawTextEx を使用してテキストをウィンドウに描画していますが、指定した RECTangle 全体が塗りつぶされていないという問題があります。ウィンドウのサイズが変更されるまで、その領域を描画しなくても問題ありません。
(出典: billy-oneal.com )
ウィンドウのサイズ変更のためにテキストが再ラップされると、DrawTextEx はその背景をクリアしないため、これらのアーティファクトは残ります。
FillRect を使用して、テキスト描画呼び出しの背後の領域を塗りつぶそうとしました。これにより、視覚的なアーティファクトがなくなりますが、テキストが完全に消去されてからディスプレイに完全に再描画されるため、テキストがちらつきます。
テキストを含まない領域を背景色で描画する方法についてのアイデアはありますか?
編集:可能であれば、フォームをダブルバッファリングする必要はありません。
EDIT2:サイズ変更中にラッピングが変更されたことを検出した場合にのみ、テキストを再描画することで問題を解決しました。
wxpython - サイズ変更中に (ちらつきなしで) wx.html.HtmlWindow を同じ位置に保つにはどうすればよいですか?
HTMLウィンドウのサイズを変更できるようにしたいが、スクロール位置を維持したい。この例はほとんど機能しますが、ちらつきます。
テストするには:
- [HTML ファイルの読み込み] ボタンを使用して適切なサイズの html ファイルを読み込みます。下に
スクロールし
ます。ウィンドウのサイズを変更します。
ウィンドウはサイズを変更しても同じ位置を保ちますが、ひどくちらつきます。htmlwindow のコードは、サイズ変更ごとにスクロール位置を 0 にリセットしていると思います。post_resize関数でスクロール位置が確定するまで再描画しないようにしたいです。
フリーズ/解凍のさまざまな組み合わせを試し、ペイント イベントにフックしようとしましたが、成功しませんでした。提案?
jquery - Firefox jquery scrollTo ちらつきバグ
ここで Firefox のちらつきについて話しているスレッドをかなり見てきましたが、私が抱えている問題を完全に説明しているものはありません。
水平スクロール Web サイト、固定位置メニュー、jquery プラグイン .scrollTo 処理の次と前のボタンがあります。これは Chrome と Safari ではうまく機能しますが (IE については知りません)、Firefox では、右上隅の矢印で左右にスクロールするたびにちらつきが発生します。
位置が固定されているすべての要素をoverflow:autoに設定しようとしましたが、何もしませんでした。私は JS や Jquery にあまり詳しくありませんが、物事を変えるには十分な知識があります。どんな助けでも大歓迎です!
jquery - jQuery color plugin: onMouseOver animation causes flickering in FF3.5.5
I'm trying to change the background color of a div on mouseover and mouseout. Instant change to yellow on MouseOver, and slow fade on MouseOut.
function hilightel(keydiv)
{
$('#'+keydiv).animate({ backgroundColor: '#ffffd3' },1);
}
function lolightel(keydiv)
{
$('#'+keydiv).animate({ backgroundColor: '#ffffff' },300);
}< div onMouseOver=javascript:highlightel('item1'); onMouseOut=javascript:lolightel('item1'); id='item1'>CONTENT< /div>
When the mouse moves over text within the div, though, it thinks I've moused-out and so flickers badly.
Alternatives that don't work:
- animateToClass doesn't support background-color so I'm using the 'color' plugin
- I hear that switchClass doesn't work in Chrome
- Can't use .hover because their will be dynamically named divs in the page so need a general function
Thanks in advance...
user-interface - サイズ変更時に Win32 GUI がちらつく
タブ コントロールを持つ Win32 GUI プログラムがあり、各タブにはリスト ビュー コントロールがあります。ウィンドウのサイズを変更するたびに、大きなちらつきがあります。私は次のことを試しました:
- メイン wndproc で WM_ERASEBKGND を処理し、TRUE を返します。無効。
- イベント ループ内のすべての WM_ERASEBKGND メッセージを除外します。無効。
- メイン ウィンドウで WM_CLIPCHILDREN スタイルを設定します。ウィンドウのサイズが変更されると、リスト ビュー コントロールは単純に白い背景に消去され、再描画されません。
- MoveWindow の代わりに DefWindowPos を使用します。無効。
- MoveWindow の bRepaint に FALSE を渡します。WS_CLIPCHILDREN を設定するのと同じ効果 (上記参照)。
RegisterClassEx コードは次のとおりです。
WM_SIZE ハンドラ:
スタイルは次のとおりです。
- メインウィンドウ:
WS_OVERLAPPEDWINDOW
- タブ コントロール:
WS_CHILD
(およびWS_VISIBLE
) - リスト ビュー コントロール:
WS_CHILD | WS_BORDER | LVS_REPORT
(およびWS_VISIBLE
)
c# - アプリケーションの実行中にデータグリッドの行がちらつくのを防ぐ方法
現在開発中のアプリケーションでは、datagridviewを使用してデータを表示しています。それを埋めるには、ボタンを押す必要があります。バックグラウンドワーカーが実行を開始し、データテーブルを埋め、実行が終了すると、データグリッドのデータソースとしてデータテーブルを使用します。これは正常に機能し、UIは応答性を維持します。しかし今、私はそれらの値に応じて行に色付けを実装しました(私はまだそれで遊んでいるので、どんな提案も歓迎します):
これは私に問題を与えています。着色が機能しないからではなく、機能します。しかし、それはそれを遅くするからです。初めては正常に動作しますが、もう一度ボタンを押すと、地獄のように遅くなり、データグリッドがちらつきます。これを後処理として実行したいので、backgroundworkerが完了した後に実行する必要があります(または実行する必要があります)。しかし、RunWorkerCompletedイベントからapplycoloringを呼び出すと、非常に遅くなります。これを防ぐにはどうすればよいですか?新しいクエリを実行している間(グリッド内の現在のデータを失わない間)にUIがちらつかないようにするにはどうすればよいですか?
jquery - jQueryフリッカー/フラッシュアニメーション
画像をランダムにちらついたり点滅させたりするきちんとしたjQuery効果を知っている人はいますか?ここでの投稿のほとんどは「ちらつきを止める方法」などであるため、実際に画像をちらつきさせることについて何かを見つけるのはかなり難しいです。
jquery - FirefoxでのJQueryトグル/スライダーのちらつき
うーん...私はここstackoverflowの他のさまざまなスレッドでこの問題について読んだことがありますが、進行中の作業でまだ問題が発生しています(それほどエキサイティングなjQueryは関与していません)
細かく展開するが折りたたむとちらつく単純なトグル-同じボタンを使用して折りたたむには、下にスクロールする必要があります。FF 3.5.7(mac)でのみ動作するようです-Safariで期待どおりに動作します。さまざまなオーバーフローを試しました:#main idとelswhereの非表示の順列、および競合が発生した場合に備えて、href#を完全に削除しました。まだ喜びはありません。
私は何かが足りないのですか、それとも誰かが私を正しい方向に向けることができますか?
どうもありがとう、D
c++ - ユーザーがダイアログのサイズを変更しているときに、ウィンドウにダイアログ内の何も再描画しないように強制するにはどうすればよいですか?
ユーザーがサイズ変更可能なウィンドウの隅をつかんで移動すると、ウィンドウは最初にウィンドウの内容を移動し、次にサイズ変更されているウィンドウにWM_SIZEを発行します。
したがって、さまざまな子コントロールの動きを制御したい、ちらつきをなくしたいダイアログでは、ユーザーは最初に、ウィンドウがどのように見えるかをOSがどのように考えるかを確認します(AFAICT、OSは移動にbitbltアプローチを使用しているため) WM_SIZEを送信する前にウィンドウ内にあるもの)-その後、ダイアログが子コントロールの移動やサイズ変更などを処理できるようになります。その後、強制的に再描画する必要があります。これにより、ちらつきが発生します(非常に少しでも)。
私の主な質問は次のとおりです。ウィンドウにこの愚かなbitbltのことを行わないように強制する方法はありますか? ウィンドウのサイズが変更されると移動するコントロール、または親のサイズが変更されるとサイズが変更されるコントロールを備えたウィンドウの場合は、間違いなく間違いになります。いずれにせよ、OSにプレペイントを行わせることは、作品をねじ込むだけです。
しばらくの間、CS_HREDRAWおよびCSVREDRAWクラスフラグに関連しているのではないかと思いました。ただし、実際には、OSからウィンドウの消去を要求されたくないのです。OSが最初にウィンドウの内容を変更せずに、自分で再描画を実行したいだけです(つまり、表示を元の状態にしたいと思います)。ユーザーがサイズ変更を開始する前-OSからのビットブリットなし)。また、OSがすべてのコントロールに再描画する必要があることを通知したくありません(サイズ変更によって実際に隠されたり表示されたりしたものでない限り)。
私が本当に欲しいもの:
- 画面上で何かが更新される前に、子コントロールを移動およびサイズ変更します。
- 移動またはサイズ変更されたすべての子コントロールを完全に描画して、新しいサイズと場所にアーティファクトなしで表示されるようにします。
- 子コントロール自体に影響を与えることなく、子コントロールの間にスペースを描画します。
注:手順2と3は逆にすることができます。
上記の3つのことは、DeferSetWindowPos()をWS_CLIPCHILDRENとしてマークされたダイアログリソースと組み合わせて使用すると正しく発生するように見えます。
上記をメモリDCに対して実行し、WM_SIZEハンドラーの最後で1つのbitbltのみを実行できれば、さらに小さなメリットが得られます。
私はこれでしばらく遊んでいますが、2つのことから逃れることはできません。
私はまだWindowsが「予測bitblt」を実行するのを抑制することができません。 回答:この動作を無効にするためにWM_NCCALCSIZEをオーバーライドするソリューションについては、以下を参照してください。
子コントロールがダブルバッファに描画するダイアログを作成する方法がわかりません。回答:ダイアログをダブルバッファリングするようにWindows OSに要求する方法については、以下のJohnの回答(回答としてマーク)を参照してください(注:ドキュメントによると、これにより、ペイント操作間のGetDC()は許可されません)。
私の最終解決策(特にジョンK.に貢献してくれたすべての人に感謝します):
多くの汗と涙の後、私は次のテクニックがAeroとXPの両方で、またはAeroが無効になっている場合でも問題なく機能することを発見しました。フリックは存在しません(1)。
- ダイアログプロシージャをフックします。
- WM_NCCALCSIZEをオーバーライドして、Windowsにクライアント領域全体を検証させ、bitbltは行わないようにします。
- WM_SIZEをオーバーライドして、表示されているすべてのウィンドウに対してBeginDeferWindowPos / DeferWindowPos/EndDeferWindowPosを使用してすべての移動とサイズ変更を行います。
- ダイアログウィンドウがWS_CLIPCHILDRENスタイルであることを確認します。
- CS_HREDRAW | CS_VREDRAWは使用しないでください(ダイアログは使用しないため、通常は問題になりません)。
レイアウトコードはあなた次第です-レイアウトマネージャーのCodeGuruまたはCodeProjectで例を見つけたり、独自の例を作成したりするのは簡単です。
以下に、ほとんどの方法で使用できるコードの抜粋を示します。
サイズ変更は、実際には次のようにResize()メンバーによって行われます。
そして、おそらく最後のトリッキーなビットは、ResizeAgentのReposition()ハンドラーで見ることができます。
「トリッキー」とは、破壊されたウィンドウをいじるのを避け、表示されていないウィンドウに対してSetWindowPosを延期しようとしないことです(これは「失敗する」と文書化されているため)。
私は、いくつかのコントロールを非表示にし、かなり複雑なレイアウトを使用して優れた成功を収めている実際のプロジェクトで上記をテストしました。ダイアログウィンドウの左上隅を使用してサイズを変更した場合でも、Aeroがなくてもちらつきはありません(1)(IE、FireFoxなどのハンドルをつかむと、ほとんどのサイズ変更可能なウィンドウで最もちらつきと問題が発生します)。
十分な関心があれば、CodeProject.comまたは同様の場所の実際の実装例を使用して調査結果を編集するように説得することができます。私にメッセージを送ってください。
(1)かつてそこにあったものの上に、1回のドローを避けることは不可能であることに注意してください。変更されていないダイアログのすべての部分について、ユーザーには何も表示されません(ちらつきはまったくありません)。しかし、状況が変わった場合、ユーザーに見える変化があります。これは避けることは不可能であり、100%の解決策です。
graphics - DirectDrawオーバーレイ
DirectDrawオーバーレイの実用的な例(コード)を持っている人はいますか?画面上で何かが動くように。DirectDrawオーバーレイの使用例を見つけようとしましたが、見つかりませんでした。
ありがとうございました。