Article ID: 148833
Article Last Modified on 1/19/2007
APPLIES TO
- Microsoft Access 95 Standard Edition
- Microsoft Access 97 Standard Edition
This article was previously published under Q148833
SUMMARY
Advanced: Requires expert coding, interoperability, and multiuser skills.
This article shows you how to use a combination of Microsoft Windows application programming interface (API) calls and Visual Basic for Applications code to create "floating" pop-up menus.
This article assumes that you are familiar with Visual Basic for Applications and with creating Microsoft Access applications using the programming tools provided with Microsoft Access. For more information about Visual Basic for Applications, please refer to your version of the "Building Applications with Microsoft Access" manual.
MORE INFORMATION
To create a floating pop-up menu, follow these steps:
- Create a new form called Pop-up Menu Form.
Add a list box control called Menu to the form. Make the control large enough so that it is able to display each of the strings it will contain without displaying a scroll bar. Set the control's properties as follows:
Name: Menu RowSourceType: Value List RowSource: String1;String2;String3;String4 AfterUpdate: =ItemSelected([Menu]) Left: 0 in Top: 0 in FontName: System FontSize: 8 FontWeight: Bold
NOTE: Specify the menu strings in the RowSource property. Separate the string values with a semicolon (;).
Change the properties of the Pop-up Menu Form as follows:
Pop-up Menu Form --------------------------------------------------- ScrollBars: Neither RecordSelectors: No NavigationButtons No PopUp: Yes Width: <Width of the list box control> Section Properties ---------------------------------------------------- Height: <Height of the list box control>
- Save the form and close it.
Create a new module and type the following code in the Declarations section of the module.
' NOTE: Some of the following Windows API functions may be ' defined in an existing Microsoft Access library. If so, the new ' declarations would cause a duplication procedure name error. If ' this error occurs, remove the offending declare statement from ' your code or convert the declaration to a comment. Option Explicit Type POINTAPI x As Long y As Long End Type Global Const GWL_STYLE = (-16) Global Const WS_DLGFRAME = &H400000 Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) _ As Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _ (ByVal hwnd As Long, ByVal nIndex As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _ (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong _ As Long) As Long
Type the following functions:
Function ShowPopup () Dim coord As POINTAPI Dim attr& GetCursorPos coord DoCmd.OpenForm "Pop-up Menu Form" attr& = GetWindowLong(Forms![Pop-up Menu Form].hWnd, GWL_STYLE) attr& = SetWindowLong(Forms![Pop-up Menu Form].hWnd, GWL_STYLE, _ attr& And Not WS_DLGFRAME) DoCmd.MoveSize (coord.x * 14), (coord.y * 14), , 1100 End Function Function ItemSelected (WhichItem As String) DoCmd.Close MsgBox "The selected item was " & Trim(WhichItem) End Function
- Compile the module by clicking Compile Loaded Modules on the Run menu.
- Select the form in which you want the pop-up menu to appear. Open the form in Design view.
Select the event property that you want to use to activate the pop-up menu and specify the following function call:
=ShowPopup()
NOTE: To see how this works, you may want to specify the function for the DblClick event of a text box.
When you open the form and cause the event assigned in Step 9 to execute, the pop-up menu appears at the current mouse position. The menu remains on the screen until you select an item from the pop-up menu.
Keywords: kbhowto kbprogramming KB148833