§1 テキストエディタの制作 VB6
 (6) 置換機能の追加 U 前へ 目次へ 次へ 

 2. エディタに置換機能を追加

フォームの追加

 テキストエディタのプログラムを呼び出す。検索文字列や置換文字列を入力するためのフォームを追加する。
 文字列を一つだけ入力するのであれば、InputBox関数(ヘルプ参照)が使えるが、ここではフォーム上にテキストボックスなどを配置して入力することにする。

 フォームの追加はメニューバーから次のように選択する。

[プロジェクト(P)] → [フォームモジュールの追加(F)]

 ダイアログから「フォームモジュール」を選択し、開くボタンをクリックする。追加したフォームはForm3となる。

図1-8-2

 フォーム(MaxButton=False, MinButton=False)には、ラベル2個、テキストボックス2個、ボタン2個、オプションボタン2個を配置する(図1-8-2)。オプションボタンの一つ目(Option1)のValueプロパティをTrueに設定する。



Form3(置換ウィンドウ)のプログラムリスト

 キャンセルボタン(Command2)がクリックされたとき、フォームをアンロードして閉じるので、UnLoad Meだけでよい。

 Form3の置換は、次のような流れで処理をすることになる。

  1. 検索文字列 あり→次(2.)へ。 なし→何もしないで処理を抜け出す。
  2. 検索開始位置を計算する。(カーソル位置または、範囲選択の次の文字位置から)
  3. 検索結果 一致文字列 あり→範囲選択で検索した文字列を示し、次(4.)へ。 なし→なしのメッセージ(処理を抜け出す)。
  4. 置換の確認 する→次(5.)へ。 しない→何もしないで処理を抜け出す。
  5. 置換処理 SelTextプロパティに置換文字列を代入する(置換完了)。範囲選択する。


プログラムリスト

【Form3】
Dim pt As Integer        '検索文字列を発見した位置

Private Sub Command1_Click()
    Dim ret As VbMsgBoxResult

    If Len(Text1.Text) = 0 Then    '検索文字列なし
        Exit Sub    '何もしない
    End If
    KENSAKUMOJI = Text1.Text       '検索文字列をグローバル変数に代入
    If Option1.Value = True Then   'カーソル位置から検索
        'カーソル位置に選択されている文字長を加算
        '+1は0からカウントしているため
        pt = Form1.Text1.SelStart + Form1.Text1.SelLength + 1
    Else
        pt = 1        '先頭から
        Option1.Value = True  '2回目からはカーソル位置
    End If
    pt = InStr(pt, Form1.Text1.Text, Text1.Text)    '検索
    If pt = 0 Then                '見つからなかった
        MsgBox "検索文字列は見つかりませんでした。"
    Else                          '見つかった
        '範囲選択
        Form1.Text1.SelStart = pt - 1
        Form1.Text1.SelLength = Len(Text1.Text)
        '置き換え確認
        ret = MsgBox("文字列を置き換えますか?", vbYesNo, "置換確認")
        If ret = vbYes Then
            '置き換え・範囲選択
            Form1.Text1.SelText = Text2.Text
            Form1.Text1.SelStart = pt - 1
            Form1.Text1.SelLength = Len(Text2.Text)
        End If
    End If
End Sub

Private Sub Command2_Click()
    Unload Me
End Sub

Private Sub Text1_Change()    '検索文字列が変更されたとき
    pt = 1        '1文字目から検索
End Sub

 Form1のmnuReplace_Clickプロシージャは省略する。 (↓ヒント)

 Form3のウィンドウはForm1の置換(E)を選択したときに表示させる。
 Form1の置換(E)メニューを選択するとmnuReplace_Clickプロシージャが呼び出されるので、mnuReplace_Clickプロシージャには置換ウィンドウ(Form3)を呼び出す命令を書くだけで良い(検索を参照のこと)。


 (6) 置換機能の追加 U 前へ 目次へ 次へ 
Copyright © 2001,2002 Hiroshi Masuda 

 

 

inserted by FC2 system