Pagina's in dit artikel
-
Klasse Modules (1)
-
Klasse Modules (2)
-
Implementatie
-
Conclusie
Klasse modules (2)
clsExecAndUndo
OK, nog een lang stuk programma code (de uitleg volgt eronder)...
'=======================================
' Module : clsExecAndUndo
' Company : JKP Application Development Services (c) 2005
' Author : Jan Karel Pieterse
' Created : 31-8-2005
' Purpose : Class module, stores the objects processed and
'
handles the exection of the commands
' Copyright : This code is free for you to use for applications
'
for personal use.
'
It is not allowed to use this for a commercial program,
'
unless you have my consent.
'
If you want to include this code in freeware, make sure you add :
'-------------------------------------------------------------------------
' This code originates from : Jan Karel Pieterse
' Company
: JKP Application Development Services (c) 2005
'
jkp-ads.com
'-------------------------------------------------------------------------
'=====================================
Option Explicit
Private mcolUndoObjects As Collection
Private mUndoObject As clsUndoObject
Public Function AddAndProcessObject(oObj As Object, sProperty As String,
vValue As Variant) As Boolean
Set mUndoObject = New clsUndoObject
With mUndoObject
Set .ObjectToChange = oObj
.NewValue = vValue
.PropertyToChange = sProperty
mcolUndoObjects.Add mUndoObject
If .ExecuteCommand = True Then
AddAndProcessObject = True
Else
AddAndProcessObject = False
End If
End With
End Function
Private Sub Class_Initialize()
Set mcolUndoObjects = New Collection
End Sub
Private Sub Class_Terminate()
ResetUndo
End Sub
Public Sub ResetUndo()
While mcolUndoObjects.Count > 0
mcolUndoObjects.Remove (1)
Wend
Set mUndoObject = Nothing
End Sub
Public Sub UndoAll()
Dim lCount As Long
' On Error Resume Next
For lCount = mcolUndoObjects.Count To 1 Step -1
Set mUndoObject =
mcolUndoObjects(lCount)
mUndoObject.UndoChange
Set mUndoObject = Nothing
Next
ResetUndo
End Sub
Public Sub UndoLast()
Dim lCount As Long
' On Error Resume Next
If mcolUndoObjects.Count >= 1 Then
Set mUndoObject =
mcolUndoObjects(mcolUndoObjects.Count)
mUndoObject.UndoChange
mcolUndoObjects.Remove
mcolUndoObjects.Count
Set mUndoObject = Nothing
Else
ResetUndo
End If
End Sub
Public Function UndoCount() As Long
UndoCount = mcolUndoObjects.Count
End Function
Een korte uitleg van de hierboven getoonde functies en routines:
AddAndProcessObject
Dit is de ingangsroutine van deze klasse. Het ontvangt
(als argumenten) het object en de eigenschap die moet
worden gewijzigd, alsmede de gewenste nieuwe waarde van
de eigenschap. De routine maakt een nieuwe instantie van
de klasse clsExecAndUndo voor dit object en voegt deze
instantie toe aan een collectie, zodat deze instanties
later weer op te vragen zijn om de wijzigingen ongedaan
te kunnen maken. De routine roept vervolgens andere
routines (in clsExecAndUndo) aan om de vorige waarde te
kunnen opslaan en vervolgens de wijziging te kunnen
uitvoeren.
ResetUndo
Verwijdert de undo stack van de utility (wordt
uitgevoerd wanneer de klasse wordt vernietigd)
UndoAll
Methode die alle uitgevoerde wijzigingen die in de
collectie van gewijzigde objecten is opgeslagen ongedaan
maakt. Dit is de procedure die wordt aangeroepen wanneer
control-z wordt gekozen of Bewerken, ongedaan maken. De
procedure roept voor de hele collectie van gewijzigde
objecten (elke instantie van clsExecAndUndo) de routine
"UndoChange" aan uit die klasse module.
UndoLast
Maakt slechts de laatste actie ongedaan. Deze routine
zal aan een sneltoets of menuknop kunnen worden
toegekend via een sub in een normale module.
UndoCount
Geeft het aantal objecten dat gewijzigd is.
Hiermee is de beschrijving van de twee centrale klasse modules van
deze techniek compleet. De volgende pagina beschrijft hoe deze moeten
worden geïmplementeerd.