2012年12月4日火曜日

文字列の定数をグループ化する方法?

いくつかの変数をグループ化したい場合、
レコード型を使えば済む話なのだが、
定数をグループ化するとなるとちょっと困る。

【例】
TGroup = record
  ItemA : string;
  ItemB : string;
  ItemC : string;
end;

var
  Grp : TGroup

定数なんてグループ化できなくていいよって場合は
どうでもいい話なのだが、個人的には定数もレコード型
みたいにして、コード補完で選択できたら便利だと思う。

というわけ、こんな手を使う。

【例】
TGroup = record
  ItemA : string;
  ItemB : string;
  ItemC : string;
end;

const
  GRP : TGroup = (ItemA:'AAA';ItemB:'BBB';ItemC:'CCC');

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GRP.ItemA);
end;

TGroupを使って「型付き定数」を宣言し、
初期値をセットしておけば、グループ化された定数ができる。


こんな事しても、対して使い道ないよ!というかもしれないが、
こういう使い道もある。

【例】
TExample = record
  ColumnA : string;
  ColumnB : string;
  ColumnC : string;
end;

const
  EXAMPLE : TExample = (ColumnA:'NAME_A';ColumnB:'NAME_B';ColumnC:'NAME_C');

procedure TForm1.Button1Click(Sender: TObject);
begin

  with ClientDataSet1 do
  begin
    try
      Active := true;
      First;

      //***   列名をグループ化した定数で指定する   ***
      Edit1.Text := FieldByName(EXAMPLE.ColumnA).AsString;
      Edit2.Text := FieldByName(EXAMPLE.ColumnB).AsString;
      Edit3.Text := FieldByName(EXAMPLE.ColumnC).AsString;

    finally
      Active := false;
    end;
  end; 
end;