Delphi Programming / Object Pascal
[掲載 2010年07月07日] [更新 2013年11月11日] Delphi サンプルプログラム集 |
SystemParametersInfo 関数サンプル
S05_メニュー関係 |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro |
|
S05_SystemParametersInfo_Menu.zip [1,632 KB] 2013年11月11日版 (EXE 同梱) |
メニューバーのメニューの左寄せと右寄状態の取得と設定です.アプリケーションで制御している場合は,このサンプルの設定が反映されるとは限りません. |
表1
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParamは第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETMENUDROPALIGNMENT |
取得
uiParam は 0
pvParam は BOOL 型変数へのポインタ
右寄せの場合は 0 以外の値,左寄せの場合は 0 |
SPI_SETMENUDROPALIGNMENT |
設定
uiParam を 1 にすると右寄せ,0 にすると左寄せ
pvParam は nil |
|
図1
起動すると現在の設定を表示 |
|
図2
左寄せ表示 (デフォルト)
- マウス右ボタンをクリックした位置から右側に表示される
|
|
図3
右寄せ表示
- マウス右ボタンをクリックした位置から左側に表示される
|
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);
var
A : Integer;
begin
SystemParametersInfo(SPI_GETMENUDROPALIGNMENT,
0,
@OrignalValue,
0);
CheckBox1.Checked := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
Screen.Cursor := crHourGlass;
SystemParametersInfo(SPI_SETMENUDROPALIGNMENT,
Ord(CheckBox1.Checked),
nil,
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
Screen.Cursor := crHourGlass;
SystemParametersInfo(SPI_SETMENUDROPALIGNMENT,
Ord(OrignalValue),
nil,
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
メニューのフェードアニメーションの有効性の取得と設定のサンプルです.
フェードアニメーションが無効の時,メューはスライドアニメーション形式で表示されます.有効とするには SET_MENUANIMATION でメニューのアニメーション表示を有効にしておく必要があります.
これもアプリケーションで制御している場合があります. |
表2
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第3引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETMENUFADE |
取得
uiParam は 0
pvParam は BOOL 型変数のポインタ
有効となっている場合は 1,無効の場合は 0 |
SPI_SETMENUFADE |
設定
uiParam は 0
pvParam を 0 以外の値にすると有効,0 にすると無効 |
|
図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;
CheckBox1: TCheckBox;
CheckBox2: 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_GETMENUFADE,
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_SETMENUFADE,
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_SETMENUFADE,
0,
Pointer(V),
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
03_サブメニュー ( ショートカットメニュー ) 表示までの時間 |
マウスカーソルをサブメニューの項目に合わせた後,ショートカット (サブメニュー) を表示するまでの時間の取得と設定のサンプルコードです. |
表3
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数 |
uiAction パラメータ |
uiParam と pvParam パラメータ |
SPI_GETMENUSHOWDELAY |
取得
uiParam は 0
pvParam は DWORD 型変数へのポインタ
この変数に待ち時間がミリ秒単位の値で格納される |
SPI_SETMENUSHOWDELAY |
設定
uiParam に待ち時間ミリ秒を DWORD 値で指定
pvParam は nil |
|
図5
起動すると現在の設定を表示 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, Spin;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
SpinEdit1: TSpinEdit;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
OrignalValue : Integer;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
with SpinEdit1 do begin
MaxValue := 2000;
MinValue := 1;
end;
//現在の設定値読出し
SystemParametersInfo(SPI_GETMENUSHOWDELAY,
0,
@OrignalValue,
0);
SpinEdit1.Value := OrignalValue;
end;
//=============================================================================
// [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
NewValue : Integer;
begin
Screen.Cursor := crHourGlass;
//設定した値をセット
NewValue := SpinEdit1.Value;
SystemParametersInfo(SPI_SETMENUSHOWDELAY,
NewValue,
nil,
SPIF_SENDCHANGE);
Screen.Cursor := crDefault;
end;
//=============================================================================
// 元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
Screen.Cursor := crHourGlass;
SystemParametersInfo(SPI_SETMENUSHOWDELAY,
OrignalValue,
nil,
SPIF_SENDCHANGE);
FormCreate(nil);
Screen.Cursor := crDefault;
end;
end.
|