問題タブ [ownerdrawn]

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 投票する
5 に答える
2504 参照

delphi - Delphi 6 TListBox OnMeasureItem() および OnDrawItem() が lbOwnerDrawVariable() リスト ボックスに対して呼び出されない

TListBox コントロールが lbOwnerDrawVariable に設定された Delphi 6 アプリがあります。実行時に、リスト ボックスに 1 つの文字列を追加します。OnMeasureItem() と OnDrawItem() のイベント ハンドラーがあり、各イベント ハンドラーのコードの最初の行にブレークポイントを設定します。ただし、どちらも呼び出されることはありません。一度もありません。リスト ボックスで明示的なRefreshまたはRepaint呼び出しを行っても、そうではありません。

これは本当に基本的なことなので、これらのイベント ハンドラーの呼び出しを阻害し、その後所有者の描画コードを混乱させる可能性があるのは、何が間違っているのでしょうか? 単一の文字列がリスト ボックスに正しく表示されます。OnClick() イベント ハンドラーを投入して、それが機能するかどうかを確認しました。

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

delphi - Delphi 6 TImageListビットマップにその透明ピクセルを特定の色として描画させることはできますか?

TListBoxの行にいくつかのテキストとともにアイコンを所有者が描画するDelphi6アプリケーションがあります。のTListBoxスタイルはに設定されlbOwnerDrawVariableます。私が抱えている問題は、アイテムが選択されたときです。選択した行の背景色を変更するためにリストボックスで使用されるハイライト色は、アイコンに透明なピクセルがあり(目に見える証拠に基づく私の仮定)、それらのピクセルが背景色に変更されて台無しになるため、アイコンがひどく見えます。画像。この問題を解決できるように、透明なピクセルを特定の色で強制的に描画する簡単な方法はありますか?このメソッドを使用して、キャンバスTImageList.Draw()にアイコンを描画しています。TListBox

0 投票する
3 に答える
19827 参照

delphi - 選択したリスト ボックス項目を別の色で描画するにはどうすればよいですか?

TListBox でアイテム選択のフォーカス カラーとテキスト カラーを変更することはできますか?

プロジェクトでテーマが有効になっていない場合、またはリスト ボックス スタイルが owner-draw に設定されている場合、アイテムの周囲の選択は青く塗られます。これは、システムの外観設定によってグローバルに定義されていると思います。

選択したアイテムの色をカスタム カラーに変更したいと考えています。

たとえば、結果は次のようになります。

ここに画像の説明を入力

例を説明するために、最後のリストボックスがペイントで変更されていることに注意してください。

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

delphi - Delphiで透過的なTListBoxを作成する

透過的なTListBox:

そして、私はDrawItemを持っています:

問題は、リストボックスが正しく機能しない、アイテムが消える、点滅する...

2つのプロシージャのコードをマージして、1つだけを残すことはできません(オーバーライドされたものまたは私のもの):

また

すべてを正常に機能させるにはどうすればよいですか?リストボックスは透明で、アイテムは適切に描画されますか?

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

c++ - オーナー描画変数 CListBox (MFC) の高さを設定する方法

可変高の所有者が ListBox コントロールを描画します。AddString を呼び出すと、MeasureItem メッセージが送信され、Windows に項目のサイズを伝えるように求められます。問題は、コードがまだ SetItemData を呼び出す機会がないため、コードがまだサイズを決定できないことです。

SetRedraw(FALSE) を呼び出して、測定要求が延期されることを期待してみましたが、うまくいきませんでした。

では、CListBox に項目を追加し、同時に渡された項目データを取得するにはどうすればよいでしょうか? LBS_HASTRINGS の有無にかかわらず試してみました。他に何を試すべきかわからない。

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

c++ - MFCカスタムOnPaintが確実に呼び出されない

MFCアプリを継承しましたが、ウィンドウには、OnPaintさまざまな描画に応答して実行する所有者描画ウィジェットがいくつかあります。

