Delphi日記
第4章 メニューにイベントを追加する(名前を付けて保存/終了)(11/09/01)
まずその前に。前回(第3章)、最初の方でイベントを追加した際、
>何だかわからないのですが(いいのか?)、こーやってアクションを追加すると、何故かメニューの「開く」と対応がとられているようです。
と書きましたが、これは次の設定によるものでした。
イベントとメニューアイテムとの関連付けをします。オブジェクトツリーの「MainMenu1」「ファイル(&F)」以下の「開く(&O)」をクリックし、オブジェクトインスペクタの「イベント」タブをクリックしてから「Action」の所で「FileOpen1」を選択します。

それでは今回の内容です。
今回は読み出したファイルを改変するなどして保存します。前回と同様にイベントを追加して行きます。
フォーム上に置いたActionListをダブルクリックし、「標準アクションの新規追加」を選択します(第3章を参照)。
そこで「ファイル」の「FileSaveAs」をダブルクリックし、「Form1.ActionList1の編集」ウインドウ、「分類」「ファイル」以下に「FileSaveAs1」が追加されていることを確認します。
オブジェクトインスペクタでTFileSaveAs1を選択し(「オブジェクトツリー」ウインドウから「ActionList1」「ファイル」「FileSaveAs1」を選択しても同じ)、「BeforeExecute」の白い部分をダブルクリックします。 ユニットファイル(Unit.pas)のウインドウが現れるので、
procedure TForm1.FileSaveAs1BeforeExecute(Sender: TObject);
が最初にあるのを確認してから最初のbeginとendの間に
FileSaveAs1.Dialog.InitialDir := ExtractFilePath(FileName);

と入力し、またオブジェクトインスペクタの下の方にある「OnAccept」の白い部分をダブルクリックします。
procedure TForm1.FileSaveAs1Accept(Sender: TObject);
が最初にあるのを確認してから最初のbeginとendの間に
RichEdit1.Lines.SaveToFile(FileSaveAs1.Dialog.FileName);
FileName := FileSaveAs1.Dialog.FileName;
StatusBar1.SimpleText := FileName;

また、第3章でやったようにオブジェクトインスペクタでTFileSaveAs1を選択し、「プロパティ」の中の「Dialog」の左の+マークをクリックします。すると中が展開されるので、「DefaultExt」に「txt」と記入し、また、「Filter」の横の白い部分をダブルクリックします。
再びフィルタの設定で次のように入力します。

最後に、イベントとコマンドを関連付けます。オブジェクトツリーの「MainMenu1」「ファイル(&F)」以下の「名前を付けて保存(&A)」をクリックし、オブジェクトインスペクタの「イベント」タブをクリックしてから「Action」の所で「FileSaveAs1」を選択します。

これでイベントが関連付けられました。
実行してみます。用意したファイル(第3章のものと同じ)を開き、適当に文字を入力したあと「tekitou2」という名前で保存してみます。

そして開いてみると、保存されているのが分かります。ですが一つ重大問題発生。保存したファイルをメモ帳で開いてみます。すると…

…。解決策を模索しますが、とりあえず今回は無視して先に進みます。
次に、「終了」にイベントを追加します。
FileOpen1やFileSaveAs1などを追加した時と同様、フォーム上に置いたActionListをダブルクリックし、「標準アクションの新規追加」を選択します。
そこで「ファイル」の「FileExit」をダブルクリックし、「Form1.ActionList1の編集」ウインドウ、「分類」「ファイル」以下に「FileExit1」が追加されていることを確認します。
次に、また先程同様イベントとメニューアイテムとの関連付けをします。オブジェクトツリーの「MainMenu1」「ファイル(&F)」以下の「開く(&O)」をクリックし、オブジェクトインスペクタの「イベント」タブをクリックしてから「Action」の所で「FileExit1」を選択します。
「終了」に関してはこれだけです。まあ、ファイルが更新されているかなどをチェックする機能なども欲しいところですが、とりあえず今の所は最低限の動作だけしてくれればいいので。
とりあえず今回はここまでです。次回以降は、「標準アクションの新規追加」に含まれていない動作(上書き保存など)をするので自分でイベントを作らなければなりません。
BACK
HOME