Uporaba Accessove vrstice priročnega menija v mreži
Kontrolniku WklGrid, WklTreeList ali WklGantt dajte v priročnem meniju (desni klik) ukaze
svoje aplikacije – „Označi kot opravljeno“, „Natisni dobavnico“ – brez modula obrazca, tako kot
jih Accessov obrazec dobi iz svoje lastnosti Vrstica priročnega menija.
Zahteva WKL Forms Object Library 1.28 ali novejšo različico.
Pregled rešitve
Accessovi obrazci vzamejo priročni meni iz lastnosti ShortcutMenuBar: imena pojavne ukazne vrstice,
katere vnosi pokličejo funkcijo (=Function()) ali makro. Access to lastnost ponuja le za svoje
kontrolnike. Kontrolniki WKL imajo lastnost z enakim imenom: vnosi imenovane vrstice se prikažejo v
priročnem meniju kontrolnika, privzeto za vgrajenimi vnosi (MenuPlacement). Ko uporabnik izbere
vnos, kontrolnik izvede dejanje vnosa tako kot Office; funkcija najde kontrolnik prek
Screen.ActiveControl, zapis, nad katerim je bil meni odprt, pa prek ContextKey
(ContextColumn za stolpec, ContextView za podrobni pogled).
Nič od tega ne potrebuje modula obrazca: vrstico ob zagonu ustvari standardni modul, lastnost pa se nastavi v pogledu načrta.
Izvedba
Vrstico ustvarite ob zagonu aplikacije v standardnem modulu, funkcijo pa pokličite iz makra AutoExec (dejanje RunCode,
CreateOrderMenu()):Public Function CreateOrderMenu() On Error Resume Next CommandBars("mnuNarocila").Delete On Error GoTo 0 With CommandBars.Add("mnuNarocila", 5, False, True) ' 5 = msoBarPopup, temporary With .Controls.Add(1) ' 1 = msoControlButton .Caption = "Označi kot &opravljeno" .OnAction = "=MarkOrderDone()" End With With .Controls.Add(1) .Caption = "Natisni &dobavnico" .OnAction = "=PrintDeliveryNote()" .BeginGroup = True End With End With End FunctionV istem standardnem modulu napišite funkcije, ki jih kličejo vnosi:
Public Function MarkOrderDone() Dim grid As Object Set grid = Screen.ActiveControl.Object If IsNull(grid.ContextKey) Then Exit Function ' opened on a group row CurrentDb.Execute "UPDATE tblNarocila SET Opravljeno = True WHERE NarociloID = " & grid.ContextKey, dbFailOnError grid.Requery End Function Public Function PrintDeliveryNote() DoCmd.OpenReport "rptDobavnica", acViewPreview, , "NarociloID = " & Screen.ActiveControl.Object.ContextKey End Function- Odprite obrazec v pogledu načrta, izberite mrežo in v
ShortcutMenuBarvnesitemnuNarocila(list z lastnostmi, zavihek Drugo, ali stran oblikovalnika Vedenje, razdelek Priročni meni). ZMenuPlacementizberite, ali so vnosi za vgrajenimi (privzeto), pred njimi, sami ali sploh ne.
Opombe
- Vrstica se prebere ob vsakem odprtju menija. Vnos spremenite s kodo –
CommandBars("mnuNarocila").Controls(2).Enabled = False–, naslednji meni pa spremembo prikaže. - Prikazani so vidni gumbi in podmeniji vrstice z napisom,
ShortcutText, omogočenostjo, kljukico (State) in ločilom (BeginGroup). Kombinirana polja, polja za urejanje in slike vrstice niso prikazani. - Podrobni pogledi
WklGridprikazujejo enake vnose.ContextKeytedaj vsebuje ključ podrobnega zapisa,ContextViewpa ime podrobnega pogleda; oboje preberite iz glavne mreže (Screen.ActiveControlje glavna mreža). - Vnos, katerega funkcija ne obstaja, prikaže Accessovo sporočilo, da izraz vsebuje ime funkcije, ki je ni mogoče najti, tako kot pri vnosu Accessove vrstice; preverite ime v
OnAction. Napaka, ki je funkcija ne obravnava, prikaže pogovorno okno napake med izvajanjem VBA, zato funkciji dodajte obravnavo napak. - Napisi vnosov so vaša besedila; vgrajeni vnosi sledijo jeziku komponent.
- Z modulom obrazca lahko meni prilagodite za vsak zapis v
BeforeContextMenuali namesto vrstice dodate elemente zAddMenuItem(Dodajanje elementov v priročni meni).