实现撤销功能的时候,有一个大致的思想是,先写:
1.一个保存的方法
2.一个读取的方法
让后再在需要撤销和恢复的地方,使用这两个方法,当然数据是存储在缓存中去的;
事先定义:
'撤消恢复保存
Public Const RedoMax = 100
Public LastRedo(RedoMax + 1) As String, LastRedoMode(RedoMax / 2) As Boolean, CurrentP As Integer, SavedMax As Integer
保存方法:
' 撤销保存
Public Sub RedoSave(ByVal s1 As String)
Dim i1 As Integer
' 保存处理:已达上限和未达上限
If pTFile = RedoMax Then
For i1 = 1 To RedoMax - 1
LastRedo(i1) = LastRedo(i1 + 1)
Next
LastRedo(RedoMax) = s1
CurrentP = RedoMax
Else
CurrentP = CurrentP + 1
LastRedo(CurrentP) = s1
End If
'最大保存量
If SavedMax < CurrentP Then
SavedMax = CurrentP
ElseIf SavedMax > CurrentP Then
For i1 = CurrentP + 1 To RedoMax
LastRedo(i1) = ""
Next
SavedMax = CurrentP
End If
End Sub
读取方法:
Public Sub RedoRead(ByRef s1 As String, ByVal RedoMode As Integer)
If RedoMode = 1 Then
If CurrentP < RedoMax Then
CurrentP = CurrentP + 1 'Redo
Else
Exit Sub
End If
ElseIf RedoMode = 2 Then
If CurrentP > 1 Then
CurrentP = CurrentP - 1 'Undo
Else
Exit Sub
End If
End If
If CurrentP Mod 2 = 0 Then
LastRedoMode(CurrentP / 2) = False
ElseIf CurrentP Mod 2 = 1 Then
LastRedoMode(CurrentP / 2) = True
End If
If LastRedoMode(CurrentP / 2) = False AndAlso RedoMode = 2 Then
CurrentP = CurrentP - 1 ' CurrentP减1处理
s1 = LastRedo(CurrentP) ' 减1恢复
ElseIf LastRedoMode(CurrentP / 2) = True AndAlso RedoMode = 1 Then
CurrentP = CurrentP + 1 ' CurrentP加1处理
s1 = LastRedo(CurrentP) ' 加1恢复
Else
s1 = LastRedo(CurrentP) ' 正常恢复
End If
End Sub
基于上面的两个方法,当在进行编辑操作的时候,调用保存的方法;
在进行恢复的时候,调用读取的方法;
通过以上两个方法,就可以进行撤销和恢复了。