Code archives/BlitzPlus Gui/Improved Mouse Functions
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
This set of functions tells you where the mouse or a gadget is on the screen, and whether the mouse is over a gadget. Update: There are now functions to tell you where the mouse is relaitve to a gadget. Unlike the Blitz MouseX & MouseY functions, these functions will work with any gadget, and will not crap out* on you at times. * (By crap out, I mean that the built in functions will sometimes stop returning coordinates if you click and hold near the edge of a canvas and then move outside it shortly thereafter. Very annoying when you are trying to allow the user to click and drag things in the canvas.) | |||||
; ----------------------------------------------------------------------------------------------------------------------------------- ; ; This code allows you to determine where the mouse or a gadget is on the screen, and whether the mouse is over a gadget. ; To use this function, first place the following in the file "user32.decls" in your userlibs folder: ; ; .lib "user32.dll" ; GetCursorPos%(lpPoint*):"GetCursorPos" ; ClientToScreen%(hWnd%, lpPoint*):"ClientToScreen" ; ; ----------------------------------------------------------------------------------------------------------------------------------- Type TYPE_lpPoint Field X Field Y End Type Global lpPoint.TYPE_lpPoint = New TYPE_lpPoint ; ----------------------------------------------------------------------------------------------------------------------------------- ; This function returns TRUE if the mouse is over the specified gadget, and FALSE if it is not. ; ; Note: ; It has not been tested to see if it works properly with gadgets that are clipped by another gadget or window! ; ----------------------------------------------------------------------------------------------------------------------------------- Function MouseOver(Gadget) Local Gx, Gy Local Mx, My ; Get the screen coordinates of the gadget. Gx = GadgetScreenX(Gadget) Gy = GadgetScreenY(Gadget) ; Get the screen coordinates of the mouse cursor. Mx = MouseScreenX() My = MouseScreenY() ; Is the mouse within the rectangle defined by the gadget? If (Mx >= Gx) And (Mx < Gx+GadgetWidth(Gadget)) And (My >= Gy) And (My < Gy+GadgetHeight(Gadget)) Then Return True Return False End Function ; ----------------------------------------------------------------------------------------------------------------------------------- ; This function returns the X coordinates of a gadget on the screen. ; ----------------------------------------------------------------------------------------------------------------------------------- Function GadgetScreenX(Gadget) Local HWnd ; Get a windows pointer to the gadget. HWnd = QueryObject(Gadget, 1) ; Set the point in the gadget which we want to find the screen coordinates of. lpPoint\X = 0 lpPoint\Y = 0 ; Get the screen coordinates of the pixel in the gadget. ClientToScreen(HWnd, lpPoint) Return lpPoint\X End Function ; ----------------------------------------------------------------------------------------------------------------------------------- ; This function returns the Y coordinates of a gadget on the screen. ; ----------------------------------------------------------------------------------------------------------------------------------- Function GadgetScreenY(Gadget) Local HWnd ; Get a windows pointer to the gadget. HWnd = QueryObject(Gadget, 1) ; Set the point in the gadget which we want to find the screen coordinates of. lpPoint\X = 0 lpPoint\Y = 0 ; Get the screen coordinates of the pixel in the gadget. ClientToScreen(HWnd, lpPoint) Return lpPoint\Y End Function ; ----------------------------------------------------------------------------------------------------------------------------------- ; This function returns the X coorindate of the mouse cursor on the screen. ; ----------------------------------------------------------------------------------------------------------------------------------- Function MouseScreenX() GetCursorPos(lpPoint) Return lpPoint\X End Function ; ----------------------------------------------------------------------------------------------------------------------------------- ; This function returns the Y coorindate of the mouse cursor on the screen. ; ----------------------------------------------------------------------------------------------------------------------------------- Function MouseScreenY() GetCursorPos(lpPoint) Return lpPoint\Y End Function ; ----------------------------------------------------------------------------------------------------------------------------------- ; This function returns the X coordinate of the mouse relative to a gadget. ; ----------------------------------------------------------------------------------------------------------------------------------- Function MouseGadgetX(Gadget) Return MouseScreenX()-GadgetScreenX(Gadget) End Function ; ----------------------------------------------------------------------------------------------------------------------------------- ; This function returns the X coordinate of the mouse relative to a gadget. ; ----------------------------------------------------------------------------------------------------------------------------------- Function MouseGadgetY(Gadget) Return MouseScreenY()-GadgetScreenY(Gadget) End Function |
Comments
| ||
Thanks, Very useful |
Code Archives Forum