This article is about MicroStation® Visual Basic for Applications (VBA).
It's written for developers using
Bentley Systems MicroStation.
Questions similar to this appear on the
Be Communities Forums.
These problems appeared in the
MicroStation Programming Forum.
It's courteous to your users to provide feedback when something is happening in your VBA code that he or she cannot control. For example, we're used to seeing an hour-glass appear on our computer screens when Windows is busy …
![]() |
Q How do I set the mouse pointer (or cursor) using VBA?
A
It's courteous to your users to provide feedback when something is happening in your code that he or she
cannot control.
For example, we're used to seeing an hour-glass appear on our computer screens when Windows is busy.
MicroStation VBA doesn't currently include a way to set a custom mouse icon.
However, there's indirect help.
Introduced with MicroStation V8i V8.11.07 is MDL function mdlWindow_setSystemCursor
.
You can use MDL functions from VBA if you follow some simple rules …
In the case of a Mouse Pointer, we need both the MDL function and an enumeration (VBA Enum
)
that defines the several possible cursor types.
Here's its VBA wrapper …
Declare PtrSafe Function mdlWindow_setSystemCursor Lib "stdmdlbltin.dll" ( ByVal systemCursor As Long ) As Long
Here's the enumeration of cursor types …
Public Enum SYSTEMCURSOR CURSOR_APPSTARTING = 0 ' Standard arrow and small hourglass CURSOR_ARROW = 1 ' Standard arrow CURSOR_CROSS = 2 ' Crosshair CURSOR_HAND = 3 ' Windows 98/Me, Windows 2000/XP: Hand CURSOR_HELP = 4 ' Arrow and question mark CURSOR_IBEAM = 5 ' I-beam CURSOR_NO = 6 ' Slashed circle CURSOR_SIZEALL = 7 ' Four-pointed arrow pointing north, south, east, and west CURSOR_SIZENESW = 8 ' Double-pointed arrow pointing northeast and southwest CURSOR_SIZENS = 9 ' Double-pointed arrow pointing north and south CURSOR_SIZENWSE = 10 ' Double-pointed arrow pointing northwest and southeast CURSOR_SIZEWE = 11 ' Double-pointed arrow pointing west and east CURSOR_UPARROW = 12 ' Vertical arrow CURSOR_WAIT = 13 ' Hourglass End Enum
Here's how to set the mouse pointer in your code …
mdlWindow_setSystemCursor CURSOR_WAIT
... do some work
mdlWindow_setSystemCursor CURSOR_ARROW
Here's the wrapper I mentioned to make it more like VBA …
Public Sub SetMousePointer (ByVal pointerType As SYSTEMCURSOR) mdlWindow_setSystemCursor pointerType End Sub
Putting it all together, here's a test procedure. It changes the mouse pointer in MicroStation (not the VBA IDE) for five seconds …
Public Sub Main() SetMousePointer CURSOR_NO ' Do nothing for a while so you can see the effect Dim start As Single Dim PauseTime As Single PauseTime = 5 start = Timer ' Set start time Do While Timer < start + PauseTime DoEvents ' Yield to other processes Loop SetMousePointer CURSOR_APPSTARTING End Sub
Back to the VBA article index.