ここまでやる必要はないかも…。
メモ帳の編集機能、元に戻す、切り取り、コピー、貼り付け、すべて選択を実装させちゃいましょう。メモ帳にありませんが、削除の処理もついでに付けておきます。一気に、関数を書きます。
Private Const EM_CANUNDO = &HC6 '元に戻せるか(Undoできるか)調べる
Private Const EM_UNDO = &HC7 '元に戻す
Private Const WM_CUT = &H300 '切り取り
Private Const WM_COPY = &H301 'コピー
Private Const WM_PASTE = &H302 '貼り付け
Private Const WM_CLEAR = &H303 '削除
'----------------------------------------------------------------
' 関数名 : CanUndoOrNot
' 機能 : 元に戻せるか(Undoできるか)調べる
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : 0…元に戻せない 1…元に戻せる
'----------------------------------------------------------------
Public Function CanUndoOrNot(ByVal hEditbox As Long) As Long
CanUndoOrNot = SendMessage(hEditbox, EM_CANUNDO, 0&, ByVal 0&)
End Function
'----------------------------------------------------------------
' 関数名 : ExecuteUndo
' 機能 : メモ帳編集作業 - 元に戻す
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : なし
'----------------------------------------------------------------
Public Sub ExecuteUndo(ByVal hEditbox As Long)
Call SendMessage(hEditbox, EM_UNDO, 0&, ByVal 0&)
End Sub
'----------------------------------------------------------------
' 関数名 : ExecuteCut
' 機能 : メモ帳編集作業 - 切り取り
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : なし
'----------------------------------------------------------------
Public Sub ExecuteCut(ByVal hText As Long)
Call SendMessage(hText, WM_CUT, 0&, ByVal 0&)
End Sub
'----------------------------------------------------------------
' 関数名 : ExecuteCopy
' 機能 : メモ帳編集作業 - コピー
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : なし
'----------------------------------------------------------------
Public Sub ExecuteCopy(ByVal hEditbox As Long)
Call SendMessage(hEditbox, WM_COPY, 0&, ByVal 0&)
End Sub
'----------------------------------------------------------------
' 関数名 : ExecutePaste
' 機能 : メモ帳編集作業 - 貼り付け
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : なし
'----------------------------------------------------------------
Public Sub ExecutePaste(ByVal hEditbox As Long)
Call SendMessage(hEditbox, WM_PASTE, 0&, ByVal 0&)
End Sub
'----------------------------------------------------------------
' 関数名 : ExecuteClear
' 機能 : メモ帳編集作業 - 削除
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : なし
'----------------------------------------------------------------
Public Sub ExecuteClear(ByVal hEditbox As Long)
Call SendMessage(hEditbox, WM_CLEAR, 0&, ByVal 0&)
End Sub
'----------------------------------------------------------------
' 関数名 : ExecuteAllSelect
' 機能 : メモ帳編集作業 - すべて選択
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : なし
'----------------------------------------------------------------
Public Sub ExecuteAllSelect(ByVal hEditbox As Long)
Call SendMessage(hEditbox, EM_SETSEL, 0, ByVal GetEditboxLenB(hEditbox))
End Sub
元に戻すは、直接 ExecuteUndo を呼んでもできますが、一度、 CanUndoOrNot を呼んで元に戻せるか調べてから ExecuteUndo を呼ぶ方が処理的には正しいと思います。その場合は、以下のようしてください。
'元に戻す
If CanUndoOrNot(hEditbox) Then Call ExecuteUndo(hEditbox)
削除は選択されている文字列を削除するのであり、無条件にメモ帳の文字列を削除するのではないので注意してください。メモ帳の文字列をすべて削除する方法は、こちらのページで ClearNotepad という関数を紹介していますので参考にしてください。ここでのページで紹介した関数を組み合わせて、すべて削除ならば、
'すべて削除する
Call ExecuteAllSelect(hEditbox)
Call ExecuteClear(hEditbox)
で可能です。こちらの方で削除すると、 ExecuteUndo 関数で元に戻せるのでテキスト編集機能としてはよろしいんじゃないでしょうか。
|