Option Explicit
Dim Cmds As New Collection
Dim LastCmd As Integer
' Addera ett kommando till listan
Private Sub AddCommand(cmd As Object)
' ta bort alla undo kommando.
Do While Cmds.Count > LastCmd
Cmds.Remove Cmds.Count
Loop
' Addera det nya kommandot
Cmds.Add cmd
LastCmd = Cmds.Count
End Sub
' Redo ett kommando
Private Sub Redo()
If LastCmd >= Cmds.Count Then Exit Sub
LastCmd = LastCmd + 1
Cmds.Item(LastCmd).Apply
End Sub
' Undo ett kommando
Private Sub Undo()
If LastCmd < 1 Then Exit Sub
Cmds.Item(LastCmd).Undo
LastCmd = LastCmd - 1
End Sub
' hantering om du drar i fönstret
Private Sub Form_Resize()
If WindowState = vbMinimized Then Exit Sub
Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
' hantering för tangenttryckningar
Private Sub Text1_KeyPress(KeyAscii As Integer)
Const KeyTilda = 126 ' För ~ tecknet
Dim cmd As TextCmd
If KeyAscii = 26 Then ' ^Z
Undo
ElseIf KeyAscii = 25 Then ' ^Y
Redo
ElseIf KeyAscii >= vbKeySpace And _
KeyAscii <= KeyTilda _
Then
' Andra tangenter:
' Addera det nya kommandot till Cmds.
Set cmd = New TextCmd
AddCommand cmd
' Ge kommandot informationen som behövs
cmd.Initialize Text1, Chr$(KeyAscii)
' Utför kommandot
cmd.Apply
End If
' Vi har hanterat tangenttrycket nu,
' rensa det från bufferten
KeyAscii = 0
End Sub