1

Delphi XE2 で新しい VCL スタイル システムを使用していますが、正常に動作しますが、1 つのフォームで例外が必要です。このフォームには多数の TBitBtn コントロールが含まれており、各 TBitBtn コントロールには他とは異なる独自のフォント カラー (clRed、clBlue、clLime など) があります。スタイルの実装により、すべての TBitBtn コントロールのキャプションは、設定された色ではなく黒色で表示されます。そのフォームの TBitBtn コントロールのスタイルを無効にする、TBitBtn コントロールに登録できる TStyleHook はありますか?

4

1 に答える 1

2

TBitBtnコンポーネントは vcl スタイル フックを使用しません。このコントロールはクラスTButtonGlyph(Vcl.Buttons ユニットの実装部分で定義および実装される) を使用して、Windows テーマまたは現在の vcl スタイルを使用してボタンを描画します。このクラス ( TButtonGlyph) は、このユニットの外ではアクセスできないため、ここでは運が悪いです。

私の頭に浮かぶ唯一のオプションは、インターポーザー クラスを作成しCN_DRAWITEM、コントロールのメッセージをインターセプトしてTBitBtnから、独自のコードを実行してボタンを描画することです。

  TBitBtn = class(Vcl.Buttons.TBitBtn)
  private
   procedure MyDrawItem(const DrawItemStruct: TDrawItemStruct);
  public
   procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
  end;

procedure TBitBtn.CNDrawItem(var Message: TWMDrawItem);
begin
  MyDrawItem(Message.DrawItemStruct^);
end;

procedure TBitBtn.MyDrawItem(const DrawItemStruct: TDrawItemStruct);
begin
  //the new code goes here.
end;
于 2012-08-30T17:57:55.057 に答える