メモ帳
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.