メモ帳
Memoコンポーネントを使うと簡単にエディタを作ることができます。ここで紹介する例は、Memoコンポーネントが備える機能だけを使った単純なSDI(Single Document Interface)アプリケーションです。Memo以外にも、MainMenuの典型的なSDIメニュー構成やOpenDialog,SaveDialogコンポーネントの使い方も含まれています。
ソース(青色部分が記述した部分です)
NOTEMEMO.PAS
unit NoteMemo; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, About; type TMainForm = class(TForm) Memo1: TMemo; MainMenu1: TMainMenu; File1: TMenuItem; New1: TMenuItem; Open1: TMenuItem; Save1: TMenuItem; SaveAs1: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; Edit1: TMenuItem; Cut1: TMenuItem; Copy1: TMenuItem; Paste1: TMenuItem; SelectAll1: TMenuItem; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Help1: TMenuItem; About1: TMenuItem; procedure FormCreate(Sender: TObject); procedure Open1Click(Sender: TObject); procedure SaveAs1Click(Sender: TObject); procedure Save1Click(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure Memo1Change(Sender: TObject); procedure New1Click(Sender: TObject); procedure About1Click(Sender: TObject); procedure SelectAll1Click(Sender: TObject); procedure Cut1Click(Sender: TObject); procedure Copy1Click(Sender: TObject); procedure Paste1Click(Sender: TObject); private { Private 宣言 } FFileName: string; FDirty: Boolean; procedure DocNew; public { Public 宣言 } end; var MainForm: TMainForm; AboutForm: TAboutBox; implementation {$R *.DFM} { フォームが作成されたとき } procedure TMainForm.FormCreate(Sender: TObject); begin Memo1.Align := alClient; Memo1.ScrollBars := ssBoth; DocNew; AboutForm := TAboutBox.Create(Self); end; { ドキュメントを初期化 } procedure TMainForm.DocNew; begin Memo1.Lines.Clear; FFileName := ''; FDirty := False; Repaint; end; { 新規作成 } procedure TMainForm.New1Click(Sender: TObject); begin DocNew; end; { ファイルを開く } procedure TMainForm.Open1Click(Sender: TObject); begin // OpenDialog1をデフォルトオブジェクトとして with OpenDialog1 do begin Filter := 'Text(*.txt)|*.txc|All(*.*)|*.*'; if Execute = True then begin // OpenDialogのOKボタンが押されたとき Memo1.Lines.LoadFromFile(FileName); // ファイル名を設定 FFileName := FileName; end; end; end; { 名前を付けて保存 } procedure TMainForm.SaveAs1Click(Sender: TObject); begin // SaveDialog1をデフォルトオブジェクトとして with SaveDialog1 do begin Filter := 'Text(*.txt)|*.txc|All(*.*)|*.*'; if Execute = True then begin // OpenDialogのOKボタンが押されたとき Memo1.Lines.SaveToFile(FileName); FDirty := False; // ファイル名を設定 FFileName := FileName; end; end; end; { ファイルに上書き保存 } procedure TMainForm.Save1Click(Sender: TObject); begin if FFileName = '' then // ファイル名が設定されていないときは「名前を付けて保存」 SaveAs1Click(Sender) else begin Memo1.Lines.SaveToFile(FFileName); // 上書き FDirty := False; end; end; { 終了 } procedure TMainForm.Exit1Click(Sender: TObject); begin // Dirtyフラグが真なら確認 if FDirty = True then begin if MessageDlg('ファイルが保存されていません。保存しますか。', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin Save1Click(Sender); end; end; Close; end; { 変更があったとき } procedure TMainForm.Memo1Change(Sender: TObject); begin FDirty := True; end; { バージョン情報 } procedure TMainForm.About1Click(Sender: TObject); begin AboutForm.Show; end; { 編集/すべて選択 } procedure TMainForm.SelectAll1Click(Sender: TObject); begin Memo1.SelectAll; end; { 編集/切り取り } procedure TMainForm.Cut1Click(Sender: TObject); begin Memo1.CutToClipboard; end; { 編集/コピー } procedure TMainForm.Copy1Click(Sender: TObject); begin Memo1.CopyToClipboard; end; { 編集/貼り付け } procedure TMainForm.Paste1Click(Sender: TObject); begin Memo1.PasteFromClipboard; end; end.
ABOUT.PAS
unit About; interface uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls; type TAboutBox = class(TForm) Panel1: TPanel; ProgramIcon: TImage; ProductName: TLabel; Version: TLabel; Copyright: TLabel; Comments: TLabel; OKButton: TButton; procedure OKButtonClick(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var AboutBox: TAboutBox; implementation {$R *.DFM} { OKボタンが押されたとき } procedure TAboutBox.OKButtonClick(Sender: TObject); begin Close; end; end.