4

一部のコンピューターでは、何らかの理由で、フォームの透明なコントロールが不透明になります。「AcerNetbook」と「Thinkpadx600」で発生したという報告がありました。アプリケーションはDelphi2007で構築されています。

これはそれがどのように見えるかです: リンク

次のようになりますが、 リンク

フォームの不透明なコントロールはTLabelsとTStaticTextsです。

(ハンドルのないコントロール(ラベルなど)へのマウスメッセージはWM_NCHITTESTハンドラーに送られるため、TStaticTextコントロールを使用してクリック可能な領域を定義します。下部の「ボタン」は、誤って色をclNoneに設定したため、黒になっています。まったく見えるようになります。)

なぜそれが発生し、これを防ぐ方法(テキストを背景画像にレンダリングするなどの回避策を除く)?

編集:32ビットカラーでWindows XPを実行し、認定されたATIドライバを使用しているラップトップで問題を再現することができました。

4

5 に答える 5

10

TLabel とフォームの間に TImage はありますか? その場合は、フォームの色を黒に設定してください。TLabel を透明に設定すると、TLabel はその親に描画され、TImage は子コントロールを持つことができません。実際には、フォームが親であるため、フォームの色をラベルにレンダリングしています。

他に考えられる 2 つの回避策として、(TLabel を使用せずに) 画像をフォームに直接ペイントする方法がありますが、それが機能するかどうかはわかりません。もう 1 つの方法は、(TGraphicControl ではなく) TWinControl から派生し、子コントロールを含むことができる独自のイメージ コントロールを作成することです。ただし、これらのソリューションの YMMV。

一部のマシンで機能しない理由は、基盤となる Windows API ライブラリが異なるためだと思います。

于 2009-04-17T18:41:51.590 に答える
3

これは、システム自体のブランドとは何の関係もありません。可能性の高い順に、これらを確認してください (Windows システムについて話していると仮定します)。

  • 透明性を実現するには、ディスプレイのビット深度を 32 にする必要があります。ディスプレイが 16 ビット カラーに設定されている場合、透明なコントロールを描画することはできません。ユーザーが修正可能です。モードを自動切り替えしないでください。

  • ビデオ ドライバーの問題 - ユーザーがメーカー推奨のビデオ ドライバーを使用していることを確認します。それらが失敗した場合は、最新のものを試してください。

  • 透過性 (実際にはアルファ ブレンディング) は、Windows 2000 以降でのみサポートされています。

ユーザーからより多くのデータを入手できれば、非常に役立ちます (または、そのデータを持っている場合は投稿してください)。使用されている OS についても言及していないため、ここでは盲目的に撮影しています。

于 2009-04-17T15:34:46.440 に答える
0

完璧な解決策ではありませんが、透明度の問題を処理するのに適していますフォーム上のラベル。次の閉じるボタンと最小化ボタンについては、これらの個別のグラフィックを作成して、フォントや DPI の問題を回避します。

于 2009-04-17T20:37:03.933 に答える