7

コンポーネントのカスタム スタイルを無効にできることはわかっていますが、1 つのコンポーネント クラスだけのスタイルを有効にするにはどうすればよいでしょうか? たとえば、フォーム全体とそのすべてのコンポーネントをスキンなしのままにして、TButton のみをスキンします。この画像のように。

ここに画像の説明を入力

4

1 に答える 1

13

ほとんどの VCL コントロールは、StyleServicesグローバル関数を内部的に使用して、コントロールを描画するメソッドを取得します。したがって、Vcl スタイルを使用していない場合はStyleServices、Windows API 関数にインスタンスを返して、テーマ コントロール (UxTheme API) を描画します。単一のクラス コントロール (少なくとも自分でコントロールを描画するもの) だけにスキンを適用する (Vcl スタイルを適用する) 方法がないためです。

したがって、唯一の代替手段は、Vcl スタイルを適用してから、探している 1 つのタイプを除くすべてのコントロールを無効にすることです。

このようなものを使用できます

procedure DisableVclStyles(Control : TControl;const ClassToIgnore:string);
var
  i : Integer;
begin
  if Control=nil then
    Exit;

  if not Control.ClassNameIs(ClassToIgnore) then
   Control.StyleElements:=[];

  if Control is TWinControl then
    for i := 0 to TWinControl(Control).ControlCount-1 do
      DisableVclStyles(TWinControl(Control).Controls[i], ClassToIgnore);
end;

このフォームを Vcl スタイルでチェック

ここに画像の説明を入力

そして今、上記のメソッドを呼び出した後

DisableVclStyles(Self,'TButton');

ここに画像の説明を入力

注 : StyleElementsプロパティを使用して vcl スタイルを有効または無効にすることは、(TStringGrid、TBitBtn、TSpeedButton など) のような一部のコンポーネントでは機能しません。

于 2012-12-25T17:49:03.593 に答える