Prikaz obvestila po dejanju z možnostjo razveljavitve
Uporabniku sporočite, da je dejanje uspelo – „Pravilo je izbrisano“ –, s kratkim obvestilom v spodnjem desnem kotu Accessovega okna, z gumbom Razveljavi, ki ga uporabnik doseže z miško, tipkovnico ali bralnikom zaslona, brez okna s sporočilom, ki ga je treba zapreti, in brez premika fokusa.
Zahteva WKL Forms Object Library 1.34 ali novejšo različico.
Pregled rešitve
WklToastje objekt, ne kontrolnik. Ustvarite ga zNewv modulu, ki izvede dejanje; noben obrazec ne potrebuje kontrolnika, obvestila pa lahko prikazuje tudi podobrazec.Showprikaže obvestilo: besedilo, vrsto (wtkSuccess,wtkWarning…), neobvezen naslov, napis dejanja inTag, ki se vrne z dejanjem (na primer ključ izbrisanega zapisa). Obvestilo se samo zapre po 4 sekundah, z dejanjem po 8 sekundah.- Dejanje: objekt na ravni modula obrazca deklarirajte z
WithEventsin obravnavajteAction(Id, Tag). Lahko pa vActionFunctionnavedete funkcijo (=ObnoviPravilo(17)), tako kot priOnActionvnosa v meniju Access: izvede se tudi, ko modul ne posluša več. - Tipkovnica: Ctrl+Shift+Z izvede dejanje najnovejšega obvestila; F6 premakne fokus v obvestilo, Esc ga zapre, F6 se vrne. Brez vidnega obvestila se nič ne spremeni.
Izvedba
Tabela iz primera, ustvarjena enkrat (proceduro zaženite iz okna Immediate):
Public Sub CreateNoteSample()
With CurrentDb
.Execute "CREATE TABLE tblPravila (ID LONG CONSTRAINT PK_Pravila PRIMARY KEY, Name TEXT(50), Izbrisano YESNO)"
.Execute "INSERT INTO tblPravila VALUES (1, 'Opomin po 30 dneh', False)"
.Execute "INSERT INTO tblPravila VALUES (2, 'Popust od 1.000 EUR', False)"
End With
End Sub
Neprekinjeni obrazec frmPravila nad SELECT * FROM tblPravila WHERE Not Izbrisano s poljem z
besedilom Name in gumbom cmdIzbrisi; brisanje zapis le označi (Izbrisano), zato ga
razveljavitev lahko vrne:
Option Compare Database
Option Explicit
Private WithEvents mToast As WklToast
Private Sub Form_Load()
Set mToast = New WklToast
End Sub
Private Sub cmdIzbrisi_Click()
Dim id As Long
Dim imePravila As String
If IsNull(Me!ID) Then Exit Sub
id = Me!ID
imePravila = Nz(Me!Name, "") ' read before Requery: afterwards the form stands on another record
CurrentDb.Execute "UPDATE tblPravila SET Izbrisano = True WHERE ID = " & id, dbFailOnError
Me.Requery
mToast.Show "Pravilo """ & imePravila & """ je izbrisano.", wtkSuccess, , "Razveljavi", id
End Sub
Private Sub mToast_Action(ByVal Id As Long, ByVal Tag As Variant)
CurrentDb.Execute "UPDATE tblPravila SET Izbrisano = False WHERE ID = " & Tag, dbFailOnError
Me.Requery
End Sub
Enako brez dogodkovne procedure, iz standardnega modula, s funkcijo, ki izvede razveljavitev:
Public Sub IzbrisiPravilo(ByVal id As Long)
Dim note As New WklToast
CurrentDb.Execute "UPDATE tblPravila SET Izbrisano = True WHERE ID = " & id, dbFailOnError
note.Show "Pravilo je izbrisano.", wtkSuccess, , "Razveljavi", , , , "=ObnoviPravilo(" & id & ")"
End Sub
Public Function ObnoviPravilo(ByVal id As Long) As Boolean
CurrentDb.Execute "UPDATE tblPravila SET Izbrisano = False WHERE ID = " & id, dbFailOnError
If CurrentProject.AllForms("frmPravila").IsLoaded Then Forms!frmPravila.Requery
ObnoviPravilo = True
End Function
Sporočilo po shranjevanju, v kotu obrazca namesto Accessovega okna:
Private Sub Form_AfterUpdate()
mToast.Show "Shranjeno.", wtkSuccess, , , , 2000, Me
End Sub
Opombe
- Lokalne spremenljivke ni mogoče deklarirati z
WithEvents; obvestilo, ki ga prikaže lokalni objekt, sproža dogodke v prazno. Tam uporabiteActionFunctionali objekt hranite na ravni modula. - Obvestilo hrani kopijo
Tag. Posredujte ključ, ne nabora zapisov ali obrazca: obvestilo jih lahko preživi. - Obvestila, prikazana z
Form, se zaprejo, ko se zapre ta obrazec (ClosedzwtrOwnerClosed); obvestila v Accessovem oknu ostanejo, dokler jim ne poteče čas, tudi ko se zapre obrazec, ki jih je prikazal. Count,CloseinCloseAlldelujejo na vseh obvestilih Accessove seje, ne glede na to, kateri objekt jih je prikazal;CloseAlluporabite pred dolgotrajnim postopkom, ki naj se začne s praznim kotom.- Vidna so največ tri obvestila; nadaljnja čakajo. Ne prikazujte obvestila za vsak zapis v zanki – prikažite eno obvestilo s številom („Izbrisanih pravil: 12“).
- Napake in odločitve, ki zahtevajo odgovor, sodijo v okno s sporočilom ali pogovorno okno, ne v obvestilo: obvestilo izgine.
Sorodne teme
- Referenčni priročnik API (v angleščini): WklToast – člani, dogodki, vrste in razlogi za zaprtje.
- Referenčni priročnik API (v angleščini): WklDockLayout – F6 med območji, ki se jim vidno obvestilo pridruži kot prvi postanek.