Mouseover Button
Posted: Mon Aug 14, 2006 7:21 pm
Hello does someone know the constant of an Mouseover event at a button?
I want to create a hoover effect.
I want to create a hoover effect.
http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
Procedure CB(hwnd, msg, wparam, lparam)
result = #PB_ProcessPureBasicEvents
If msg = #WM_SETCURSOR
If wparam = GadgetID(0)
SetGadgetText(1, "ON Button")
Else
SetGadgetText(1, "Off Button")
EndIf
EndIf
ProcedureReturn result
EndProcedure
OpenWindow(0,0,0,320,200,"",$C80001)
CreateGadgetList(WindowID(0))
ButtonGadget(0,130,90,100,20,"I'm a button!")
TextGadget(1,130, 40, 100,20,"Off Button")
SetWindowCallback(@CB())
Repeat
ev=WaitWindowEvent()
Until ev=#WM_CLOSECode: Select all
#HICF_ENTERING = 17
#HICF_LEAVING = 33
#BUTTON = 0
Procedure CallBack(hwnd, msg, wparam, lparam)
result = #PB_ProcessPureBasicEvents
If msg = #WM_NOTIFY
If wparam = #BUTTON
*status.NMBCHOTITEM = lparam
Select *status\dwFlags
Case #HICF_ENTERING
Debug "Entering"
SetGadgetText(1, "ON button")
Case #HICF_LEAVING
Debug "Leaving"
SetGadgetText(1, "OFF button")
EndSelect
EndIf
EndIf
ProcedureReturn result
EndProcedure
OpenWindow(0,0,0,320,200,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ButtonGadget(0,130,90,100,20,"I'm a button!")
TextGadget(1,130, 40, 100,20,"OFF Button")
SetWindowCallback(@CallBack())
Repeat
ev=WaitWindowEvent()
Until ev=#WM_CLOSECode: Select all
#WM_MOUSEHOVER = $2A1
#WM_MOUSELEAVE = $2A3
#TME_HOVER = 1
#TME_LEAVE = 2
#PB_HoverImage=$FF10
#PB_HoverText=$FF11
Structure hover
wdth.l
Height.l
image.l
type.l
EndStructure
Procedure callback(hwnd,msg,wParam,lParam)
Protected membmp
Select msg
Case #WM_MOUSEMOVE
If buttondown=1
Else
Structure myTRACKMOUSEEVENT
cbSize.l
dwFlags.l
hwndTrack.l
dwHoverTime.l
EndStructure
mte.myTRACKMOUSEEVENT
mte\cbSize = SizeOf(myTRACKMOUSEEVENT)
mte\dwFlags = #TME_LEAVE
mte\hwndTrack = hwnd
hdc=GetDC_(hwnd)
GetClientRect_(hwnd,@rct.RECT)
TrackMouseEvent_(mte)
DrawEdge_(hdc,@rct,#EDGE_RAISED,#BF_RECT)
EndIf
Case #WM_MOUSEHOVER
Case #WM_MOUSELEAVE
*inf.hover=GetProp_(hwnd,"windowinfo")
Select *inf\type
Case #PB_HoverText
dc=GetDC_(hwnd)
newdc=CreateCompatibleDC_(dc)
membmp=CreateCompatibleBitmap_(dc,*inf\wdth,*inf\Height)
brush=CreateSolidBrush_(GetSysColor_(#COLOR_btnface))
pen=createpen_(#PS_SOLID,0,GetSysColor_(#COLOR_btnface))
SelectObject_(newdc,membmp)
SelectObject_(newdc,brush)
SelectObject_(newdc,pen)
rectangle_(newdc,0,0,*inf\wdth,*inf\Height)
rect.RECT
rect\left=0:rect\right=*inf\wdth:rect\top=0:rect\bottom=*inf\Height
text.s=Space(255)
fontid=GetStockObject_(#ANSI_VAR_FONT)
SelectObject_(newdc,fontid)
GetWindowText_(hwnd,text.s,255)
SetBkColor_(newdc,GetSysColor_(#COLOR_btnface))
settextalign_(newdc,#TA_CENTER)
texty=(*inf\Height-14)/2
textx=(*inf\wdth)/2
exttextout_(newdc,textx,texty,#ETO_CLIPPED,@rect,text.s,Len(text),0)
BitBlt_(dc,0,0,*inf\wdth,*inf\Height,newdc,0,0,#SRCCOPY)
ReleaseDC_(hwnd,dc)
DeleteDC_(newdc)
DeleteObject_(membmp)
buttondown=0
Case #PB_HoverImage
dc=GetDC_(hwnd)
newdc=CreateCompatibleDC_(dc)
brush=CreateSolidBrush_(GetSysColor_(#COLOR_btnface))
pen=createpen_(#PS_SOLID,0,GetSysColor_(#COLOR_btnface))
membmp=*inf\image
SelectObject_(newdc,brush)
SelectObject_(newdc,pen)
rect.RECT
SelectObject_(newdc,membmp)
rect\left=0:rect\right=*inf\wdth:rect\top=0:rect\bottom=*inf\Height
DrawEdge_(dc,@rect,#EDGE_SUNKEN,#BF_TOP|#BF_LEFT|#BF_RIGHT|#BF_BOTTOM )
BitBlt_(dc,0,0,*inf\wdth,*inf\Height,newdc,0,0,#SRCCOPY)
;ReleaseDC_(hwnd,dc)
DeleteDC_(newdc)
buttondown=0
EndSelect
ProcedureReturn 0
Case #WM_PAINT
*inf.hover=GetProp_(hwnd,"windowinfo")
Select *inf\type
Case #PB_HoverText
dc=GetDC_(hwnd)
newdc=CreateCompatibleDC_(dc)
membmp=CreateCompatibleBitmap_(dc,*inf\wdth,*inf\Height)
brush=CreateSolidBrush_(GetSysColor_(#COLOR_btnface))
pen=createpen_(#PS_SOLID,0,GetSysColor_(#COLOR_btnface))
SelectObject_(newdc,membmp)
SelectObject_(newdc,brush)
SelectObject_(newdc,pen)
rectangle_(newdc,0,0,*inf\wdth,*inf\Height)
rect.RECT
rect\left=0:rect\right=*inf\wdth:rect\top=0:rect\bottom=*inf\Height
text.s=Space(255)
fontid=GetStockObject_(#ANSI_VAR_FONT)
SelectObject_(newdc,fontid)
GetWindowText_(hwnd,text.s,255)
SetBkColor_(newdc,GetSysColor_(#COLOR_btnface))
settextalign_(newdc,#TA_CENTER)
texty=(*inf\Height-14)/2
textx=(*inf\wdth)/2
exttextout_(newdc,textx,texty,#ETO_CLIPPED,@rect,text.s,Len(text),0)
BitBlt_(dc,0,0,*inf\wdth,*inf\Height,newdc,0,0,#SRCCOPY)
ReleaseDC_(hwnd,dc)
DeleteDC_(newdc)
DeleteObject_(membmp)
Case #PB_HoverImage
dc=GetDC_(hwnd)
newdc=CreateCompatibleDC_(dc)
brush=CreateSolidBrush_(GetSysColor_(#COLOR_btnface))
pen=createpen_(#PS_SOLID,0,GetSysColor_(#COLOR_btnface))
membmp=*inf\image
SelectObject_(newdc,brush)
SelectObject_(newdc,pen)
rectangle_(newdc,0,0,*inf\wdth,*inf\Height)
rect.RECT
SelectObject_(newdc,membmp)
rect\left=0:rect\right=*inf\wdth:rect\top=0:rect\bottom=*inf\Height
BitBlt_(dc,0,0,*inf\wdth,*inf\Height,newdc,0,0,#SRCCOPY)
ReleaseDC_(hwnd,dc)
DeleteDC_(newdc)
EndSelect
;ProcedureReturn 0
Case #WM_LBUTTONDOWN
*inf.hover=GetProp_(hwnd,"windowinfo")
Select *inf\type
Case #PB_HoverText
buttondown=1
rect.RECT
dc=GetDC_(hwnd)
newdc=CreateCompatibleDC_(dc)
membmp=CreateCompatibleBitmap_(dc,*inf\wdth,*inf\Height)
brush=CreateSolidBrush_(GetSysColor_(#COLOR_btnface ))
pen=createpen_(#PS_SOLID,1,GetSysColor_(#COLOR_GRAYTEXT ))
SelectObject_(newdc,membmp)
SelectObject_(newdc,brush)
SelectObject_(newdc,pen)
rectangle_(newdc,0,0,*inf\wdth,*inf\Height)
rect\left=0:rect\right=*inf\wdth:rect\top=0:rect\bottom=*inf\Height
text.s=Space(255)
fontid=GetStockObject_(#ANSI_VAR_FONT)
SelectObject_(newdc,fontid)
GetWindowText_(hwnd,text.s,255)
SetBkColor_(newdc,GetSysColor_(#COLOR_btnface))
settextalign_(newdc,#TA_CENTER)
texty=(*inf\Height-14)/2
textx=(*inf\wdth)/2
exttextout_(newdc,textx+2,texty+2,#ETO_CLIPPED,@rect,text.s,Len(text),0)
DrawEdge_(newdc,@rect,#EDGE_SUNKEN,#BF_TOP|#BF_LEFT|#BF_RIGHT|#BF_BOTTOM )
BitBlt_(dc,0,0,*inf\wdth,*inf\Height,newdc,0,0,#SRCCOPY)
ReleaseDC_(hwnd,dc)
DeleteDC_(newdc)
DeleteObject_(membmp)
Case #PB_HoverImage
buttondown=1
dc=GetDC_(hwnd)
newdc=CreateCompatibleDC_(dc)
brush=CreateSolidBrush_(GetSysColor_(#COLOR_btnface))
pen=createpen_(#PS_SOLID,0,GetSysColor_(#COLOR_btnface))
membmp=*inf\image
SelectObject_(newdc,brush)
SelectObject_(newdc,pen)
rectangle_(newdc,0,0,*inf\wdth,*inf\Height)
rect.RECT
SelectObject_(newdc,membmp)
rect\left=0:rect\right=*inf\wdth:rect\top=0:rect\bottom=*inf\Height
BitBlt_(dc,2,2,*inf\wdth-2,*inf\Height-2,newdc,0,0,#SRCCOPY)
DrawEdge_(dc,@rect,#EDGE_SUNKEN,#BF_TOP|#BF_LEFT|#BF_RIGHT|#BF_BOTTOM )
ReleaseDC_(hwnd,dc)
DeleteDC_(newdc)
EndSelect
Case #WM_LBUTTONUP
*inf.hover=GetProp_(hwnd,"windowinfo")
Select *inf\type
Case #PB_HoverText
buttondown=0
dc=GetDC_(hwnd)
newdc=CreateCompatibleDC_(dc)
membmp=CreateCompatibleBitmap_(dc,*inf\wdth,*inf\Height)
brush=CreateSolidBrush_(GetSysColor_(#COLOR_btnface))
pen=createpen_(#PS_SOLID,0,GetSysColor_(#COLOR_btnface))
SelectObject_(newdc,membmp)
SelectObject_(newdc,brush)
SelectObject_(newdc,pen)
rectangle_(newdc,0,0,*inf\wdth,*inf\Height)
rect.RECT
rect\left=0:rect\right=*inf\wdth:rect\top=0:rect\bottom=*inf\Height
text.s=Space(255)
fontid=GetStockObject_(#ANSI_VAR_FONT)
SelectObject_(newdc,fontid)
GetWindowText_(hwnd,text.s,255)
SetBkColor_(newdc,GetSysColor_(#COLOR_btnface))
settextalign_(newdc,#TA_CENTER)
texty=(*inf\Height-14)/2
textx=(*inf\wdth)/2
exttextout_(newdc,textx,texty,#ETO_CLIPPED,@rect,text.s,Len(text),0)
DrawEdge_(newdc,@rect,#EDGE_RAISED,#BF_TOP|#BF_LEFT|#BF_RIGHT|#BF_BOTTOM)
BitBlt_(dc,0,0,*inf\wdth,*inf\Height,newdc,0,0,#SRCCOPY)
ReleaseDC_(hwnd,dc)
DeleteDC_(newdc)
DeleteObject_(membmp)
Case #PB_HoverImage
buttondown=0
dc=GetDC_(hwnd)
newdc=CreateCompatibleDC_(dc)
brush=CreateSolidBrush_(GetSysColor_(#COLOR_btnface))
pen=createpen_(#PS_SOLID,0,GetSysColor_(#COLOR_btnface))
membmp=*inf\image
SelectObject_(newdc,brush)
SelectObject_(newdc,pen)
rectangle_(newdc,0,0,*inf\wdth,*inf\Height)
rect.RECT
rect\left=0:rect\right=*inf\wdth:rect\top=0:rect\bottom=*inf\Height
SelectObject_(newdc,membmp)
BitBlt_(dc,0,0,*inf\wdth,*inf\Height,newdc,0,0,#SRCCOPY)
DrawEdge_(dc,@rect,#EDGE_RAISED,#BF_TOP|#BF_LEFT|#BF_RIGHT|#BF_BOTTOM)
ReleaseDC_(hwnd,dc)
DeleteDC_(newdc)
ProcedureReturn 0
EndSelect
EndSelect
ProcedureReturn CallWindowProc_(GetProp_(hwnd,"OldProc"),hwnd,msg,wParam,lParam)
EndProcedure
Procedure HoverButton(number.l,x,Y,Width,Height,text.s,type,image.l=0)
Select type
Case #PB_HoverImage
If number=#PB_Any
number=#PB_Any
returnval=ImageGadget(number,x,Y,Width,Height,0)
hwnd=GadgetID(returnval)
GadgetToolTip(returnval,text)
Else
number=number
returnval=ImageGadget(number,x,Y,Width,Height,0)
hwnd=returnval
GadgetToolTip(number,text)
EndIf
txt.s=text
SetWindowText_(hwnd,txt)
SetProp_(hwnd,"OldProc",SetWindowLong_(hwnd,#GWL_WNDPROC,@callback()))
*info.hover=HeapAlloc_(GetProcessHeap_(), 0, SizeOf(hover))
*info\wdth=Width
*info\Height=Height
*info\image=image
*info\type=type
re=SetProp_(hwnd,"windowinfo",*info)
Case #PB_HoverText
If number=#PB_Any
number=#PB_Any
returnval=ImageGadget(number,x,Y,Width,Height,0)
hwnd=GadgetID(returnval)
Else
number=number
returnval=ImageGadget(number,x,Y,Width,Height,0)
hwnd=returnval
EndIf
txt.s=text
SetWindowText_(hwnd,txt)
SetProp_(hwnd,"OldProc",SetWindowLong_(hwnd,#GWL_WNDPROC,@callback()))
*info.hover=HeapAlloc_(GetProcessHeap_(), 0, SizeOf(hover))
*info\wdth=Width
*info\Height=Height
*info\type=type
re=SetProp_(hwnd,"windowinfo",*info)
InvalidateRect_(hwnd,0,0)
EndSelect
ProcedureReturn returnval
EndProcedure
If OpenWindow(0, 289, 91, 472, 507, "hoverbutton",#PB_Window_SystemMenu | #PB_Window_TitleBar)
If CreateGadgetList(WindowID(0))
HoverButton(10,20,20,40,40,"test", #PB_HoverText)
EndIf
EndIf
Repeat
Event=WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End