AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
15:メモ帳ソフトを作ってみよう(1)
 
Windowsのアクセサリ内にある「メモ帳」のようなソフトウェアを作ってみましょう。MS-DOS時代には作るのも難しかったスクリーンエディタ機能ですが、シンプルなものですが、Delphiではメモ Memo コンポーネントを使って簡単に作る事が出来ます。(※Windows95/98では最大64KBまで:やや複雑な事も可能なリッチエディット RichEdit コンポーネントというものもあります)
「メモ帳」のような単独アプリケーション以外にも、複数行の文章を表示・入力・編集したい場合などソフトウェアの一部として利用する際にも利用されます。
 
まずは、フォルダの準備を行います。プログラムを作成して保存・作業を行うフォルダを予めエクスプローラで作成しておきます。Windowsに添付されているファイル管理ツール「エクスプローラ」を動かします。Windowsの「スタート」メニューから、「プログラム」メニューの中、或いは、「プログラム」メニューの中の「アクセサリ」内に「エクスプローラ」はあります。
 
画面左側のツリー表示の中の「マイ コンピュータ」内にある、「ローカル ディスク(C:)」内の「DelphiProgram」フォルダ内の「test」フォルダをクリックして反転表示(選択状態)にします。
 
メニュー「ファイル」→「新規作成」→「フォルダ」をクリックして選択します。

初期状態が「新しいフォルダ」という名前でキー入力編集状態となっています。フォルダ名を「chap15」と決めて入力します。最後に[Enter]キー(改行キー)を押すか、どこかでマウス左クリックして下さい。
 
画面左側のツリー表示の中に、
「ローカル ディスク(C:)」
 →「DelphiProgram」
  →「test」
   →「chap15」
というフォルダが新しく作成されるのを確認して下さい。

Delphi6を起動し、
Delphi6のメニュー「プロジェクト」内の「オプション」をクリックします。

「プロジェクト オプション」画面が表示されます。
「アプリケーション」ページをクリックし、タイトルを
「MemoCyo」と入力します。

「ディレクトリ/条件」ページをクリックし、
「ディレクトリ」内の設定
 「出力ディレクトリ」
 「ユニット出力ディレクトリ」
 「検索パス」
 「デバッグ用ソースパス」
 「BPL出力ディレクトリ」
 「DCP出力ディレクトリ」
の各設定を
「C:\DelphiProgram\test」
から
「C:\DelphiProgram\test\chap15」
に変更して[OK]ボタンをクリックして下さい。

プログラミング作業は何も行っていませんが、最初にまず保存を行っておきます。
 
メニュー「ファイル」→「名前を付けて保存」をクリックして下さい。

「Unit1に名前を付けて保存」画面が表示されます。「保存する場所」には、先に作成したフォルダ「C:\DelphiProgram\test\chap15」を選択します。
ファイル名は「Unit1.pas」のまま[保存]ボタンをクリックして下さい。

メニュー「ファイル」→「プロジェクトに名前を付けて保存」をクリックして下さい。

「Project1 に名前を付けて保存」画面が表示されます。
「保存する場所」は、先で既に「C:\DelphiProgram\test\chap15」を選択していますので、そのままで構いません。
ファイル名は「MemoCyo」と変更入力して、[保存]ボタンをクリックして下さい。
 
これで最初の準備が出来ました。
これからメモ帳ソフトの作成を行っていきます。
 
コンポーネントパレット[Standard]の中にある「Memo」コンポーネントをクリックして選択します。

フォーム Form1 画面上でクリックして Memo1 オブジェクトを配置します。

オブジェクトインスペクタ画面でMemo1 オブジェクトの Align プロパティ欄を選択すると右横に[▼]ボタンがありますのでこのボタンをクリックします。

Align プロパティの内容を
「alNone」から「alClient」に変更します。
「alNone」は"指定無し"を示し、「alClient」は"クライアント領域全て"を示します。
 
※既に上下左右に他のオブジェクトを配置している場合には残りの領域全てを示します。

