Delphi program 13 memo-editor


  1. ファイルの〔上書き保存(S)〕メニュー

     ファイルの保存には、既存ファイルを同じファイル名で保存する場合と新規ファイルや既存ファイルにファイル名を付けて(変更して)保存する場合とで処理が分かれる。 まず、より単純なファイルの〔上書き保存(S)〕の方から考える。このメニューは編集中のファイルを現在のファイル名のままで保存する処理である。

 

  1. ファイルの〔名前を付けて保存(A)〕メニュー
  2.   それではFileSaveAs1(...)を定義する。ファイルに名前を付けて保存するプログラムのコード は、最初にSaveダイアログボックスを呼び出して、ユーザにファイル名を入力してもらい、Executeの値を調べ、入力があればそれをファイル名として取得する。 そして、上書き保存を呼び出して、そのファイル名で保存すればよい。 したがって、次のような6行のコードを書く。

  1. 〔名前を付けて保存(A)〕のプログラムコード (その1)
    procedure TForm1.FileSaveAs1Click(Sender: TObject);
    begin
         if SaveDialog1.Execute then
         begin
              MyFilename := SaveDialog1.Filename;  //ファイル名を取得
              Caption := MyCaption + MyFilename;  //タイトルバーに表示
              FileSave1Click(Sender)   // 手続き〔上書き保存(S)〕を呼び出し、そのファイル名で保存
         end;
    end;
    
  2. このプログラムを実行すると、次の右図のようなSaveダイアログボックスが開く。 〔ファイル名(N)〕の欄に入力したファイル名が既に存在するファイル名と同じ場合、〔保存(S)〕ボタンを押すとそのまま上書き保存してしまう。 既存のファイルを消去しては困ることもあるので、存在するファイル名で保存しようとしたら、左図のような確認ダイアログを表示するようにしよう。 ついでに、〔ファイル名(N)〕の欄には空白ではなく、現在開いているファイル名を既定値として入力しておくことに変更する。


Fig.1 確認

Fig.2 Save Dialog

  1. 上のイベントハンドラの中に以下のように最初の2行を追加する。 これでFig.1が現れたり、Fig.2の「ファイル名(N)」の欄には開いているファイル名が表示されるようになる。

    〔名前を付けて保存(A)〕のプログラムコード(その2)
    procedure TForm1.FileSaveAs1Click(Sender: TObject);
    begin
         SaveDialog1.Filename := MyFilename;         // 開いているファイル名を代入
         SaveDialog1.Options := [ofOverWritePrompt]; // 上書き保存の確認の設定
         if SaveDialog1.Execute then         // 保存するファイル名が入力されたなら
         begin
              MyFilename := SaveDialog1.Filename;   // 保存するファイル名を取得
              Caption := MyCaption + MyFilename;
              FileSave1Click(Sender);               // 上書き保存の手続きを呼び出す
         end;
    end;
    
  2. 〔名前を付けて保存(A)〕のプログラムコードの(その1)(その2)各段階でメモ帳を実行してその効果を確認してみよう。 また、今度は〔上書き保存(S)〕を選択してもエラーが出ないことも確かめておく。

 

  1. メモ帳の〔印刷(P)〕メニューのイベントハンドラ
  2.   DelphiのPrinterオブジェクトには,プリンタの殆どの動作がカプセル化されているので,これを使うと印刷が間単にできる。

     

    1. 終了処理の詳細な記述

        多くの応用プログラムでは、終了時に特別な処理が必要となる。 例えば、いま作成している簡易版「メモ帳」では、編集中のテキストが変更を受けていれば「保存するかどうか?」の確認をしてから終了すべきである。 MainMenuコンポーネントの〔終了(X)〕メニューに対するイベントハンドラとして,既に次のようなプログラムコードを書いた:

        procedure TForm1.Exit1Click(Sender: TObject);
        begin
             Close;
        end;
        
      次に,テキストの変更があれば必ずこの保存確認をしてから終了するように〔終了(X)〕処理を改良する。

 

  page:[Prev.] [Next]


"Software I", 29/10/1998, T.Katayama (Last updated: )