Color scheme: Light
You are here: start » sl » Dokumentacija » Orodja za Microsoft Access » WKL Forms Object Library » how-to » Prikaz obvestila po dejanju z možnostjo razveljavitve

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

  • WklToast je objekt, ne kontrolnik. Ustvarite ga z New v modulu, ki izvede dejanje; noben obrazec ne potrebuje kontrolnika, obvestila pa lahko prikazuje tudi podobrazec.
  • Show prikaže obvestilo: besedilo, vrsto (wtkSuccess, wtkWarning …), neobvezen naslov, napis dejanja in Tag, 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 WithEvents in obravnavajte Action(Id, Tag). Lahko pa v ActionFunction navedete funkcijo (=ObnoviPravilo(17)), tako kot pri OnAction vnosa 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 uporabite ActionFunction ali 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 (Closed z wtrOwnerClosed); obvestila v Accessovem oknu ostanejo, dokler jim ne poteče čas, tudi ko se zapre obrazec, ki jih je prikazal.
  • Count, Close in CloseAll delujejo na vseh obvestilih Accessove seje, ne glede na to, kateri objekt jih je prikazal; CloseAll uporabite 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

sl/wiki/msaccess/comctl/how-to/show-a-note-after-an-action.txt · Last modified: by Wolfgang van der Stille