PopUpMenu automatisch schließen, suche das handle fürs PopUp
Verfasst: 18.01.2008 20:26
Hinweis: HandleProblem gelöst siehe neuen Code auf Seite 2
Habe eine Toolbar mit PopUpMenus
Zur Demo 3 Buttons. Beim 3.Button klappt das PopUp automatisch auf und soll beim verlassen verschwinden.
Problem: ich bekomme nicht korrekt heraus welches handle das PopUp Window hat. So wie ich es im Beispielcode im Callback gelöst habe
Ich habe zwar die Timeout Funktion aktiviert mit #MNS_AUTODISMISS, aber die voreingestellte Zeit ist mir zu lang. Wer weiß wie ich diese Zeit ändere ?
Habe eine Toolbar mit PopUpMenus
Zur Demo 3 Buttons. Beim 3.Button klappt das PopUp automatisch auf und soll beim verlassen verschwinden.
Problem: ich bekomme nicht korrekt heraus welches handle das PopUp Window hat. So wie ich es im Beispielcode im Callback gelöst habe
- popid = GetWindow_(hwnd,#GW_HWNDFIRST)
Ich habe zwar die Timeout Funktion aktiviert mit #MNS_AUTODISMISS, aber die voreingestellte Zeit ist mir zu lang. Wer weiß wie ich diese Zeit ändere ?
Code: Alles auswählen
Declare ToolBar_SetButtonInfo(tbid,menuid,iconid)
Declare myWindowCallback(hWnd, message, wParam, lParam)
;nicht in PB definiert
#TBN_DROPDOWN=-710
#TBSTYLE_DROPDOWN=$8
#TBSTYLE_EX_DRAWDDARROWS=$1
#BTNS_WHOLEDROPDOWN=$0080
Enumeration
#toolbar
#menuid1=10
#menuid2
#menuid3
#popup01
#popup01itemA
#popup01itemB
#popup01itemC
#popup01itemD
#popup01itemE
#popup01itemF
EndEnumeration
pop01ID=CreatePopupMenu(#popup01)
MenuItem (#popup01itemA, "A")
MenuItem (#popup01itemB, "B")
MenuItem (#popup01itemC, "C")
MenuItem (#popup01itemD, "D")
MenuItem (#popup01itemF, "F")
;=====================================================
#MIM_BACKGROUND=2
#MIM_STYLE=16
#MNS_AUTODISMISS = $10000000
Structure MENUINFO
cbSize.l
fMask.l
dwStyle.l
cyMax.l
hbrBack.l
dwContextHelpID.l
dwMenuData.l
EndStructure
farbe=365255
MI.MENUINFO\cbSize=SizeOf(MENUINFO)
MI\hbrBack=CreateSolidBrush_(farbe)
MI\fMask=#MIM_BACKGROUND | #MIM_STYLE
MI\dwStyle=#MNS_AUTODISMISS
SetMenuInfo_(pop01ID,MI)
;=====================================================
WindowBreite = 700
WindowHoehe = 500
OpenWindow(0, 0,0, WindowBreite, WindowHoehe, "",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
tbid = CreateToolBar(#toolbar, WindowID(0))
ToolBarStandardButton(#menuid1, 0)
ToolBarStandardButton(#menuid2, 0)
ToolBarStandardButton(#menuid3, 0)
ToolBar_SetButtonInfo(tbid,#menuid1,0) ;image 0
ToolBar_SetButtonInfo(tbid,#menuid2,1) ;image 1
ToolBar_SetButtonInfo(tbid,#menuid3,2) ;image 2 ;
SetWindowCallback(@myWindowCallback())
Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
End
Procedure ToolBar_SetButtonInfo(tbid,menuid,iconid)
;change toolbar exStyle = kann Pfeil malen
exstyle=SendMessage_(tbid,#TB_GETEXTENDEDSTYLE,0,0)
SendMessage_(tbid,#TB_SETEXTENDEDSTYLE,0,exstyle | #TBSTYLE_EX_DRAWDDARROWS)
;Struktur füllen
Button.TBBUTTONINFO
Button\cbSize = SizeOf(TBBUTTONINFO)
Button\dwMask = #TBIF_COMMAND |#TBIF_SIZE | #TBIF_IMAGE | #TBIF_STATE | #TBIF_STYLE
Button\idCommand = menuid
Button\iImage = iconid
Button\fsState = #TBSTATE_ENABLED
Button\fsStyle = #TBSTYLE_DROPDOWN | #BTNS_WHOLEDROPDOWN
Button\cx = 50
;ButtonInfo an Toolbar senden
SendMessage_(tbid, #TB_SETBUTTONINFO, menuid, Button.TBBUTTONINFO)
EndProcedure
Procedure myWindowCallback(hWnd, Message, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Shared tbid
Static popid
If Message = #WM_NOTIFY
;*nmhdr.NMHDR = lParam ;für andere Auswertungen von #WM_NOTIFY
*msgTB.nmToolbar=lParam
If *msgTB\hdr\hwndfrom = tbid
Select *msgTB\hdr\code
Case #TBN_DROPDOWN ;click auf pfeil !! -710
;hole position button
SendMessage_(tbid, #TB_GETRECT, *msgTB\iItem, @rc.RECT)
MapWindowPoints_(tbid,0, @rc, 2)
Select *msgTB\iItem
Case #menuid1: DisplayPopupMenu(#popup01, hWnd, rc\left,rc\bottom)
Case #menuid2: DisplayPopupMenu(#popup01, hWnd, rc\left,rc\bottom)
popid = GetWindow_(hwnd,#GW_HWNDFIRST)
EndSelect
result = 0
Case #TBN_DROPDOWN-3 ;Popup klappt beim verlassen automatisch auf
SendMessage_(tbid, #TB_GETRECT, *msgTB\iItem, @rc.RECT)
MapWindowPoints_(tbid,0, @rc, 2)
Select *msgTB\iItem
Case #menuid3: DisplayPopupMenu(#popup01, hWnd, rc\left,rc\bottom)
popid = GetWindow_(hwnd,#GW_HWNDFIRST)
;Debug popid
;GetCursorPos_(lpPoint.POINT)
;id = WindowFromPoint_(lpPoint\X, lpPoint\Y)
;Debug id
EndSelect
result = 0
EndSelect
EndIf
ElseIf message=289
GetCursorPos_(lpPoint.POINT)
id = WindowFromPoint_(lpPoint\X, lpPoint\Y)
;Debug id
If id=hwnd
DestroyWindow_(popid)
EndIf
EndIf
ProcedureReturn result
EndProcedure