|
Delphi Programming / Object Pascal
[掲載 2010年07月07日] [更新 2013年11月11日] Delphi サンプルプログラム集 |
SystemParametersInfo 関数サンプル
S08_UI 効果関係 |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro
[04] Windows XP(SP2) + Delphi 6 Pro (EXE は Windows 2000 以前で有効) |
|
S08_SystemParametersInfo_UIEffect.zip [5,234 KB] 2013年11月11日版 (EXE 同梱) |
UI 効果関係のフラグ,設定と取得のサンプルです.
MSDN オンラインの記事では メニューのアニメーション (マスタフラグ) を有効しないとアニメーション関係は機能しないとありますが,筆者が確認したところでは,このフラグの設定に関係なく機能しているようです.ただし 全ての UI 効果の設定 のフラグが有効になっていないと機能しないようです.
テストの際にマスタフラグの設定も同時にするようにしました.以下のサンプルコードはそのままの状態になっています. |
01_メニューのアニメーション ( マスタフラグ ) |
実際にはこのフラグの値とは関係なしに,以下のアニメーション効果の設定は有効になるようです. |
表1
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETMENUANIMATION |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効な場合は 0 以外の値が,無効の場合は 0 |
SPI_SETMENUANIMATION |
設定
uiParam は 0
pvParam を 0 以外の値にすると有効.0 の時は無効 |
|
図1
起動すると現在の設定を表示 |
リスト1
メニューのアニメーション (マスタフラグ) |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
OrignalValue : Boolean;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
SystemParametersInfo(SPI_GETMENUANIMATION,
0,
@OrignalValue,
0);
CheckBox1.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
Screen.Cursor := crHourGlass;
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(Ord(CheckBox1.Checked)),
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
Screen.Cursor := crHourGlass;
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(Ord(OrignalValue)),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
コンボボックスのスライドオープンの設定と取得のサンプルです. |
表2
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETCOMBOBOXANIMATION |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効であれば 0 以外.無効の場合は 0 |
SPI_SETCOMBOBOXANIMATION |
設定
uiParma は 0
pvParam を 0 以外の値にすると有効.0 にすると無効 |
|
図2
起動すると現在の設定を表示
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBox2: TCheckBox;
CheckBox1: TCheckBox;
ComboBox1: TComboBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
MasterFlag : Boolean;
OrignalValue : Boolean;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
with ComboBox1.Items do begin
Add('東京都');
Add('埼玉県');
Add('千葉県');
Add('栃木県');
Add('神奈川県');
Add('茨城県');
Add('群馬県');
Add('新潟県');
Add('長野県');
Add('山梨県');
Add('新潟県');
end;
ComboBox1.ItemIndex := 0;
//アニメーションのマスタフラグの状態を取得
SystemParametersInfo(SPI_GETMENUANIMATION,
0,
@MasterFlag,
0);
CheckBox1.Checked := MasterFlag;
//コンボボックスのスライドオープンの設定状態を取得
SystemParametersInfo(SPI_GETCOMBOBOXANIMATION,
0,
@OrignalValue,
0);
CheckBox2.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
// SPI_SETMENUANIMATIONの値に関係なく動作するようである
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
NewMasterFlag : Integer;
NewValue : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを設定
NewMasterFlag := Ord(CheckBox1.Checked);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(NewMasterFlag),
SPIF_SENDCHANGE);
//コンボボックスのスライドオープンを設定
NewValue := Ord(CheckBox2.Checked);
SystemParametersInfo(SPI_SETCOMBOBOXANIMATION,
0,
Pointer(NewValue),
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
V : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを元に戻す
V := Ord(MasterFlag);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(V),
SPIF_SENDCHANGE);
//コンボボックスのスライドオープンの設定を元に戻す
V := Ord(OrignalValue);
SystemParametersInfo(SPI_SETCOMBOBOXANIMATION,
0,
Pointer(V),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
マウスカーソルに淡い影を付けるかどうかの設定とその設定状態の取得サンプルです. |
表3
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETCURSORSHADOW |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効な場合は 0 以外の値が,無効の場合は 0 |
SPI_SETCURSORSHADOW |
設定
uiParma は 0
pvParam を 0 以外の値にすると有効.0 にすると無効 |
|
図3
起動すると現在の設定を表示 |
|
図4
左が影あり.右が影なし |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
OrignalValue : Boolean;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
SystemParametersInfo(SPI_GETCURSORSHADOW,
0,
@OrignalValue,
0);
CheckBox1.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
Screen.Cursor := crHourGlass;
SystemParametersInfo(SPI_SETCURSORSHADOW,
0,
Pointer(Ord(CheckBox1.Checked)),
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
Screen.Cursor := crHourGlass;
SystemParametersInfo(SPI_SETCURSORSHADOW,
0,
Pointer(Ord(OrignalValue)),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
04_ウィンドウのタイトルバーのグラデーション効果 |
この設定が有効なのは Windows 95, 98, 2000 です.折角コードを作成したので掲載します.
Windows 7 + Delphi 2010 で作成した EXE ファイルは,Windows 2000 では正常動作しません.
Windows XP(SP3) の Delphi 6 でコンパイルして実行しました. |
表4
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETGRADIENTCAPTIONS |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効な場合は 0 以外の値が,無効の場合は 0 |
SPI_SETGRADIENTCAPTIONS |
設定
uiParam は 0
pvParam を 0 以外にすると有効.0 にすると無効 |
|
図5
起動すると現在の設定を表示 |
|
図6
グラデーションなしの場合 |
リスト4
ウィンドウのタイトルバーのグラデーション効果 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBox2: TCheckBox;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
MasterFlag : Boolean;
OrignalValue : Boolean;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
//アニメーションの増田フラグの状態を取得
SystemParametersInfo(SPI_GETMENUANIMATION,
0,
@MasterFlag,
0);
CheckBox1.Checked := MasterFlag;
//ウィンドウのタイトルバーのグラデーション効果の設定状態を取得
SystemParametersInfo(SPI_GETGRADIENTCAPTIONS,
0,
@OrignalValue,
0);
CheckBox2.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
NewMasterFlag : Integer;
NewValue : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスターフラグを設定
NewMasterFlag := Ord(CheckBox1.Checked);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(NewMasterFlag),
SPIF_SENDCHANGE);
//ウィンドウのタイトルバーのグラデーション効果を設定
NewValue := Ord(CheckBox2.Checked);
SystemParametersInfo(SPI_SETGRADIENTCAPTIONS,
0,
Pointer(NewValue),
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
V : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスターフラグを元に戻す
V := Ord(MasterFlag);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(V),
SPIF_SENDCHANGE);
//ウィンドウのタイトルバーのグラデーション効果の設定を元に戻す
V := Ord(OrignalValue);
SystemParametersInfo(SPI_SETGRADIENTCAPTIONS,
0,
Pointer(V),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
カーソルを特定の項目に重ねたときに,その項目が強調表示される機能の取得と設定のサンプルコードです. |
表5
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETHOTTRACKING |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効な場合は 0 以外の値が,無効の場合は 0 |
SPI_SETHOTTRACKING |
設定
uiParam は 0
pvParamを 0 以外にすると有効.0 にすると無効 |
|
図7
起動すると現在の設定を表示 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBox2: TCheckBox;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
MasterFlag : Boolean;
OrignalValue : Boolean;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
//アニメーションのマスタフラグの状態を取得
SystemParametersInfo(SPI_GETMENUANIMATION,
0,
@MasterFlag,
0);
CheckBox1.Checked := MasterFlag;
//ホットトラッキング効果の設定状態を取得
SystemParametersInfo(SPI_GETHOTTRACKING,
0,
@OrignalValue,
0);
CheckBox2.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
NewMasterFlag : Integer;
NewValue : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを設定
NewMasterFlag := Ord(CheckBox1.Checked);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(NewMasterFlag),
SPIF_SENDCHANGE);
//ホットトラッキング効果を設定
NewValue := Ord(CheckBox2.Checked);
SystemParametersInfo(SPI_SETHOTTRACKING,
0,
Pointer(NewValue),
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
V : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを元に戻す
V := Ord(MasterFlag);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(V),
SPIF_SENDCHANGE);
//ホットトラッキング効果の設定を元に戻す
V := Ord(OrignalValue);
SystemParametersInfo(SPI_SETHOTTRACKING,
0,
Pointer(V),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
リストボックスのスムーススクロールの取得と設定のサンプルです. |
表6
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETLISTBOXSMOOTHSCROLLING |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効な場合は 0 以外の値が,無効の場合は 0 |
SPI_SETLISTBOXSMOOTHSCROLLING |
設定
uiParamは 0
pvParamを 0 以外にすると有効.0 にすると無効 |
|
図8
起動すると現在の設定を表示
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBox2: TCheckBox;
CheckBox1: TCheckBox;
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
MasterFlag : Boolean;
OrignalValue : Boolean;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
with ListBox1.Items do begin
Add('東京都');
Add('埼玉県');
Add('千葉県');
Add('栃木県');
Add('神奈川県');
Add('茨城県');
Add('群馬県');
Add('新潟県');
Add('長野県');
Add('山梨県');
Add('新潟県');
end;
ListBox1.ItemIndex := 0;
//アニメーションのマスタフラグの状態を取得
SystemParametersInfo(SPI_GETMENUANIMATION,
0,
@MasterFlag,
0);
CheckBox1.Checked := MasterFlag;
//リストボックスのスムーズスクロールの設定状態を取得
SystemParametersInfo(SPI_GETLISTBOXSMOOTHSCROLLING,
0,
@OrignalValue,
0);
CheckBox2.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
// SPI_SETMENUANIMATIONの値に関係なく動作するようである
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
NewMasterFlag : Integer;
NewValue : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを設定
NewMasterFlag := Ord(CheckBox1.Checked);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(NewMasterFlag),
SPIF_SENDCHANGE);
//リストボックスのスムーズスクロールを設定
NewValue := Ord(CheckBox2.Checked);
SystemParametersInfo(SPI_SETLISTBOXSMOOTHSCROLLING,
0,
Pointer(NewValue),
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
V : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを元に戻す
V := Ord(MasterFlag);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(V),
SPIF_SENDCHANGE);
//リストボックスのスムーズスクロールの設定を元に戻す
V := Ord(OrignalValue);
SystemParametersInfo(SPI_SETLISTBOXSMOOTHSCROLLING,
0,
Pointer(V),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
この機能を有効にすると,メニュー項目を選択後,メニューが消えた後,ほんの短い間だけそのメニュー項目が画面に残り,フェードアウトしていくようになります. |
表7
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETSELECTIONFADE |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効な場合は 0 以外の値が,無効の場合は 0 |
SPI_SETSELECTIONFADE |
設定
uiParamは 0
pvParam を 0 以外にすると有効.0 の時は無効 |
|
図9
起動すると現在の設定を表示 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBox2: TCheckBox;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
MasterFlag : Boolean;
OrignalValue : Boolean;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
//アニメーションのマスタフラグの状態を取得
SystemParametersInfo(SPI_GETMENUANIMATION,
0,
@MasterFlag,
0);
CheckBox1.Checked := MasterFlag;
//選択項目のフェード効果の設定状態を取得
SystemParametersInfo(SPI_GETSELECTIONFADE,
0,
@OrignalValue,
0);
CheckBox2.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
NewMasterFlag : Integer;
NewValue : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを設定
NewMasterFlag := Ord(CheckBox1.Checked);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(NewMasterFlag),
SPIF_SENDCHANGE);
//選択項目のフェード効果を設定
NewValue := Ord(CheckBox2.Checked);
SystemParametersInfo(SPI_SETSELECTIONFADE,
0,
Pointer(NewValue),
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
V : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを元に戻す
V := Ord(MasterFlag);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(V),
SPIF_SENDCHANGE);
//選択項目のフェード効果の設定を元に戻す
V := Ord(OrignalValue);
SystemParametersInfo(SPI_SETSELECTIONFADE,
0,
Pointer(V),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
ツールチップのアニメーション効果の取得と設定のサンプルコードです. |
表8
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETTOOLTIPANIMATION |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効な場合は 0 以外の値が,無効の場合は 0 |
SPI_SETTOOLTIPANIMATION |
設定
uiParamは 0
pvParam を 0 以外にすると有効.0 の時は無効 |
|
図10
起動すると現在の設定を表示 |
|
図11
ツールチップの例 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBox2: TCheckBox;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
MasterFlag : Boolean;
OrignalValue : Boolean;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
//アニメーションのマスタフラグの状態を取得
SystemParametersInfo(SPI_GETMENUANIMATION,
0,
@MasterFlag,
0);
CheckBox1.Checked := MasterFlag;
//ツールチップアニメーション効果の設定状態を取得
SystemParametersInfo(SPI_SETTOOLTIPANIMATION,
0,
@OrignalValue,
0);
CheckBox2.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
NewMasterFlag : Integer;
NewValue : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを設定
NewMasterFlag := Ord(CheckBox1.Checked);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(NewMasterFlag),
SPIF_SENDCHANGE);
//ツールチップアニメーション効果を設定
NewValue := Ord(CheckBox2.Checked);
SystemParametersInfo(SPI_SETTOOLTIPANIMATION,
0,
Pointer(NewValue),
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
V : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを元に戻す
V := Ord(MasterFlag);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(V),
SPIF_SENDCHANGE);
//ツールチップアニメーション効果の設定を元に戻す
V := Ord(OrignalValue);
SystemParametersInfo(SPI_SETSELECTIONFADE,
0,
Pointer(V),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
ツールチップのフェードアニメーションの設定と取得のサンプルです.この機能を有効にするには,ツールチップのアニメーションを有効にしておく必要があります. |
表9
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETTOOLTIPFADE |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効な場合は 0 以外の値が,無効の場合は 0 |
SPI_SETTOOLTIPFADE |
設定
uiParam は 0
pvParam を 0 以外にすると有効.0 の時は無効 |
|
図12
起動すると現在の設定を表示 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBox2: TCheckBox;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
MasterFlag : Boolean;
OrignalValue : Boolean;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
//アニメーションのマスタフラグの状態を取得
SystemParametersInfo(SPI_GETMENUANIMATION,
0,
@MasterFlag,
0);
CheckBox1.Checked := MasterFlag;
//ツールチップフェードアニメーション効果の設定状態を取得
SystemParametersInfo(SPI_GETTOOLTIPFADE,
0,
@OrignalValue,
0);
CheckBox2.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
NewMasterFlag : Integer;
NewValue : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを設定
NewMasterFlag := Ord(CheckBox1.Checked);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(NewMasterFlag),
SPIF_SENDCHANGE);
//ツールチップフェードアニメーション効果を設定
NewValue := Ord(CheckBox2.Checked);
SystemParametersInfo(SPI_SETTOOLTIPFADE,
0,
Pointer(NewValue),
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
V : Integer;
begin
Screen.Cursor := crHourGlass;
//アニメーションのマスタフラグを元に戻す
V := Ord(MasterFlag);
SystemParametersInfo(SPI_SETMENUANIMATION,
0,
Pointer(V),
SPIF_SENDCHANGE);
//ツールチップフェードアニメーション効果の設定を元に戻す
V := Ord(OrignalValue);
SystemParametersInfo(SPI_SETTOOLTIPFADE,
0,
Pointer(V),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
このフラグを使用すると,このページのアニメーション機能をまとめてオン・オフできますが,有効にできるのは各々の機能が有効に設定されているフラグだけです.また,このフラグが有効になっていないと他の各フラグは機能しません. |
表10
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETUIEFFECTS |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効な場合は 0 以外の値が,無効の場合は 0 |
SPI_SETUIEFFECTS |
設定
uiParam は 0
pvParam を 0 以外にすると有効.0 の時は無効 |
|
図13
起動すると現在の設定を表示 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
OrignalValue : Boolean;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
//全てのUI効果の設定状態を取得
SystemParametersInfo(SPI_GETUIEFFECTS,
0,
@OrignalValue,
0);
CheckBox1.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
// ここで設定しても各々のUI効果の既存値には変更ないようだ
// ただしここでの設定は,実際の動作に反映される
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
NewValue : Integer;
begin
Screen.Cursor := crHourGlass;
//全てのUI効果の設定
NewValue := Ord(CheckBox1.Checked);
SystemParametersInfo(SPI_SETUIEFFECTS,
0,
Pointer(NewValue),
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
V : Integer;
begin
Screen.Cursor := crHourGlass;
//全てのUI効果の設定を元に戻す
V := Ord(OrignalValue);
SystemParametersInfo(SPI_SETUIEFFECTS,
0,
Pointer(V),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
|