Microsoft KB Archive/101325

= ACC: How to Float MS Access Windows On Top of Other Windows =

Article ID: 101325

Article Last Modified on 1/18/2007

-

APPLIES TO


 * Microsoft Access 1.0 Standard Edition
 * Microsoft Access 1.1 Standard Edition
 * Microsoft Access 2.0 Standard Edition
 * Microsoft Access 95 Standard Edition
 * Microsoft Access 97 Standard Edition

-



This article was previously published under Q101325





SUMMARY
Advanced: Requires expert coding, interoperability, and multiuser skills.

With the Microsoft Access Popup property, you can create forms that "float" (that is, they stay on top of other forms) within Microsoft Access. However, if you set focus to a non-Microsoft Access application, the Microsoft Access popup forms are overlapped. If you want your Microsoft Access popup forms to stay on top of other non-Microsoft Access windows, you must call the Windows application programming interface (API) subroutine SetWindowPos.

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.

NOTE: Visual Basic for Applications is called Access Basic in Microsoft Access versions 1.x and 2.0. For more information about Access Basic, please refer to the "Introduction to Programming" manual in Microsoft Access version 1.x or the "Building Applications" manual in Microsoft Access version 2.0.



MORE INFORMATION
To make your form stay on top of non-Microsoft Access forms, call the following function from an event such as your form's OnOpen property.

NOTE: In the following sample code, an underscore (_) at the end of a line is used as a line-continuation character. Remove the underscore from the end of the line when re-creating this code in Access Basic.

You may have some Windows API functions defined in an existing Microsoft Access library; therefore, your declarations may be duplicates. If you receive the duplicate procedure name error message, remove or comment out the declarations statement in your code.

  Add the following API declarations to your global declarations section:

For Microsoft Access 7.0 and 97: Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _                                      ByVal hWndInsertAfter As Long, _                                       ByVal X As Long, _                                       ByVal y As Long, _                                       ByVal cx As Long, _                                       ByVal cy As Long, _                                       ByVal wFlags As Long) As Long For Microsoft Access 1.x and 2.0: Declare Sub SetWindowPos Lib "User" (ByVal hwnd%, _                                    ByVal hWndInsertAfter%, _                                     ByVal X%, ByVal Y%, ByVal cx%, _                                     ByVal cy%, ByVal wFlags%)   Add the following Constants to your global Declarations section: Global Const HWND_TOPMOST = -1 Global Const SWP_NOSIZE = &H1 Global Const SWP_NOMOVE = &H2   Create the following Function: Function TopMost (F As Form) Call SetWindowPos(f.hwnd, HWND_TOPMOST, 0, 0, 0, 0, _                          SWP_NOMOVE Or SWP_NOSIZE) End Function  Create a form and set the following properties.

In Microsoft Access versions 1.x, 2.0, and 7.0:

Popup: Yes

OnOpen: =TopMost(Form)

In Microsoft Access 97:

Popup: Yes

OnTimer: =TopMost(Form)

TimerInterval: 50

 Close the form to save any changes; changing the Popup property in Design view has no effect unless you reopen your form. Open the form. When you switch to any other application, this form should stay on top of the other application.</li></ol>

To Float Any Other Application
To float any other application on top of another application, such as floating the Windows Calculator, you can use SetWindowsPos along with the FindWindow Windows API function as demonstrated below.

NOTE: In the following sample code, an underscore (_) at the end of a line is used as a line-continuation character. Remove the underscore from the end of the line when re-creating this code in Access Basic.

<ol>  Add the following API declarations to your global declarations section:

For Microsoft Access 7.0 and 97: Declare Function FindWindow% Lib "user32" Alias "FindWindowA" _ (ByVal lpclassname As Any, _                                          ByVal lpCaption As Any)

Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _                                      ByVal hWndInsertAfter As Long, _                                       ByVal X As Long, _                                       ByVal y As Long, _                                       ByVal cx As Long, _                                       ByVal cy As Long, _                                       ByVal wFlags As Long) As Long For Microsoft Access 1.x and 2.0: Declare Function FindWindow% Lib "user" (ByVal lpclassname As Any, _                                                 ByVal lpCaption As Any)

Declare Sub SetWindowPos Lib "User" (ByVal hwnd%, _                                          ByVal hWndInsertAfter%, _                                           ByVal X%, _                                           ByVal Y%, _                                           ByVal cx%, _                                           ByVal cy%, _                                           ByVal wFlags%) </li>  Add the following Constants to your global Declarations section: Global Const HWND_TOPMOST = -1 Global Const SWP_NOSIZE = &H1 Global Const SWP_NOMOVE = &H2 </li>  Create the following Function: Function Float_Calc Dim X&, hwnd% X = Shell("CALC.EXE", 1) hwnd% = FindWindow%("SciCalc", 0&)

Call SetWindowPos(hwnd%, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or _           SWP_NOSIZE) End Function </li></ol>

To demonstrate this, open the Debug Window (called Immediate Window in Microsoft Access 1.x and 2.0) and enter the following command and then press ENTER:

? Float_Calc

NOTE: CALC.EXE is an application that comes with Windows and should be in your Windows directory.

<div class="references_section">