API:Vcl.Forms.TCustomForm.PaletteChanged
Delphi
function PaletteChanged(Foreground: Boolean): Boolean; override;
C++
DYNAMIC bool __fastcall PaletteChanged(bool Foreground);
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
function | protected | Vcl.Forms.pas Vcl.Forms.hpp |
Vcl.Forms | TCustomForm |
説明
システムパレットの変更への応答として,コントロールのパレットとそれぞれの子コントロールのパレットを実装します。
Vcl.Forms.TCustomForm.PaletteChanged は Vcl.Controls.TWinControl.PaletteChanged を継承しています。以下の内容はすべて Vcl.Controls.TWinControl.PaletteChanged を参照しています。
システムパレットの変更への応答として,コントロールのパレットとそれぞれの子コントロールのパレットを実装します。
PaletteChanged メソッドは,Windows システムパレットが変更されると自動的に呼び出されます。TWinControl は,これらの通知への応答として,ウィンドウコントロールのパレットがあればそれを現在のデバイスコンテキストに実装しようと試みてから,PaletteChanged メソッドの通知を子コントロールのそれぞれに渡します。システムパレットの変更でコントロールのパレットの実際の値が変更される場合,PaletteChanged メソッドはコントロールを無効にして新しいパレットで再描画できるようにします。
Windows はアクティブコントロールの描画に前景パレットを使用し,ほかのウィンドウでは背景パレットを使用します。背景パレットはコントロールの論理パレットで指定される色にほぼ一致しますが,前景パレットの実装によって制限が加えられます。Windows では,前景パレットは 1 つしか許可されません。
PaletteChanged メソッドでは,システムパレットが変更されたときにコントロールは新たにそのパレットを実装できます。Foreground が true の場合,フォームはアクティブにされており,コントロールは新しい前景パレットを指定しています。Foreground が false の場合,別のアプリケーションまたはフォームが前景パレットを変更しており,利用可能なパレットを感知したコントロールは自身の論理パレットに最適な新しい背景パレットを実装する必要があります。
コントロールが現在のデバイスコンテキストに実装できる論理パレットを持たない場合,GetPalette メソッドはハンドルの 0 を返し,PaletteChanged メソッドはウィンドウコントロールのパレットを実装しようとはしません。かわりに,通知を単純に子コントロールに渡します。ウィンドウコントロールやその子コントロールが PaletteChanged への応答としてパレットを現在のデバイスコンテキストに実現するときは,このメソッドは true を返します。
PaletteChanged メソッドをオーバーライドすると,Windows システムパレットが変更されたときにコントロールに新しいパレットを実装できる方法を変更できます。たとえば,PaletteChanged をオーバーライドすることにより,フォームがアクティブにされた時点で特定のコントロールに前景パレットを与えるために子コントロールがパレットを実現する順序を変更したり,パレット変更通知を VCL 以外(DLL など)で実現されたカスタムコントロールに渡すことができます。
GetPalette メソッドをかわりにオーバーライドすると,ウィンドウコントロールが実装するパレットを実際に備えているかどうかに影響を与えることや,コントロールの論理パレットの値を変更することができます。
メモ: PaletteChanged メソッドが呼び出されるのは,実行時ビデオモードが 1600 万色モードではなく 256 色モードのようなパレットサポートを必要とする場合だけです。