19

DelphiXE2で新しいVCLスタイルシステムを使用しています。うまく機能しますが、多数の画像が含まれている特定のフォーム(スプラッシュ/アバウトフォーム)では無効にしたいと思います。問題は、特定のスタイルに関連付けるフォームのプロパティが見つからないため、そのフォームに対してのみ無効にできないことです。TStyleManager静的に見えるグローバルクラスしかないようです。

これを念頭に置いて、これを実現するには、フォームを呼び出しTStyleManager.TrySetStyle('Windows')て表示し、フォームを閉じたときに元のスタイルに戻す唯一の方法がありますか?

4

3 に答える 3

27

VCL スタイルはすべての VCL アプリケーションにスキンを適用しますが、特定のコントロール クラスに対して VCL スタイルを無効にすることができます。したがって、特定のフォームの VCL スタイルを無効にする場合は、フォームのタイプと空のスタイル フック クラスであるクラスをRegisterStyleHook渡す関数を使用できます。TStyleHook

このコード行は、TFormChild 型のすべてのフォームで VCL スタイルを無効にします。

TStyleManager.Engine.RegisterStyleHook(TFormChild, TStyleHook);

ここで、このコードを実行すると、フォームのすべてのコントロールがTFormChildVCL スタイルで描画されるため、修正するには、このようなトリックを使用してフォームのすべてのコントロールのデフォルトのスタイル フックを無効にする必要があります。

unit uChild;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TButton   = class(Vcl.StdCtrls.TButton); //This declaration is only for disabling the TButton of this form
  TFormChild = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

そして、このフォームの TButton の VCL スタイルもこのコードで無効にできるようになりました

TStyleManager.Engine.RegisterStyleHook(uChild.TButton, TStyleHook);

TStyleHook クラスの使用に関する詳細情報が必要な場合は、Delphi XE2 の探索 – VCL スタイル パート IIの記事を参照してください。

于 2011-12-22T02:53:16.700 に答える
-1

最も簡単な方法は、スプラッシュ フォームを別の DLL に入れることです。そうすれば、スタイラーはそれに触れません。

于 2011-12-22T12:50:50.990 に答える