コラム / 置換ツールを作ろう / 8



早速生成コードを書きましょうか!
HSPやCに触れたことがある人は、まずここで、ん? となると思います。
実はDelphiには、
「プログラムの実行される決まった順番」
というのがありません。
はじめはここ
おわりはここ
という、メインの流れを記述する部分が無いのです!
(厳密には、あります。でもそこは普通いじりません。
 設計した最初のウィンドウを出す処理とかが書いてあります)
じゃぁ、いったいどこにプログラムを書いていくのかというと、
クラスのイベントなどに書くのです。
実は、さきほど定義した二つのほかに、もう一つクラスが存在しています。
それは、さっきまで設計していた、このメインフォームなんですwww

syotai.png

さて、イベントとはなんでしょうか。
クラスには、データを入れる部分と、データを扱う部分の二箇所があります。

classtoha.PNG

プロパティとイベントです。
プロパティってのは、Captionとかの、クラスの個別に持っている変数のことですね。
じゃぁ、イベントというのはなんなんでしょうか。
イベントというのは、「処理を入れる変数」のようなものです。
そして、「そのイベントが発生した時、登録されている処理が実行される」のです。
つまり、こういうことです↓

ero.png

うん まぁ うん ごめんなさい。
気を取り直して。
よく見ると、オブジェクトインスペクタに、
イベント というタブがありますね。

img18.png

ここをクリックすると、そのオブジェクトのイベント一覧が表示されます。
話がそれましたが、
定義したクラスの生成、解放をしたいのでしたね。
それにまったくもってぴったりなイベントが存在します。
オブジェクトツリーでFormを選んで、インスペクタのイベントタブをクリックしてください。

img20.png

この中に、
onCreate と onClose がありますね。
それぞれ、「フォームが生成されたときに発生」「フォームが閉じられたときに発生」
します。
フォームが生成されたとき、というのはすなわち、
アプリケーションが開始したときです。(厳密には、超直後ってことになるけど
そして、フォームが閉じられたとき、というのは、
アプリケーションが終了するときです。(同じく正しくは超直前だでえ
初期化するにはもってこいのタイミングです。
いよいよ、初期化コードを書きましょう。
onCreateの右の灰色の部分をダブルクリックしてください。

img21.png

こんなふうになったら成功です。
procedure TForm1.FormCreate(Sender: TObject);
begin

end;
この、begin から end; が、イベントの中身のプログラムになります。
早速次のように書いてください。
procedure TForm1.FormCreate(Sender: TObject);
begin
    clip:=TClipboard.Create;
    tex:=TStringList.Create;
end;
ちなみに、単語とかを書いてるときに、Ctrl+スペース を押すと、
予測単語リストがでてきて楽です。
この、 変数名 := クラス型.Create ; というのは、お決まりのパターンです。
ちゃんと文法上の意味があるんですが、とりあえず覚えて置いてください。
texはTStrings型なのに、TStringListと書いてありますね。
これはなぜかというと・・・・・・・・良く知らない・・・・・・・・・・
文字列リストはこうなんです。今度ちゃんと調べておきます。ごめんなせえ。
生成コードがかけたら、解放コードも書きましょう。
オブジェクトインスペクタでonCloseをダブクリです。
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin

end;
と出てきたら、
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    clip.Free;
    tex.Free;
end;
と書き足してください。
同じく、beginからendが処理の部分です。
Free というのは、解放する命令のことです。
その前についている、「.」ドットは、クラスの中のプロパティや手続きを参照するときに使う記号で、
日本語で言えば、「の」 です。 つまり、
clip の Free 命令 を 実行せよ。
と書いてあります。
オブジェクト.Free; というのも解放のお決まりのパターンです。
初のプログラム部分でしたがどうでしたでしょうか。
クラスの説明は難しいです・・・ また次で。