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