問題タブ [custom-draw]

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.

0 投票する
0 に答える
79 参照

winapi - CDDS_ITEMPREPAINT GetItem は子に対して false を返します

CDDS_ITEMPREPAINT の子アイテムの tv.pszText を読んでいますが、このコードを実行するたびにガベージ値が返されます。ただし、親ノードでは正常に機能します

親ノードである level==0 の実行は問題ありませんが、子ノードである level==1 の場合はガベージ値を取得します。助けていただければ幸いです。

0 投票する
1 に答える
741 参照

delphi - マウスの位置でコンポーネントを描画するときのちらつき

マウスで移動するカーソルの X 位置に垂直線を描画しようとしています。この行は、フォームのすべてのコンポーネントの「上」に描画する必要があります。これを実現するために、 https ://stackoverflow.com/a/4481835 で提供されているコードを使用しています。

完全な形式のコードは次のとおりです。

1つのことを除いて、私が望んでいたように機能します。マウスを左右に動かしたり (X 位置を変更したり) すると、線が常に画面から描画されたり、描画されなかったりするため、ちらつきます。比較的速く移動すると、行がカーソルの「遅れ」に気付くこともあります。

この視覚効果を改善する方法を知っている人はいますか? 別の技術/アルゴリズム? どこかに専用コンポーネント?

0 投票する
1 に答える
428 参照

wpf - カスタム WPF コントロールでカスタム描画された UIElement の再描画を強制する

カスタム WPF コントロールに取り組んでいます。このコントロールの主な目的は、スクロール可能な領域で何千ものグラフィック プリミティブを視覚化することです。コントロールのテンプレートのコア部分は次のようになります。

ItemAreaElement はアイテムの描画を担当します。簡単にするために、そのコア部分は次のようになっていると考えることができます。

ItemVisualizer コントロール全体の関連プロパティが変更されるたびに、ItemAreaElement を再描画する必要があります。しかし、WPF でそれを行う方法が見つかりませんでした。私の場合、 Dispatcher オブジェクトを使用したよく知られたトリックは機能しません。

ここで、_itemArea は OnApplyTemplate() で取得した ItemAreaElement へのローカル参照です。

私の構築で UIElement の更新を強制する他の方法はありますか? それとも、それを可能にするためにコントロール全体を再設計する必要がありますか?

0 投票する
1 に答える
627 参照

wpf - WPF で DrawingContext を使用した奇妙な描画

スクロール可能な領域に何千ものグラフィック プリミティブを視覚化するカスタム WPF コントロールに取り組んでいます。コントロールのテンプレートのコア部分は次のとおりです。

パフォーマンスを向上させるために、すべての描画操作は ItemAreaElement の OnRender メソッドで実行されます。鮮明な描画を行うために、初期化コードで次の設定も使用します。

しかし、私の絵にはいくつかの奇妙な問題があります。それらを示すために、ItemAreaElement の定義を次のように単純化しました。

このコードを 282ppi の Ultra-HD 画面 (システム スケール ファクターは 300%) を備えたメインの開発用ラップトップで起動すると、次の画像が表示されます。

ここに画像の説明を入力

または、グリッド線で paint.net を拡大した後:

ここに画像の説明を入力

ご覧のとおり、ItemAreaElement の左端と上端は、コントロールの境界線で部分的に覆われています。そうでなければなりませんか?これを回避するために使用できる設定はありますか?

2 番目の問題は、開始点を含まない行です (「セル」の左上隅を参照してください)。これは予想される動作ですか?もしそうなら、WPFに強制的に開始ピクセルを描画させる方法は?

3 つ目の問題は、緑色の線が交わる場所またはデバイスに依存しないポイント (セルの右下隅) です。ご覧のとおり、この点はギザギザです。その場所には緑色の四角が見えるだけだと思っていました。DrawingContext.DrawLine メソッドを使用してこれを実装できますか? または、マルチポイント ラインなどに特別な設定を加えた、より複雑なジオメトリを使用する必要がありますか?

ところで、このコードを「クラシック」96 ppi モニターと 100% に設定された OS のスケール ファクターを備えたテスト PC で起動すると、状況は右下隅で少し良くなります。

ここに画像の説明を入力

しかし、一番上の行の赤い横線や最初の列の赤い縦線さえ見えません。そこにそれらが表示されることを期待していましたが、コントロールの境界線で覆われていないことを期待していました. これらの問題をすべて解決する方法を知っている場合は、教えてください。

0 投票する
1 に答える
266 参照

performance - Delphi TTreeView OnCustomDrawItem イベントが遅くなる

メモを取るために使用するアウトライナー アプリケーション (Delphi 10.2 Tokyo) があります (これを NoteApp と呼びます)。プレーン テキスト (TextApp) の編集に使用する別のアプリケーションがあります。私はこれらのアプリケーションを頻繁に切り替えるので、メモを取る機能を TextApp に統合することにしました。

コードを NoteApp から TextApp にコピー アンド ペーストし、コンポーネント (1 つの TTreeView、1 つの TRichEdit、および 1 つの TActionToolbar) を TextApp.Form_Main に配置しました。TTreeView の OnCustomDrawItem イベントは、単純なレコードの配列である対応するメモ項目の NoteType に基づいて、各ノードの FontStyle を変更するように設定されます。

私たちの配列:

そしてイベント:

NoteApp でメモ ファイルを開くと、完全に機能します。TextApp で同じファイルを開くと、TTreeView の更新が遅くなります。TTreeView の上位の項目は問題ありませんが、下に行くほどリフレッシュ レートが低くなります。
すべてのコンポーネントのプロパティは同じように設定されています。私はどこかで間違いを犯したと思います。TextApp の他のすべてのコンポーネントの可視性を false に設定しましたが、TTreeView は依然として非常に遅いです。上記のコードを削除すると、再び高速になります。TextApp ではランタイム テーマを使用しません。