Trucos Implementar deshacer en un textbox

Cuando se modifica el contenido de una caja de texto, Windows mantiene un buffer con los datos añadidos o borrados. Se puede utilizar la función de la API SendMessage para recuperar el texto modificado.
El mensaje EM_UNDO permite recuperar el texto modificado en una caja de texto.
El mensaje EM_EMPTYUNDOBUFFER vacía el buffer de "Deshacer".
El mensaje EM_CANUNDO devuelve True si hay texto en el buffer de "Deshacer".

A continuación, se muestra un ejemplo:

    - Cree un nuevo proyecto en Visual Basic. Form1 es creado por
      defecto.
    - Añada el siguiente código a la sección "Declaraciones" de Form1:
         Private Declare Function SendMessageBynum Lib "user32" _
                 Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
                 ByVal wParam As Long, ByVal lParam As Long) As Long
         Const WM_USER = &H400
         Const EM_CANUNDO = WM_USER + 22
         Const EM_EMPTYUNDOBUFFER = WM_USER + 29
         Const EM_UNDO = WM_USER + 23
    - Añada una caja de texto a Form1. Text1 es creado por defecto.
      Establezca su propiedad MultiLine a True.
    - Añada un botón a Form1. Command1 es creado por defecto.
      Establezca su propiedad Caption a "Undo".
    - Añada el siguiente código al evento Click de Command1:
         Private Sub Command1_Click()
            Dim OK As Long
            OK = SendMessage(Text1.hWnd, EM_UNDO, 0, 0&)
            OK = SendMessage(Text1.hWnd, EM_EMPTYUNDOBUFFER, 0, 0&)
         End Sub
    - Añada un segundo botón a Form1. Command2 es creado por defecto.
      Establezca su propiedad Caption a "Redo".
    - Añada el siguiente código al evento Click de Command2:
         Private Sub Command2_Click()
            Dim OK As Long
            OK = SendMessage(Text1.hWnd, EM_CANUNDO, 0, 0&)
            If OK = 0 Then
               MsgBox "No puedo deshacer los cambios", 16, "Error"
            End If
            OK = SendMessage(Text1.hWnd, EM_UNDO, 0, 0&)
            End Sub



Trucos Trucos

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com