Memo1 オブジェクトがフォーム Form1 画面一杯に広がりました。

この状態で Memo オブジェクトの動きを見て確認するため、作成したプログラムを一旦保存します。
 
メニュー「ファイル」→「すべて保存」をクリックして下さい。

プログラムのコンパイルを行います。
メニュー「プロジェクト」→「MemoCyo を再構築」をクリックして下さい。
 
プログラムのコンパイル(再構築)を行うと、その経過・結果を示す画面が表示されます。[OK]ボタンをクリックして下さい。
もしエラーがある場合にはその旨を表示しコンパイルは完了しません。

コンパイル(再構築)が正常終了したら、出来上がったアプリケーション・プログラムを実行してみて下さい。
メニュー「実行」→「実行」をクリックして下さい。

作成したテストプログラムが実行されます。

Memo オブジェクトでのキー入力や表示の仕方等を確認して下さい。画面をリサイズすると Memo オブジェクトも追随して大きさが変わります。

文字を入力していくと横に表示されていきます。画面の右端まで行くと自動的に次の行へ移ります。改行キー([Enter]キー)を押すと手動で次の行へ移ります(手動で改行出来ます)。

次々に改行をしていくと、画面の上に表示されていた文字が表示されなくなります。矢印キー(カーソルキー[↑])で上方向へ移動すると表示されますので、入力した文字が消えるのではなく、見えなくなっただけというのが分かります。
せっかく入力した文章が見えなくなると勘違いしてしまいますので、縦のスクロールバーが表示されている方が良いでしょう。
 
画面の右上にある[×]ボタンをクリックすると終了されます。

 

実行した最初に、Memo1 画面に「Memo1」と表示されていましたのでまずはこれを消してみます。
 
オブジェクトインスペクタ画面で Memo1 オブジェクトの Lines プロパティ欄を選択すると右横に[…]ボタンが表示されますのでこのボタンをクリックします。

「文字列リストの設定」画面が表示されます。初期状態は1行「Memo1」と表示されています。

この「Memo1」行を[Delete]キーや[BackSpace]キー等で消して下さい。終わったら[OK]ボタンをクリックして下さい。

次に、Memo1 オブジェクトのスクロールバーの設定を行います。
 
オブジェクトインスペクタ画面で Memo1 オブジェクトの ScrollBars プロパティ欄を選択すると右横に[▼]ボタンがありますのでこのボタンをクリックします。

「ssNone」(初期状態)は、スクロールバー無し、
「ssHorizontal」は水平スクロールバーを表示、
「ssVertical」は垂直スクロールバーを表示、
「ssBoth」は両方のスクロールバーを表示、をそれぞれ意味します。
横方向は自動改行して欲しいのでここでは垂直方向のみスクロールバーを表示する、という事で「ssVertival」を選択します。

また、メモ画面内で[Tab]キーを押して横方向へのタブ位置移動を行いたいので、
オブジェクトインスペクタ画面で Memo1 オブジェクトの WantTabs プロパティ欄を選択し、右横にある[▼]ボタンをクリックします。

WantTabs プロパティを
初期状態の「False」から
「True」に変更します。

メニュー「ファイル」→「すべて保存」をクリックしてプログラムの保存を行い、メニュー「プロジェクト」→「MemoCyo を再構築」をクリックしてプログラムのコンパイル(再構築)を行い、正常終了したら、メニュー「実行」→「実行」をクリックして下さい。

文字を入力し、改行していくと、最初は無効状態だった垂直スクロールバーが有効状態になるのが分かります。



画面をリサイズして小さくすると、文字表示や垂直スクロールバー表示もそれに追随して変化する事が分かります。
 
リサイズが狭くて若干やりにくいので、画面下にステータスバーを付けてみます。
 
画面の右上にある[×]ボタンをクリックすると終了されます。

コンポーネントパレット[Win32]の中に「StatusBar」コンポーネントがあります。

コンポーネントパレット[Win32]の中にある「StatusBar」をダブルクリックすると、StatusBar1オブジェクトが自動的にフォーム Form1 画面の下に配置されます。

