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