いくつかの変数をグループ化したい場合、
レコード型を使えば済む話なのだが、
定数をグループ化するとなるとちょっと困る。
【例】
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;
2012年12月4日火曜日
2012年11月5日月曜日
Delphiには値が変更できる定数があったりする話
「定数」とはその名の通り「あらかじめ定められた一定の数」
のはずなのだが、Delphiでは「定数」と呼ばれてるくせに
値を変更できるようにする方法が存在したりする。
まず普通の定数。
const
TEST = 'てすと';
次に型付き定数。
const
IDX : integer = 100;
ARY : array[0..4] of string = ('A','B','C','D');
この2種類の定数のうち型指定のない「普通の定数」は
何をどうやろうと値の変わらない、正真正銘の定数なのだが、
「型付き定数」はコンパイルオプションを変更することで
「Static変数」に変身させることができてしまう。
【例】
procedure TForm1.Button1Click(Sender: TObject);
const
IDX : integer = 1;
begin
IDX := 2; ←通常はNG
Inc(IDX); ←通常はNG
end;
ここでプロジェクトのオプションから
[Delphiコンパイラ]-[コンパイル]-[割り当て可能な型付き定数]
を選択しTrueにすると、上記の代入ができるようになる。
【例】
procedure TForm1.Button1Click(Sender: TObject);
const
IDX : integer = 1;
begin
IDX := 2; ←代入できる
Inc(IDX); ←Static変数と同じなのでボタンクリックの度に値が加算される
end;
定数のくせに値が変更できていいのか?という思いはあるが
DelphiでどうしてもStatic変数が使いたいときはありかもしれない。
のはずなのだが、Delphiでは「定数」と呼ばれてるくせに
値を変更できるようにする方法が存在したりする。
まず普通の定数。
const
TEST = 'てすと';
次に型付き定数。
const
IDX : integer = 100;
ARY : array[0..4] of string = ('A','B','C','D');
この2種類の定数のうち型指定のない「普通の定数」は
何をどうやろうと値の変わらない、正真正銘の定数なのだが、
「型付き定数」はコンパイルオプションを変更することで
「Static変数」に変身させることができてしまう。
【例】
procedure TForm1.Button1Click(Sender: TObject);
const
IDX : integer = 1;
begin
IDX := 2; ←通常はNG
Inc(IDX); ←通常はNG
end;
ここでプロジェクトのオプションから
[Delphiコンパイラ]-[コンパイル]-[割り当て可能な型付き定数]
を選択しTrueにすると、上記の代入ができるようになる。
【例】
procedure TForm1.Button1Click(Sender: TObject);
const
IDX : integer = 1;
begin
IDX := 2; ←代入できる
Inc(IDX); ←Static変数と同じなのでボタンクリックの度に値が加算される
end;
定数のくせに値が変更できていいのか?という思いはあるが
DelphiでどうしてもStatic変数が使いたいときはありかもしれない。
登録:
投稿 (Atom)