オブジェクトインスペクタ画面で StatusBar1 オブジェクトの SimplePanel プロパティ欄を選択し、右横にある[▼]ボタンをクリックして、初期状態の「False」から「True」に変更します。
 
※ステータスバーのメッセージを1つで利用する場合にはこの手法が簡単です。ステータスバーを複数に区切って複数メッセージ表示を行う場合には、ここを「False」のまま Panels プロパティを利用します。

オブジェクトインスペクタ画面で StatusBar1 オブジェクトの SimpleText プロパティ欄を選択し、ステータスバーに表示させたいメッセージ文字列を入力します。ここでは「めも帳です」と入力しています。
 
プログラム実行時にこのプロパティ内容を変更する事によって表示メッセージを色々変える事が出来ます。

フォーム Form1 画面上に配置したステータスバー StatusBar1 オブジェクトの表示状態が変わります。

それでは次に、メニューを付けてみます。
コンポーネントパレット[Standard]の中に「MainMenu」コンポーネントがありますので、クリックして選択します。

フォーム Form1 画面上でクリックして MainMenu1 オブジェクトを配置します。
これまでのコンポーネントとは異なり、配置するとアイコン絵が表示されます。

この MainMenu1アイコンをダブルクリックするか、又は、
オブジェクトインスペクタ画面で MainMenu1 オブジェクトの Items プロパティ欄を選択し、右横に表示される[…]ボタンをクリックします。

すると、メニュー編集用画面「Form1.MainMenu1」が表示されます。

メニュー編集用画面の左上が選択されている状態で、
オブジェクトインスペクタ画面で Caption プロパティ欄を選択し、「ファイル(&F)」と入力します。
 
「&F」はメニュー上で「F」と表示され、[Alt]キーと一緒に[F]キーを押す事でマウスクリックと同じ操作が出来るようになります。

オブジェクトインスペクタ画面で Name プロパティ欄を選択し、「File1」と自動的に表示された内容を「mnuFile」と変更入力します。
 
※ Name プロパティは Caption プロパティ内容がよくある文字の場合には自動的に名前が付きますが、そうでない場合、単なる英字+数字の組合せになります。
メニューの場合は特に、自分で分かり易い名前に変更して下さい。

メニュー編集用画面でメニュー「ファイル(F)」が作成されるのが確認出来ます。

メニュー編集用画面でメニュー「ファイル(F)」をクリックすると、その中のメニュー項目を作成する事が出来ます。

メニュー編集用画面でメニュー「ファイル(F)」内の最初のメニュー項目(まだ何も表示されていません)をクリックして選択状態にします。

オブジェクトインスペクタ画面で Caption プロパティ欄を選択し、「新規作成(&N)」と入力します。

オブジェクトインスペクタ画面で Name プロパティ欄を選択し、「mnuFileNew」と変更入力します。

メニュー編集用画面でメニュー「ファイル(F)」内の最初のメニュー項目「新規作成(N)」が追加されました。次のメニュー項目を選択状態にします。

オブジェクトインスペクタ画面で Caption プロパティ欄を選択し、「-」(マイナス;ハイフン)と入力します。
 
「-」を指定する事によってメニューに区切り線を入れる事が出来ます。区切り線は、メニュー内で目的が異なる場合や逆に目立たせたい場合等に利用されます。

メニュー編集用画面でメニュー「ファイル(F)」内の最初のメニュー項目「新規作成(N)」の次に区切り線が追加されました。次のメニュー項目を選択状態にします。

オブジェクトインスペクタ画面で Caption プロパティ欄を選択し、「終了(&X)」と入力します。

オブジェクトインスペクタ画面で Name プロパティ欄を選択し、「mnuFileExit」と変更入力します。

メニュー編集用画面でメニュー「ファイル(F)」内にメニュー項目「終了(X)」が追加されました。
 
画面の右上にある[×]ボタンをクリックして、メニュー編集用画面を閉じて下さい。

