delphi.gif (306 バイト) メモ帳


Memoコンポーネントを使うと簡単にエディタを作ることができます。ここで紹介する例は、Memoコンポーネントが備える機能だけを使った単純なSDI(Single Document Interface)アプリケーションです。Memo以外にも、MainMenuの典型的なSDIメニュー構成やOpenDialog,SaveDialogコンポーネントの使い方も含まれています。

 

wpe1.jpg (16939 バイト)

 

ソース(青色部分が記述した部分です)

 

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.