第9回:簡単メモ帳を作ろう その1


まずは簡易版を作成

いきなり多機能なメモ帳を作るというのは至難の業。
ということでここではまず基本的な機能を持った
メモ帳を作ってみましょう。

簡易版ということでまずはテキストファイルを「開く」のと
上書き保存・名前を付けて保存をできるようにしましょう。
また、保存のとき同じことをする部分が出てくるので、
サブルーチンという同じものを再利用する方法を使ってみようと思います。


まずは見た目から

新しいフォームにテキストボックス1個とコマンドボタンを3個置いてください。
相変わらず好きなように配置して下さい。本来は配置にもルールがあるらしいのですが・・・
細かいことは気にしなくていいんです!!

各プロパティは以下の通りです。Formのプロパティは別にそのままでもかまいません。
テキストボックスのText1
オブジェクト名txtMain
MuitiLineTrue
Text文字を削除して
空欄にします

コマンドボタンCommand1のプロパティ
オブジェクト名comOpen
Caption開く

コマンドボタンCommand2のプロパティ
オブジェクト名comSave
Caption上書き保存

コマンドボタンCommand3のプロパティ
オブジェクト名comSaveas
Caption名前を付けて保存


コモンダイアログを使ってファイルを開く

コモンダイアログってなに?って思いましたか?
みなさんがファイルを開いたり保存するときに見かけるあれです。
(正確には「印刷」「色の指定」や「フォントの指定」などのウィンドウも含まれます)


これはいちいち作らなくってもいいんです
標準の状態ではコモンダイアログは使うことができないので、
コモンダイアログを使えるようにしなくてはなりません。

メニューの「プロジェクト」→「コンポーネント」を押して、
「コントロール」のタブを選び、「Microsoft Common Dialog Controls」に
チェックをつけてOKを押します。
すると右下にアイコンが追加されます。
後はふつうのコントロールと同じように使用できますが、
タイマーコントロールと同様にサイズの変更はなく、実行時に表示されません。

コモンダイアログを表示するには使うダイアログによってメソッドが異なります。
「ファイルを開く」ときにはShowOpen、「保存」の時はShowSaveです。
ちなみに「フォントの指定」の時はShowFont,「色の指定」はShowColorです。

それぞれのメソッドを使用する前にはプロパティの設定をしておきます。
主に必要となるのはタイトルを設定する「DialogTitle」、
選択するファイルの形式を設定する「Filter」、
各種の設定をする「Flag」などがあります。

では実際にコモンダイアログを表示してみましょう。
コモンダイアログをフォーム上に置いて、オブジェクト名をdlgFileとします。
Private Sub mnuOpen_Click()
  'mnuOpenをクリックしたとき
  'まず各プロパティを設定します。
  dlgFile.Filter = "|全てのファイル(*.*)|*.*|テキストファイル(*.txt)|*.txt|"
  ' 既定値のフィルタを指定します。
  dlgFile.FilterIndex = 2
  '[読み取り専用ファイルとして開く]のチェックボックスを表示しません。
  dlgFile.Flags = &H4
  ' [ファイルを開く]ダイアログボックスを表示します。
  dlgFile.ShowOpen
  'この下に実際のコードを書いていきます。
End Sub

このままで実行をしたときに「キャンセル」を押すと エラーメッセージが出てしまいます。


これを回避する方法はあとで実際のコードの中で説明します。


ファイルにアクセスする方法

ファイルを開いたり保存する際にはシーケンシャルアクセスという
ファイルの先頭から順番に読み込み・書き込みをする方法を使います。
Open ファイル名 For Input As #ファイル番号
 LIne Input #ファイル番号 ,変数
Close #ファイル番号
まずOpenステートメントでファイルを開き
Inputステートメントで内容を変数に格納して
Closeステートメントでファイルを閉じます。
ファイル内容をテキストボックスなどに表示する場合には
使用した変数を代入すればよいのです。

次に保存する場合の方法です。
Open ファイル名 For Output As #ファイル番号
 Print #ファイル番号 ,保存する内容
Close #ファイル番号
まずOpenステートメントでファイルを開き
Printステートメントで1行分のデータを保存し
Closeステートメントでファイルを閉じます。


いよいよ本番 コードの記述へ

全体を通じてファイルの名前を格納する変数を宣言しましょう。
コードの一番始めのにPrivate Sub の前に
Dim strFileName As String
と記述しておきます。
これでこの変数には全体からアクセスができるようになります。

起動時にテキストファイルの名前を「無題」にしてしておきます。
Private Sub frmMain_Load()
  strFileName = "無題"
End Sub


これで準備は整ったので実際にテキストファイルを開くためのコードを書いてみましょう。
途中「ファイルを開く」というところが出てきますが、開いたら必ず閉じることを覚えて置いてください。
これを忘れると最悪の場合テキストファイルが壊れてしまう可能性があります。
Private Sub mnuOpen_Click()
  Dim ReadData As String, temp As String
  ' エラーが起きたら以下の処理をせずにErrorHandleに移動します。
  On Error GoTo ErrorHandle
  dlgFile.Filter = "|全てのファイル(*.*)|*.*|テキストファイル(*.txt)|*.txt|"
  dlgFile.FilterIndex = 2
  dlgFile.Flags = &H4
  dlgFile.ShowOpen

  ' ここからは「開く」を押したときの処理。
  ' ダイアログで選んだファイル名を変数のstrFileNameに入れる。
  strFileName = dlgFile.FileName
  ' strFileNameに入っているファイルを、ファイル番号1としてInputモードで開く。
  Open strFileName For Input As #1
  ' EOF(End Of File:ファイルの最後)まで以下の処理を繰り返す。
  Do Until EOF(1)
  'ファイル番号1の内容を1行ずつ変数tempに入れる。
    Line Input #1, temp
  ' それまでReadDataに入っていた内容の後ろに
  tempの内容と改行を示すvbCrLfを連結して変数ReadDataに入れる。

    ReadData = ReadData & temp & vbCrLf
  ' ここまでが繰り返し部分となる。
    Loop
  ' Inputモードで開いたファイルを閉じる。
  Close #1
  ' textboxにReadDataを表示させる。
  txtMain.Text = ReadData

  ' エラーが起きるとここに飛んでくる。
  End Subとの間になにもないので、なにもせずに終わる。
  必要に応じてエラーメッセージを出すなどする。

ErrorHandle:
End Sub


ファイルの保存

・・・は次回にします。思ったよりも長くなってしまったので。
ということで 第10回ではファイルの保存に関する操作です。

第10回へ | 表紙へ
Copyright (C) 1998-2000 カジ