フォーム Form1 画面にメニューが追加されるのが確認出来ます。
 
フォーム Form1 画面のメニュー「ファイル」→「新規作成」をクリックして下さい。
 
コードエディタ画面に
procedure TForm1.mnuFileNewClick(Sender: TObject);
begin
 
end;
というプログラムコードが追加されます。これを下記のように記述します。
// メニュー
// →ファイル→新規作成
procedure TForm1.mnuFileNewClick(Sender: TObject);
begin
 if MessageDlg('新規作成します。', mtConfirmation,
      [mbYes, mbNo], 0) = mrYes then begin
  Memo1.Lines.Clear ;
 end;
end;
メニュー「ファイル」→「新規作成」を行った場合にどういう処理を行うのかというイベントハンドラを記述します。関数 MessageDlg はメッセージダイアログ画面を表示し、ボタンを押させて、どんなボタンを押したのかを返します。ここでは、「新規作成します」というメッセージを表示させて、確認用アイコン絵(mtConfirmation)を表示し、「はい」ボタン(mbYes)と「いいえ」ボタン(mbNo)を表示させています。この画面で「はい」をクリックした場合(mrYes)、Memo1 オブジェクトの内容をクリア=メモ内容を全て消す、という処理を行うようにしています。
 
フォーム Form1 画面のメニュー「ファイル」→「終了」をクリックして下さい。
 
コードエディタ画面に
procedure TForm1.mnuFileExitClick(Sender: TObject);
begin
 
end;
というプログラムコードが追加されます。これを下記のように記述します。
// メニュー
// →ファイル→終了
procedure TForm1.mnuFileExitClick(Sender: TObject);
begin
 close ;
end;
メニュー「ファイル」→「終了」を行った場合には、このプログラムを終了させるため「close」を行います。
 
メニュー「ファイル」→「すべて保存」をクリックしてプログラムの保存を行い、メニュー「プロジェクト」→「MemoCyo を再構築」をクリックしてプログラムのコンパイル(再構築)を行い、正常終了したら、メニュー「実行」→「実行」をクリックして下さい。
 
文字を入力したあと、「ファイル」→「新規作成」を行ってみて下さい。
「はい」ボタンをクリックすると、入力した文字が全て消えます。
「いいえ」ボタンをクリックすると、入力した文字はそのままとなります。





「ファイル」→「終了」を行ってみて下さい。
このソフトが終了される事を確認して下さい。
 
めも帳でせっかく入力した文章ですから、保存したり、保存した文章を開いたり、という事は最低限出来ないと困ります。ファイルを開いたり(読み込んだり)保存したり(書き込んだり)するには通常、テキストファイルの読み書きを行うプログラムを作るのですが、メモ Memo コンポーネントには、それを簡単に行える便利なメソッド LoadFromFile、SaveToFile というものがありますので、これを利用してみます。また、ファイルを開く際・保存する際には、フォルダやファイルを指定する画面を表示させたいですね。Delphi でも簡単にそういったダイアログ画面を表示出来るコンポーネントが標準であります。コンポーネントパレット[Dialogs]の中に「OpenDialog」コンポーネントや「SaveDialog」コンポーネントがあります。
 
メニューに「開く」「名前を付けて保存」というメニュー項目を追加する所から始めます。フォーム Form1 画面に配置したメニューアイコン MainMenu1 をダブルクリックして下さい。
 
「ファイル」メニュー内の「新規作成」項目の次に「開く」メニュー項目を付けたいので、その次である区切り線をクリックして選択状態にして、[Insert]キーを押します。

するとメニュー項目1つ分が空の状態で追加されます。

オブジェクトインスペクタ画面で Caption プロパティ欄を選択し、「開く(&O)...」と入力します。
 
メニューをクリックした後、ダイアログ画面を表示させるような場合には、メニュー項目の後ろに「...」と記述するようにするのが、Windowsでの「お約束」となっています。

オブジェクトインスペクタ画面で Name プロパティ欄を選択し、「mnuFileOpen」と変更入力します。

