1

VCL スタイルで非常に奇妙な問題が発生しています。定義済みのスタイルでプログラムを開始するか、後でスタイルを設定すると、プログラム ウィンドウの 1 つまたは一部が消えることがあります。

これは非常にランダムに発生し、おそらく 10 ~ 20 回に 1 回発生し、特定のウィンドウでは発生しません。実行時に 2 つのフォームを開いています。

これが発生した場合、ウィンドウが表示されていないときにいくつかのプロパティをチェックします。Visible プロパティは true で、ウィンドウの境界は正しいです。Aero DWM ライブ サムネイルでウィンドウを表示しようとすると、それも空です。ただし、ウィンドウ DC をキャプチャすると、ウィンドウが正常に表示されている (スタイルが適用されている) かのように、ウィンドウのビットマップが取得されます。

エラー、警告、例外は表示されません。ウィンドウが表示されないだけで、何も問題はないようです。マウスをタスクバー ボタンの上に置いてプレビューを表示すると、ボックスが表示されますが、空です。

何をチェックすればよいですか?

編集: RecreateWnd を呼び出すと、一時的な回避策として問題が修正されますが、再び失敗する可能性があります。

4

1 に答える 1

2

問題の原因が見つかりました:「Alphablend」。これが有効になっている場合、255 であっても問題が発生します。

再現する手順:

  • 新しい VCL フォーム プロジェクトを開く
  • プロジェクト オプション、外観、スタイル テーマの設定。テストには Cobalt XE を使用しました
  • Alphablend を true に設定します
  • 走る

グリッチが発生するまでに 10 ~ 20 回の実行が必要になる場合があります。

それが起こると、ウィンドウが実際にそこにあることに気づきました..マウスを上に置くと、そこに何かがあることに気付くことができます. コントロールの位置を推測すれば、コントロールをクリックすることもできます。ウィンドウが表示されていないときにウィンドウをドラッグすると、ウィンドウが表示されます。最小化/復元すると、同様に表示されます。

ウィンドウがアクティブなときに alt+PrtScr を実行し、ペイントなどに貼り付けると、alphablendvalue が 0 に設定されているかのように、ウィンドウの境界と共にその背後にあるコンテンツが取得されます。

于 2012-04-05T05:10:05.037 に答える