|
Stosowanie funkcji UNDO i REDO np. w TextBoxie |
|
|
|
Napisał Administrator
|
|
sobota, 21 styczeń 2006 |
Użycie funkcji UNDO z TextBoxem
Źródło - net
VB 4.0 +
Większość "windowsowych" aplikacji zawiera menu Edit(Edycja), w którym można
wybrać funkcję UNDO usuwającą ostatnio wykonaną operację.
Ten tekst wyjaśni jak dodać taką funkcję do własnej aplikacji napisanej w VB.
Używając SendMessage można sprawić, że modyfikowany przez Ciebie tekst
będzie zapisywany w zewnętrznym buforze.
Dzieki funkcji API - SendMessage - można pozwolić użytkownikowi odzyskać
zmodyfikowany tekst.
Załóżmy, że wpisałeś jakiś tekst w TextBoxie. Teraz chcesz usunąć jego część.
Aby to uczynić zaznaczasz tekst i usuwasz go naciskając DEL.
Tekst który zaznaczyłeś zostanie skasowany. Możesz udzyskać ten tekst używając VB
poprzez wysłanie komunikatu EM_UNDO do Windows.
Komunikar EM_UNDO informuje system operacyjny. że chcesz odzyskać tekst przed zmianami
które wprowadziłeś do pola edycji - w tym przypadku TextBoxa.ox.
Po wysłaniu komunikatu EM_UNDO , oryginalna zawartość TextBoxa zostanie przywrócona.
Zmodyfikowany tekst nadal znajduje się w buforze windows.
Dlatego w swojej aplikacji, powinieneś wysłać komunikat EM_EMPTYUNDOBUFFER
w celu usunięcia zawartości tego buffora. Komunikat EM_EMPTYUNDOBUFFER
sprawia, że nie będziesz mógł cofnąć ostatniej zmiany dokonanej w TextBoxie.
Tak jak pokazano w przykładowym programie niżej, możesz wykryć, czy operacja UNDO może
być aktualnie wykonana. Komunikat EM_CANUNDO zwraca całkowitą wartość ustawioną na
True jeżeli jakiś tekst znajduje się w buforze undo, albo zero, jeśli nie ma żadnego tekstu.
Możesz wykonać operację undo tylko wtedy, jeżeli zawartość TExtBoxa została wcześniej
zmodyfikowana i informacje sprzed modyfikacji znajdują się w buforze undo.r.
Przykładowy program.
Demonstruje jak dodać UNDO i REDO do swojej aplikacji.
1. Utwórz nowy projekt. Form1 utworzona jest domyślnie.
2. Dodaj poniższe stałe i deklaracje do General Declarations (Form1)
(poniższa deklaracja musi się znajdować w jednej lini)
Private Declare Function SendMessage Lib "User" (ByVal hWnd As Integer, _
ByVal wMsg As Integer, ByVal wParam As Integer, 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
3. Dodaj Text Box do Form1. Ustaw właściwość MultiLine na True.
4. Dodaj Command Button do Form1. Ustaw Caption na "Undo".
5. Dodaj poniższy kod do procedury Click 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
6. Dodaj kolejny Command Button do Form1. Ustaw Caption na "Redo".
7. Dodaj poniższy kod do procedury Click Command2:
Private Sub Command2_Click()
Dim OK As Long
OK = SendMessage(Text1.hWnd, EM_CANUNDO, 0, 0&)
If OK = 0 Then
MsgBox "Nie można cofnąć zmian, których dokonałeś.", 16, "Error"
End If
OK = SendMessage(Text1.hWnd, EM_UNDO, 0, 0&)
End Sub
Aby dodać komentarz zaloguj się. Jeśli nie masz konta, załóż je sobie. Tylko zarejestrowani użytkownicy mogą pisać komentarze. Powered by AkoComment 2.0! |