[comp.sys.mac.hypercard] Cursor in menubar

gwowen@gpu.utcs.utoronto.ca (George Owen) (10/19/90)

 

         .... is ther any way in HC 2.0 to determine if the mouse pointer
     is in the menubar ?  I know there is an 'on doMenu' but i was wondering
     if the is any ' on pointer-within-the-menubar' ????

     Why ? - long story , don't ask !!   :-)


-- 
***************************************************************************
*                 George Owen (gwowen@gpu.utcs.utoronto.ca)               *
* University of Toronto  -  Computing Services  -  Toronto , Canada       *
***************************************************************************

taylorj@yvax.byu.edu (10/19/90)

In <1990Oct18.171219.29303@gpu.utcs.utoronto.ca>, gwowen@gpu.utcs.utoronto.ca
(George Owen) asks if there is a way to tell if the pointer is in the menubar.

There's no message sent when the mouse pointer enters (or leaves) the menubar,
but you can write an idle handler to accomplish the same thing.  Try this one:

on idle
  global inMenuBar
  if inMenuBar is empty then  -- first time through
    put (the mouseV + the top of card window < 20) into inMenuBar
  end if
  if the mouseV + the top of card window < 20 then
    if not inMenuBar then
      send mouseEnterMenu to this card
      put true into inMenuBar
    end if
  else
    if inMenuBar then
      send mouseLeaveMenu to this card
      put false into inMenuBar
    end if
  end if
end idle

This will send a message whenever the mouse enters or leaves the menubar.  It
only sends the message once on each entry or exit (i.e. it won't continually
send the mouseEnterMenu message while the mouse is within the menubar), and it
initializes itself the first time through so no spurious message is sent even
if the mouse is already within the menubar.

I tested this, so I know it works.


Jim Taylor
Microcomputer Support for Curriculum   |
Brigham Young University               |   Bitnet: taylorj@byuvax.bitnet
101 HRCB, Provo, UT  84602             |   Internet: taylorj@yvax.byu.edu

jdevoto@Apple.COM (Jeanne A. E. DeVoto) (10/21/90)

In article <1679taylorj@yvax.byu.edu> taylorj@yvax.byu.edu offers an
idle handler to detect when the pointer is in the menubar:
>on idle
>  [. . .]
>  if the mouseV + the top of card window < 20 then
>    if not inMenuBar then
>      send mouseEnterMenu to this card
>      put true into inMenuBar
>    end if
> [. . .]

To get even fancier, for the case in which you're running on a system
with multiple monitors, you'll need to test the horizontal position
also (to determine whether the pointer is on the main monitor):

  if (the mouseV + the top of card window < 20) and ~
  (the mouseH > item 1 of the screenRect) and ~
  (the mouseH < item 3 of the screenRect) then
  [ etc ]
-- 
========= jeanne a. e. devoto ========================================
 jdevoto@apple.com     |  You may not distribute this article under a
 jdevoto@well.sf.ca.us |  compilation copyright without my permission.
______________________________________________________________________
 Apple Computer and I are not authorized      |        CI$: 72411,165
 to speak for each other.                     |