§1 テキストエディタの制作 VB6 | |
(3) ファイルの入出力 V |
5. ファイルを開く(読み込む)
メニューから開く(O)を選択するとmnuOpen_Clickプロシージャが実行される。
Private Sub mnuOpen_Click() Dim sdata As String 'データ読み込み用 Dim yn As VbMsgBoxResult 'メッセージボックス用 '保存の確認と保存処理 (a) If Henkou = True Then 'データに変更あり? yn = MsgBox("まだ保存されていません。保存しますか。", vbYesNo, "保存確認") If yn = vbYes Then FileSave '保存の処理を呼び出す End If End If '開くファイル名選択 (b) On Error GoTo Err 'エラーが発生したらErrへ処理を移す CommonDialog1.ShowOpen '開くのダイアログを表示 Filename = CommonDialog1.Filename 'ファイル名を設定 Text1.Text = "" 'テキストを消去 'データを読み込む (c) Open Filename For Input As #1 'ファイルを開く Do If EOF(1) Then 'ファイルの終わり? Exit Do 'Do-Loopを抜け出す End If Line Input #1, sdata 'データを1行(改行まで)読み込む Text1.Text = Text1.Text & sdata & vbCrLf 'データをtextプロパティに追加 Loop Close #1 'ファイルを閉じる Henkou = False '変更なし Exit Sub 'プロシージャを抜け出す Err: MsgBox "ファイルが開けませんでした。" End Sub
(a) 現在のデータが保存されていない(Henkou=False)ときは、保存するかどうかの確認をする。保存するときはFileSaveプロシージャを呼び出し、保存しないときは次に進む。
(b) ファイル名入力(開く)のダイアログを表示し、ファイル名を選択する。データ(テキスト)をクリアしておく。
(c) ファイルを入力(Input)モードで開く。
データを1行ずつ読み込み、Textプロパティに追加していく。
データがなくなったかどうかはEOF関数で判定している。EOF関数の引数は、オープンしたときの番号(#1)を指定する。読み込むデータがなくなればTrueになる。
読み込みが終わったらファイルを閉じて、変更あり/なしフラグ(Henkou)をFalseに設定しておく。
データの読み込みにInput命令を使用していないのは、Input命令がカンマまたは行末(改行文字)までしか読み込まないからである。
Line Input命令はカンマを区切り文字としてではなく普通の文字として読み込むことができる。
どちらの入力命令も行末までしか読み込まないので、1行ずつ読み込んで追加(連結)していく。また、改行コードが読み込まれないので、改行コード(vbCrLf)も追加している。
改行コードとして使用しているvbCrLfはVisualBasicであらかじめ定義されている定数である。
6. 新規ファイル(テキストデータの消去)
メニューから新規ファイル(N)を選択したとき、現在のテキストが保存されていないときは、保存するかどうかの確認をしてからテキストデータを消去する。このとき、変数Filenameを
"*NONE" に、変数HenkouをFalse(初期状態)に設定する。
メニューから新規ファイル(N)を選択するとmnuNew_Clickプロシージャが実行される。
Private Sub mnuNew_Click() Dim yn As VbMsgBoxResult '保存の確認と保存処理 If Henkou = True Then '変更あり? yn = MsgBox("まだ保存されていません。保存しますか。", vbYesNo, "保存確認") If yn = vbYes Then FileSave '保存の処理を呼び出す End If End If Text1.Text = "" 'テキストを消去 Filename = "*NONE" 'ファイル名を未設定にする Henkou = False '変更なしに設定する End Sub
以上で、基本的な機能を備えたテキストエディタの完成である。これまでの学習を生かして、アイコンの設定や、最初に表示されるウィンドウの位置などを設定し、セットアップファイルを作成してみよう。
(3) ファイルの入出力 V | |
Copyright © 2001,2002 Hiroshi Masuda |