「元に戻す」機能を実装するには

「元に戻す」機能を実装してみます。
キーワードは「EM_CANUNDO」と「EM_UNDO」メッセージです。
EM_UNDOメッセージは直前の操作を元に戻す処理を行います。
EM_CANUNDOメッセージは、このEM_UNDOが可能かどうかを調べます。

実行時の様子
'指定のウィンドウにメッセージを送る
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal MSG As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
'テキストボックスのメッセージ
Private Const EM_UNDO = &HC7                                        '直前の操作を元に戻す(UNDO機能)
Private Const EM_CANUNDO = &HC6                                     'EM_UNDOが処理可能かどうかを判断する
Private Const EM_EMPTYUNDOBUFFER = &HCD                             'UNDOフラグをクリアする

Private Sub Command1_Click() '元に戻す Call SendMessage(Me.Text1.hWnd, EM_UNDO, 0, 0) '「元に戻す」ができるかどうか調べる Call CanUndo End Sub
Private Sub Command2_Click(Index As Integer) '「元に戻す」機能のフラグをクリアする Call SendMessage(Me.Text1.hWnd, EM_EMPTYUNDOBUFFER, 0, 0) '「元に戻す」ができるかどうか調べる Call CanUndo End Sub
Private Sub Text1_Change() '「元に戻す」ができるかどうか調べる Call CanUndo End Sub
Private Function CanUndo() As Boolean '「元に戻す」ができるかどうか調べる If SendMessage(Me.Text1.hWnd, EM_CANUNDO, 0, 0) Then '使える Me.Command1.Enabled = True Me.Label2.Caption = "使えます" Else '使えない Me.Command1.Enabled = False Me.Label2.Caption = "使えません" End If End Function
ダウンロード