Delphi Programming / Object Pascal
[掲載 2010年01月05日] [更新 2017年03月13日] Delphi サンプルプログラム集 |
048_列挙型の保存と読み出し |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE(UP1) Pro |
|
048_EnumeratedType.zip [1,083 KB] 2017年03月13日版 (EXE 同梱) |
01_列挙型の保存と読み出し - TWindowState 型の例 |
列挙型の値の保存と読み出しのサンプルです.
ここでは,フォームの WindowState プロパティの値を Ini ファイルに保存し,次回起動時にこのプロパティの値でフォームを表示します.このプロパティは,TWindowState の列挙型です.
このサンプルプログラムは,GetEnumValue 関数と,GetEnumName 関数を使用して,
- 列挙型の値 (定数名) を文字列として取得する
- 列挙型の定数名を文字列にしたものを,列挙型のプロパティの値に変換する
方法の参考コードともなっています. |
|
図1
設計時画面 |
|
図2
保存した値の例 |
リスト1
フォームの WindowState の保存と読み出し-列挙型の保存・読み出し |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private 宣言 }
IniFileName : String;
StrWinState : String;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses
IniFiles,
TypInfo;
{$R *.DFM}
//=============================================================================
// フォームのCreate時に保存したWindowStateの値を読み出して設定
// このサンプルは.列挙型の値の保存と読み出しの方法の1つの例
//
// ただし,このサンプルでは,最小化して保存し,次回最小化の状態で起動すると
// タスクバーにアイコンが表示されない場合があるので注意
//
// Iniファイル関係の操作にはusesにIniFilesが必要
// TyppeInfoの使用にはusesにTypInfoが必要
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
var
LIniFile : TInifile;
begin
IniFileName := ExtractFilePath(Application.ExeName) + 'FormInfo.ini';
LIniFile := TIniFile.Create(IniFileName);
try
if FileExists(IniFileName) then begin
//保存してあるWindowStateの値を文字列として読み出す
StrWinState := LIniFile.ReadString('AppInfo', 'WindowState', '');
//その文字列をTWindowState型の値に変換する
WindowState := TWindowState(GetEnumValue(TypeInfo(TWindowState), StrWinState));
end;
finally
FreeAndNil(LIniFile);
end;
end;
//=============================================================================
// フォームを閉じる時は,WindowsStateの値をIniファイルに保存
// Iniファイル関係の操作にはusesにIniFilesが必要
// TyppeInfoの使用にはusesにTypInfoが必要
//=============================================================================
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
LIniFile : TInifile;
begin
//このフォームのWindowStateプロパティの値を文字列に変換
StrWinState := GetEnumName(TypeInfo(TWindowState), Ord(WindowState));
//その文字列をIniファイルに保存
LIniFile := TIniFile.Create(IniFileName);
try
try
LIniFile.WriteString('AppInfo', 'WindowState', StrWinState);
except
end;
finally
FreeAndNil(LIniFile);
end;
end;
end.
列挙型のメンバの値を取得する例です.上と同じ TWindowState 型のメンバの値を列挙します.
TWindowState という列挙型は次のように定義されています. |
TWindowState = (wsNormal, wsMinimized, wsMaximized); |
|
図3
実行結果 |
リスト2
TWindowState 列挙型のメンバーのリストを取得 |
uses
TypInfo;
{$R *.DFM}
//=============================================================================
// 列挙体の値をリストするサンプル
// ここではTWindowState型のメンバの値を列挙
//
// usesにTypInfoが必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
LpInfo : PTypeInfo;
LpData : PTypeData;
i : Integer;
begin
Memo1.Clear;
LpInfo := TypeInfo(TWindowState);
//列挙型であれば調査
if LpInfo^.Kind = tkEnumeration then begin
LpData := GetTypeData(LpInfo);
for i := LpData^.MinValue to LpData^.MaxValue do begin
Memo1.Lines.Add(GetEnumName(LpInfo, i));
end;
end;
end;
|