Delphiのコンポーネント、これはVBとかのマイクロソフト系言語ではコントロールと呼ぶモノかも知れないが、いわゆるボタンとかのオブジェクトのこと。これを画面上に動的に配置するということをやってみた。


■ボタン1(Button1)を押すたび、Panel2というパネルにボタンを動的追加する。

procedure TSDIAppForm.Button1Click(Sender: TObject);
begin
with TButton.Create(Panel2) do begin //生成時にオーナーを指定
Parent :=Panel2; //親ウィンドウを指定
Left :=60 + panel2.ComponentCount * 10;
Top :=60 + panel2.ComponentCount * 10;
Width :=120;
Name :='てきとう' + IntToStr(panel2.ComponentCount);
Caption :='てきとう';
// OnClick :=Form1.ShowMsgBox; //イベントの動的割り当て
end;

end;

これで動的にボタンが(イベントは割り当てていないが)できる。
しかし、これを消すのに苦労した。結局はできたのだが、どうもサンプルもなさそうで、なんとなく作ったら動いたのが次のコードである。

■ボタン2(Button2)を押すと、Panel2に動的追加されたボタンを一気に削除する。

procedure TSDIAppForm.Button2Click(Sender: TObject);
var
LoopCnt: integer;
begin

For LoopCnt:= panel2.ComponentCount - 1 downto 0 do
begin

panel2.Components[LoopCnt].Destroy;
end;

end;


わかったこと
 ・For Each のようなループはない。
 ・For 分の Setp -1 に相当するのは downto である。
 ・オブジェクト等の要素番号は小カッコ()ではなく大カッコ[]を使う。
こちらの記事で頭の中でまとまってきたVBAに関して、アクションをしていなかったので、その第一段として。

私自身、VBAでは小さなツールから部署で利用する基幹システムまでと幅広い経験がある。その経験上、一時しのぎでデータ加工に使うツールを作る程度ならさほど問題はなくても、繰り返し利用するもの/複数の人で利用するもの/変更が発生した際に修正が必要になるもの、といったものは、プログラムの保守性を考慮した方がいいのではないか、と感じている。
保守性などと難しい言葉を使ったが、修正時に以下のような経験はないだろうか?
 ・修正箇所が特定できない。
 ・修正時の影響範囲が特定できない。
 ・似たような修正箇所を多数の箇所で行わなければならない。
 ・手が付けられず、処理結果に対して補正を行う別のプログラムを作成した。
個人的に趣味として使っているものであれば上記のような状態でも諦めがつくかもしれない。しかし、仕事として使っているものだと時間も費用も多く掛かってしまう、ということになる。

理想を言えば、修正箇所や影響範囲を特定しやすく、類似の修正は少なく、かつ、それでいて修正後の動作確認がしやすい、という状態にしたいものだ。そう考えるのは至極当然であろう。では、そうはできないのか?これまた私自身の経験だが、かなり理想に近い所まで改善することは可能、である。

この方向性で「保守性を高める方法」を少しずつではあるが、体系化していく所存である。
サーバーを扱うと必ずと言っていいほど出てくるのが「無停電電源装置」である。停電時でも使い続けることができるもの、というよりは、安全にシャットダウンするためのもの、というのが目的である。
(といいつつも、稼働時間優先の設定もできるのだが・・)

一社独占でもないはずだが、無停電電源装置と言えば、どのお客様先でもAPC社製のモノしか見たことがないし、制御ソフトもPower Chute と相場が決まっているのかというくらいである。

この組み合わせでしか触ったことはないが、Power Chute には
 ・停電時に稼働時間優先か、サーバー保護優先かを選択可
 ・通常運用時の電源OFF/ONの時間設定が可
くらいはできる。
先日設定したものはSQL Server と IIS が起動するものだったが、APCでの電源オフ時、OSを落とす前にそちらを落とす設定なんかができた。より安全にオフしようという現れだろう。

参考まで、APCで電源をOFFしたものが通電後電源が入るのか?という疑問があるだろう。最近のサーバー、特にラックマウント型のようだが、通電後にサーバーが起動する、という設定をBIOSで行えるものがある。残念ながらタワー型でそういう機種はまだ見かけていないが、節電が叫ばれる昨今、この設定があると便利なケースも多いだろう。スペック等に目が行きがちだが、導入時にはこういう点もチェック対象としてはどうだろうか。