Hur gör man en funktion så man kan ångra det man gjort i en RichTextBox? Okeej jag kan inte någon snabb funktion för att göra det men här Dessa api anrop kan vara till hjälp.ctrl + z
Den heter Text1 om det är till någon hjälp =)Sv: ctrl + z
är mitt bidrag som krånglar väldigt, och med ett svagt försök till
att kunna hantera backspace som misslyckades... jag har tyvärr
inte tid att ändra och försöka få det att funka men du kan ju använda
detta som grund och försöka experimentera med själv!
Private Sub Command1_Click()
On Error Resume Next
If mode = 1 Then Text1.Text = Mid$(Text1.Text, 1, Len(Text1.Text) - redoChrs): mode = 0
If mode = 2 Then Text1.Text = Text1.Text & redoWord: mode = 0
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
On Error Resume Next
Dim newTime As Long
newTime = Timer
If KeyAscii > 32 And KeyAscii < 257 Then
mode = 1
If newTime < 2 + pressTime Then redoChrs = redoChrs + 1: pressTime = newTime Else redoChrs = 0: pressTime = newTime
tmpText1 = Text1.Text
End If
GoTo 20
If KeyAscii = 8 Then 'backspace
If tmpText1 = "" Then GoTo 10
If newTime > 1 + pressTime Then
redoChrs = 0
mode = 2
redoWord = redoWord + Mid$(tmpText1, Len(tmpText1) - 1, 1)
pressTime = newTime
Else
redoChrs = 0
mode = 2
redoWord = Mid$(tmpText1, Len(tmpText1) - 1, 1)
pressTime = newTime
End If
10
End If
20
End Sub
och lägg denna i en modul:
Global pressTime As Long, redoWord As String, redoChrs As Integer, mode As Integer, tmpText1 As String
ok, det är buggar i den jag vet: 2 kända du kan försöka fixa:
1: om du skriver in "Jag heter john alfredsson" utan att hacka
och tar Ångra så stannar "Jag" kvar....
2: backspace, klistra in, delete fungerar inte!
Exemplet sparar allt du skrivit under de senaste 2 sekunderna,
och när du ångrar tar den bort det! Så om du skriver något, tar
en paus på 3 sek och fortsätter kommer bara det som är efter
pausen försvinna vid ångra!
att få denna kod att fungera blir nog däremot ett litet helvete...
du kan ju kolla om det finns nåt api för det...
mvh
JohnSv: ctrl + z
<code>
Option Explicit
Private Const EM_CANUNDO As Long = &HC6&
Private Const EM_UNDO As Long = &HC7&
Private Const EM_EMPTYUNDOBUFFER As Long = &HCD&
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Sub CMDUndo(TextBox As Object)
If TypeOf TextBox Is TextBox Or TypeOf TextBox Is RichTextBox Then
SendMessage TextBox.hwnd, EM_UNDO, 0&, ByVal 0&
End If
End Sub
Public Function CMDCanUndo(TextBox As Object) As Boolean
If TypeOf TextBox Is TextBox Or TypeOf TextBox Is RichTextBox Then
CMDCanUndo = SendMessage(TextBox.hwnd, EM_CANUNDO, 0&, ByVal 0&)
End If
End Function
Public Sub CMDEmptyUndoBuffer(TextBox As Object)
If TypeOf TextBox Is TextBox Or TypeOf TextBox Is RichTextBox Then
SendMessage TextBox.hwnd, EM_EMPTYUNDOBUFFER, 0&, ByVal 0&
End If
End Sub
</code>