Code archives/BlitzPlus Gui/Hotspots!
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| I finally found a way to do hotspots. The problem came with finding the precise coordinate of the client area of a window, but I discovered that this could be achieved by flicking the mouse there and back in the blink of a millisecond! Anyway, try out this test, you WILL be pleasantly surprised! | |||||
Type hotspot
Field x,y,width,height
Field clx,cly,win
End Type
win = CreateWindow("Testing!",100,100,200,200,0)
h.hotspot = CreateHotSpot(10,10,150,40,win)
lbltest = CreateTextField(10,10,150,40,win)
lbltest2 = CreateLabel("BOO!",10,60,100,40,win)
SetGadgetText lbltest,"Move your mouse here!"
Repeat
If WaitEvent(1)=$803 Or KeyHit(1) Then End
If MouseOverHotSpot(h)
ShowGadget lbltest2
Else
HideGadget lbltest2
End If
Forever
Function CreateHotSpot.hotspot(x,y,width,height,window)
; -- In the blink of an instant.. Find out the client X,Y offsets --
tmpcan = CreateCanvas(0,0,1,1,window)
xx=MouseX() yy=MouseY()
MoveMouse 0,0,tmpcan
clx=MouseX() cly=MouseY()
MoveMouse GadgetX(window),GadgetY(window)
clx=clx-MouseX() cly=cly-MouseY()
MoveMouse xx,yy
FreeGadget tmpcan
; -- Now make the hotspot area and save the X,Y offsets --
h.hotspot = New hotspot
h\x=x h\y=y
h\width=width h\height=height
h\clx=clx h\cly=cly
h\win = window
Return h
End Function
Function MouseOverHotSpot(h.hotspot)
x=GadgetX(h\win)+h\clx+h\x ;Window x,y + border\client offset + hotspot x,y
y=GadgetY(h\win)+h\cly+h\y
Return RectsOverlap(MouseX(),MouseY(),1,1,x,y,h\width,h\height)
End Function |
Comments
| ||
| Very neat |
Code Archives Forum