さまざまなユーザーアクションに応じてコントロールを強制的に再描画するために、次のコードがあることに気付きました。

私はこれを次のように単純化できると思いました:

しかし、実際には、このようにすると、コントロールはペイントすることがありますが、他のペイントはペイントしません。具体的には、ウィンドウ内のコントロールを操作しているときに、myControl灰色で塗りつぶされてしまうことがあります。コードをより複雑なInvalidateRectスタイルに戻しましたが、再びうまく機能しています。

なぜここに違いがあるのでしょうか?

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

c++ - 所有者が描画したリストボックスの塗りつぶされていない領域の背景を設定するにはどうすればよいですか?

CListBoxから派生したクラスのDrawItemを処理するときに、背景をカスタムカラーに設定しました。これは、リストボックスが完全に行で埋められている場合にうまく機能しますが、リストボックスに1〜2行しか含まれておらず、スクロールバーなしで10〜20行を含めることができる高さがある場合、DrawItemが呼び出されない大きな領域があります。そこにある背景はデフォルトのままです。その領域の背景も変更するには、どの関数をオーバーライドする必要がありますか?

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

winapi - WM_ERASEBKGNDに個別のメッセージがあるのはなぜですか

背景を消去すると別のウィンドウメッセージが表示される理由をよく理解していません。私には少し冗長に見えます。所有者が描画するボタンを作成したとき、私は常にWM_PAINT内から背景を消去することになりました。WM_ERASEBKGNDの内側からすべてのペイントを実行し、WM_PAINTを空のままにしておくこともあります。どちらも正常に機能しているようです。絵を2つの操作に分けることに何か利点はありますか?

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

delphi - 単純なTListViewOwnerDrawテキストのフォントサイズと色の例?

を使用して、4列のレポートモードでリストビューコントロールを所有者が描画しようとしていますOnCustomDrawItem

Canvas.font.colorを変更しようとしても、それだけで問題はありません。

canvas.font.sizeを設定すると、コントロールによって描画されるテキストのサイズに変更がないことがわかります。

OnCustomDrawItem内からテキストのペイントを引き継ごうとすると、できないことがわかります。OnCustomDrawを使用して背景領域に描画する方法を知っていますが、テキストの色とフォント名およびフォントサイズを設定できるように、リストビューITEMをカスタム描画したいと思います。

ListView所有者描画のコンテキストでCanvasを使用することにはいくつかの問題があり、ListViewで実行できることにはいくつかの制限があることを私は知っています。

0 投票する
3 に答える
2821 参照

combobox - MFC: オーナー ドロー用の Aero スタイルのコンボ ボックスをレンダリングする方法は?

CComboBoxをオーバーライドするサブクラスを含む大規模な MFC アプリケーションを継承しましたOnPaint。現在、(線と四角形を使用して) すべての描画を手作業で行い、明らかに Windows 98 スタイルに見えるコンボ ボックスをレンダリングします。ただし、それ以外の点ではうまく機能し、私たちが依存している多くの便利なカスタム機能を提供します。コントロール全体を書き直すことはおそらく選択肢ではありません。

可能な場合は Aero スタイルで描画できるように最新化したいと思いOnPaintます (最新のテーマが利用できない場合は古いコードに戻ります)。ボタンなど、他のいくつかのカスタム コントロールを使用してこれを行いましたが、この目的には最適です。マウスホバー時の穏やかなハイライトなど、正しく動作しない小さな動作があることは知っていますが、それはこのアプリでは大した問題ではありません.

CVisualStylesXP私はckass にアクセスできるのでOpenThemeData、のようGetThemeColorな呼び出しを行うためのインフラストラクチャを既に持っていDrawThemeBackgroundます ( LoadLibraryVista を最小システムとして強制しません)。残念ながら、テーマに適した境界線とドロップダウン ボタンを備えた見栄えの良いコンボ ボックスを取得するための適切な呼び出しシーケンスがわかりません。

ここで何をすべきか知っている人はいますか?