2012-01-03 10 views
2

私のアプリケーションにカラースキームを適用したいと思います。これは、すべてのコンポーネントのをtrueに設定し、ParentBackgroundParentFontに設定することによって行われます。フォームの色を変更すると、すべてが変化します。ただし、ツールバーとツールボタンは変更されません。フォームの色で変更することは可能ですか、これを別の方法で実装する必要がありますか?アプリケーション全体のカラースキームを有効にするにはどうすればよいですか?

同じことがフォントの色に適用されますが、それはより奇妙なことです。フォームのフォント色を変更すると、グループボックスキャプションのフォント色は変わりませんが、ラベルキ​​ャプションのキャプション(グループボックス内のもの)はすべて変更されます。

ユーザーが自分の色を選択できるように実装する場合は、これを行う方法(フォームの色を変更し、すべてのコンポーネントにParentColorが設定されています)、またはこの目標を達成するためのよりよい方法がありますか?

+4

多くのWindowsコントロールは、任意の色をサポートするように設計されていません。 Delphiの最新バージョンであるXE2では、VCLスタイルと呼ばれる新しい機能が導入されています。これは、おそらくあなたが探しているものを達成するための最も簡単で迅速な方法です。 –

+0

また、グループボックス、チェック、ラジオボタンなどのテーマの影響を受けるものもありますので、フォントや親フォントを指定することはできません。このサポートのためにそれらを変更する必要があります。または、デイビッド氏がVCLスタイルを指摘したように、デルファイXE2を入手するかもしれません。 – TLama

+0

これは、変更したいコンポーネントを列挙し、希望の色に割り当てることを意味します。私は何かを忘れたいと思っていました:-)私はまだXE2を持っていませんが、このVCLスキームは興味深いと思います。ご協力いただきありがとうございます! – Arnold

答えて

1

これを達成する方法の1つは、interfacesです。

これは少し手作業ですが、単純な方法でやりたいのであれば、インターフェースを定義して、すべてのフォームがこのインターフェースを実装できるようにすることができます。例えば

:あなたのそれぞれで、その後

type ITheme = interface 
    procedure SetTheme(const AColor : TColor); 
end; 

あなたはこのインターフェイスを実装することができなします。あなたには、いくつかのより多く行われるようにコーディングとはいえ、各コンポーネントの色の完全な制御を持ってこの方法を使用

procedure SetGlobalTheme(const AColor : TColor); 
var Intf : ITheme; 
begin 
    for i:=0 to screen.Formcount-1 do 
    begin 
    if Supports(Screen.Forms[i],ITheme,intf) then 
     intf.SetTheme(AColor); 
    end; 
end; 

は、だから、単に1つの関数を呼び出す必要があり、フォーム色のすべてを変更します。別の方法は、VCLスタイルのDavid提案を使用することです(IDEがサポートしている場合)

+0

私は多くのフォームがあれば便利なヒントですが、私は1つしか持っていません。この質問で私は今私が行っている色を手動で実装するのを避ける方法を学びたいと考えました。 – Arnold

関連する問題