「ファイル」メニュー内の「開く」項目の次に「名前を付けて保存」メニュー項目を付けたいので、その次である区切り線をクリックして選択状態にして、[Insert]キーを押します。

するとメニュー項目1つ分が空の状態で追加されます。

オブジェクトインスペクタ画面で Caption プロパティ欄を選択し、「名前を付けて保存(&S)...」と入力します。

オブジェクトインスペクタ画面で Name プロパティ欄を選択し、「mnuFileSaveAs」と変更入力します。

画面の右上にある[×]ボタンをクリックして、メニュー編集用画面を閉じて下さい。

コンポーネントパレット[Dialogs]の中に「OpenDialog」コンポーネントがありますので、クリックして選択します。

フォーム Form1 画面上でクリックして OpenDialog1 オブジェクトを配置します。
このコンポーネントも、配置するとアイコン絵が表示されます。

コンポーネントパレット[Dialogs]の中に「SaveDialog」コンポーネントがありますので、クリックして選択します。

フォーム Form1 画面上でクリックして SaveDialog1 オブジェクトを配置します。
このコンポーネントも、配置するとアイコン絵が表示されます。

フォーム Form1 画面のメニュー「ファイル」→「開く」をクリックして下さい。
 
コードエディタ画面に
procedure TForm1.mnuFileOpenClick(Sender: TObject);
begin
 
end;
というプログラムコードが追加されます。これを下記のように記述します。
// メニュー
// →ファイル→開く
procedure TForm1.mnuFileOpenClick(Sender: TObject);
begin
 if (OpenDialog1.Execute) then begin
  Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
 end;
end;
メニュー「ファイル」→「開く」を行うと、「OpenDialog1.Execute」で「開く」画面を表示します。フォルダ・ファイルを指定して[開く]ボタンをクリックすると、True を返します。[キャンセル]ボタンをクリックすると False を返します。つまり、「if (OpenDialog1.Execute) then 〜」で、ファイルを指定した場合に、実際にファイルを開く処理を行います。ファイル名はフルパス状態(ディスクドライブ・フォルダ込みの状態)を「OpenDialog1.FileName」で取得する事が出来ます。Memo1 オブジェクトの Lines プロパティの LoadFromFile メソッドで指定したファイルを開いて内容を反映します。
 
フォーム Form1 画面のメニュー「ファイル」→「名前を付けて保存」をクリックして下さい。
 
コードエディタ画面に
procedure TForm1.mnuFileSaveAsClick(Sender: TObject);
begin
 
end;
というプログラムコードが追加されます。これを下記のように記述します。
// メニュー
// →ファイル→名前を付けて保存
procedure TForm1.mnuFileSaveAsClick(Sender: TObject);
begin
 if (SaveDialog1.Execute) then begin
  Memo1.Lines.SaveToFile(SaveDialog1.FileName);
 end;
end;
メニュー「ファイル」→「名前を付けて保存」を行うと、「SaveDialog1.Execute」で「保存」画面を表示します。フォルダ・ファイルを指定して[保存]ボタンをクリックすると、True を返します。[キャンセル]ボタンをクリックすると False を返します。つまり、「if (SaveDialog1.Execute) then 〜」で、ファイルを指定した場合に、実際にファイルを保存する処理を行います。ファイル名はフルパス状態(ディスクドライブ・フォルダ込みの状態)を「SaveDialog1.FileName」で取得する事が出来ます。Memo1 オブジェクトの Lines プロパティの SaveToFile メソッドで指定したファイル名を付けて内容を保存します。
 
メニュー「ファイル」→「すべて保存」をクリックしてプログラムの保存を行い、メニュー「プロジェクト」→「MemoCyo を再構築」をクリックしてプログラムのコンパイル(再構築)を行い、正常終了したら、メニュー「実行」→「実行」をクリックして下さい。
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
 01 02 03 04
 05 06 07 08
 09 10 11 12
 13 14 15 16
 17 18 19 20
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.