§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 |