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