9

2009 年から Delphi XE にアップグレードしましたが、奇妙な問題が発生しています。

新しいプロジェクトを作成し、TRibbon コントロールを配置し、コンパイルして実行します。フォームをデフォルトのサイズに保ち、最小化して問題なく復元します。次に、フォームを最大化し、最小化して復元すると、フォームの色が黒に変更されます。

私はそれを変更するためのランダムなコードはなく、Delphi XE に付属のすべてのデフォルトを使用しており、毎回必ず失敗しません。

コンパイルした exe を友人のコンピューターに移動しましたが、問題が残っているため、自分のコンピューターではないことがわかります。Aero エフェクトをオフにすると問題は解決しますが、Aero をオンに戻すと問題が再発します。

アイデアはありますか?インターウェブ全体でこの問題に関連するスレッドを見つけるのに苦労しています.

ありがとう、セブ

編集 (要求に応じて、この動作を表示するフォームの DFM。注: これは、開始したすべてのプロジェクトで発生します):

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 555
  ClientWidth = 989
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poScreenCenter
  PrintScale = poNone
  Scaled = False
  PixelsPerInch = 96
  TextHeight = 13
  object Ribbon1: TRibbon
    Left = 0
    Top = 0
    Width = 989
    Height = 143
    Caption = 'Ribbon1'
    ExplicitLeft = 104
    ExplicitTop = 296
    ExplicitWidth = 0
    StyleName = 'Ribbon - Luna'
  end
end

まったく空想的なものではありません。これは、単一のフォームを持つ単なる新しいプロジェクトです。

4

2 に答える 2

4

バグを再現できました。発見した問題の一部を以下に示します。多分彼らは誰かがこのことを理解するのを助けるでしょう.

  • Invalidateフォームにボタンを配置してボタンのOnClickイベントから呼び出すと、フォームの色が元に戻ります。
  • フォームにタイマーを配置すると、タイマーを有効にしてから=を有効WndProcWM_SIZEし、タイマーから呼び出してフォームの色を元に戻します。これは基本的に最初のメソッド (ボタンからの呼び出し) と同じですが、タイマーによってこれが自動化され、処理するメッセージがなくなったときにのみ呼び出されるようになります。私は単純なもので同じことを試みましたが、うまくいきませんでした(つまり、私はおそらく早すぎました、そしてそれはおそらく別の手がかりです)wParamSIZE_MAXIMIZEDInvalidateInvalidateInvalidatePostMessageInvalidate
  • 興味深い:Application.MainFormOnTaskbar := Falseプロジェクトのソースで作成すると、黒いフォームが表示されなくなります。

回避策

リボンはフォームの上部を占めます。TPanelフォームの残りの部分にa を配置し、それを作成してAlign = alClient、すべてをパネルに配置します。パネルの後ろの黒が見えなくなりました!

于 2011-06-27T16:42:01.700 に答える
1

リボン コントロールは Aero グラス フレームをオンにして動作するように特別に設計されているため、リボンを使用する場合はグラス フレームを有効にする必要があります。次に、設計どおりに動作するように、リボンを構成し、アプリケーション メニューといくつかのペインを追加するためにもう少し作業を行う必要があります。タブ グループやシステム メニューのない「リボン自体」が、実行時に適切にレンダリングされるとは思えません。

Aero ガラスが有効になっているシステムでリボンを動作させるには、ガラス フレーム プロパティ (Form.GlassFrame.Enabled) を有効にし、Form.DoubleBuffered プロパティをオンにして、いくつかのタブ ページを追加し、いくつかのタブ グループを追加して、システムメニュー。たくさんのステップ。

付属のリボンスタータープロジェクトをお試しください。(ribbonStarter.zip 88k)

更新あなたのシステムで私の ribbonStarter でも同じ結果が得られた場合、おそらくこれは Quality Central に記録されているはずです。ビデオ ドライバーのバグである可能性があり、リボンとフォーム コードでいくつかのコードの回避策を作成できます。

于 2011-06-27T13:04:28.020 に答える