§1 テキストエディタの制作 VB6
 (4) クリップボードの追加 W 前へ 目次へ 次へ 

 4. 問題点の改良

問題点1の解決
 先ほどの問題点1(範囲選択されていないときは切り取りやコピーが選択できないようにグレーアウトにする。)を考えてみる。
 範囲選択されていないときに切り取りやコピーのメニューと次に追加する削除メニューが選択できないようにするには、編集をクリックしてプルダウンメニューが表示される前に範囲選択されているかどうかを判定する。判定の結果、範囲選択されていないときは、切り取り、コピーと削除メニューのEnabledプロパティをFalseにする。
 編集メニューをクリックすると、プルダウンメニューが表示される前にmnuEdit_Clickプロシージャが呼び出される。このmnuEdit_Clickプロシージャに範囲選択されているかどうかの判定処理を入れる。

Private Sub mnuEdit_Click()
    If Text1.SelLength = 0 Then     '範囲選択なし−切り取り、コピー、削除は使用不可
        mnuCut.Enabled = False
        mnuCopy.Enabled = False
        mnuDel.Enabled = False
    Else                            '範囲選択あり
        mnuCut.Enabled = True
        mnuCopy.Enabled = True
        mnuDel.Enabled = True
    End If
End Sub


問題点2とその解決
 クリップボードにテキストデータがないときも、貼り付けメニューが選択できてしまう。貼り付けメニューを選択してもクリップボードにテキストデータがないので何も起こらない。

 クリップボードにテキストデータのある/なしで、貼り付けメニューをコピーメニューなどと同じように選択できる/できないようにする。
 クリップボードにデータがあるかどうかを判定するには、Clipboard.GetFormatメソッドを使用する。引数にデータ形式の定数を与えると、データのある/なしがTrue, Falseで返却される。テキストの場合、引数はVbCFTextである(そのほかの引数はヘルプを参照)。


・プログラムリスト

 問題点2を解決するため、クリップボードにデータがあるかどうかを判定するIF文を編集メニューをクリックしたときに呼び出されるmnuEdit_Clickプロシージャに追加する。

Private Sub mnuEdit_Click()
    If Text1.SelLength = 0 Then     '範囲選択なし−切り取り、コピー、削除は使用不可
        mnuCut.Enabled = False
        mnuCopy.Enabled = False
        mnuDel.Enabled = False
    Else                            '範囲選択あり
        mnuCut.Enabled = True
        mnuCopy.Enabled = True
        mnuDel.Enabled = True
    End If
    If Clipboard.GetFormat(vbCFText) = True Then    'クリップボードにテキストあり
        mnuPaste.Enabled = True
    Else                                            'クリップボードにテキストなし
        mnuPaste.Enabled = False
    End If
End Sub


 (4) クリップボードの追加 W 前へ 目次へ 次へ 
Copyright © 2001,2002 Hiroshi Masuda 

 

 

inserted by FC2 system