Après être passé de PB 6.00 a 6.02, je rencontre un problème dans l'utilisation de SetWindowCallback() pour intercepter le clic gauche sur le titre d'une colonne d'un ListIconGadget lorsque les Gadgets sont contenus dans un CanvasGadget() en mode #PB_Canvas_Container
Aucun soucis avec PB 6.00, par contre en PB 6.02, pour que ça fonctionne, je dois désactiver le CanvasGadget()
Testé avec PB 6.03 beta 2, je retrouve un fonctionnement normal.
Valeur retournée lors d'un clic gauche sur le titre d'une colonne:
78 soit #WM_NOTIFY sans le bug
528 soit #WM_PARENTNOTIFY avec le bug
Si vous avez un peu de temps, merci.
cage
Code : Tout sélectionner
EnableExplicit
CompilerIf #PB_Compiler_Debugger
;;; Nous sommes dans l'IDE
#WinApp = 999
CompilerElse
#WinApp = 56
CompilerEndIf
Enumeration Menus
#MenuApp
EndEnumeration
Enumeration FormMenu
#MenuAppQuit
EndEnumeration
Enumeration Gadgets
#GadgetCanvas
#GadgetList
EndEnumeration
#WinAppWidth = 600
#WinAppHeight = 400
#bgcolor = 14474460 ; bgcolor = RGB(220,220,220) $00DCDCDC
#fgcolor = 0 ; fgcolor = RGB(0,0,0)
Global X,Y,W,H
Global updown.l = 0, lastcol.l = 0
Global cols=3 ; 0->3 0=TITRE | 1=INDEX | 2=F | 3=VIDEO
Procedure windowCallback(hWnd, Message, wParam, lParam)
Protected *msg.NMHDR
Protected *pnmv.NM_LISTVIEW
Protected Result = #PB_ProcessPureBasicEvents
Protected texte$
;Debug Str(Message)+" "+Hex(Message)
Select Message
Case #WM_PARENTNOTIFY
Debug "#WM_PARENTNOTIFY = "+Message
Case #WM_NOTIFY
Debug "#WM_NOTIFY = "+Message
;Debug "message="+Message+" lParam="+lParam
*msg.NMHDR = lParam
If IsGadget(#GadgetList)
If *msg\hwndFrom = GadgetID(#GadgetList) And *msg\code = #LVN_COLUMNCLICK
*pnmv.NM_LISTVIEW = lParam
If lastcol<>*pnmv\iSubItem And updown=0
updown = 1
ElseIf lastcol<>*pnmv\iSubItem And updown=1
updown = 0
EndIf
lastcol = *pnmv\iSubItem ; numéro de col 0->3
texte$ = "lastcol="+Str(lastcol)+" & updown="+updown
CompilerIf #PB_Compiler_Debugger
Debug texte$
CompilerElse
MessageRequester("Information", texte$, #PB_MessageRequester_Ok|#PB_MessageRequester_Info)
CompilerEndIf
;;sort(#GadgetList,lastcol) ; <--- trier la ListIconGadget() en Ascendant/Descendant
EndIf
EndIf
Default
EndSelect
; Nothing
ProcedureReturn Result
EndProcedure
ExamineDesktops()
X = (DesktopWidth(0) -#WinAppWidth)/2
Y = (DesktopHeight(0)-#WinAppHeight)/2
Define FLAGS = #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered
OpenWindow(#WinApp, X, Y, #WinAppWidth, #WinAppHeight, "Lecteur de vidéos", FLAGS)
If CreateImageMenu(#MenuApp, WindowID(#WinApp), #PB_Menu_ModernLook)
MenuTitle("Fichier")
MenuItem(#MenuAppQuit, "Quitter"+Chr(9)+"Ctrl+Q")
EndIf
X=3:Y=3:W=#WinAppWidth-(X*2):H=#WinAppHeight-MenuHeight()-(Y*2)
; Fonctionne avec PB 6.00 et #CANVAS = #True et #CANVAS = #False
; Fonctionne avec PB 6.02 et #CANVAS = #False uniquement
; Fonctionne avec PB 6.03 et #CANVAS = #True et #CANVAS = #False
; Positionner #CANVAS a #True ou #False pour tester
#CANVAS = #True ; --> pose pb avec PB 6.02 et #WM_NOTIFY dans le Callback
;#CANVAS = #False ; --> sans pb avec PB 6.02 et #WM_NOTIFY dans le Callback
If #CANVAS
H=#WinAppHeight
H-MenuHeight()
CanvasGadget(#GadgetCanvas, 0, 0, #WinAppWidth, H , #PB_Canvas_Container|#PB_Canvas_ClipMouse)
StartDrawing(CanvasOutput(#GadgetCanvas))
;; on rempli le fond du canvas avec la couleur #bgcolor
FillArea(0, 0, 0,#bgcolor)
StopDrawing()
EndIf
Define LIFLAGS = #PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines
ListIconGadget(#GadgetList, X, Y, W, H, "Liste des vidéos", 395, LIFLAGS)
AddGadgetColumn(#GadgetList, 1, "Index", 50)
AddGadgetColumn(#GadgetList, 2, "F" , 30)
AddGadgetColumn(#GadgetList, 3, "Vidéo", 75)
AddGadgetColumn(#GadgetList, 4 , "" , 1) ; correction bug affichage séparation
SetGadgetColor(#GadgetList, #PB_Gadget_BackColor , #bgcolor)
SetGadgetColor(#GadgetList, #PB_Gadget_FrontColor, #fgcolor)
If #CANVAS
CloseGadgetList()
EndIf
AddKeyboardShortcut(#WinApp, #PB_Shortcut_Control|#PB_Shortcut_Q, #MenuAppQuit) ; quit
AddKeyboardShortcut(#WinApp, #PB_Shortcut_Control|#PB_Shortcut_X, #MenuAppQuit) ; quit
SetWindowCallback(@windowCallback(),#WinApp) ; crash explorer
Define Event, indexMenu
Repeat
Event = WaitWindowEvent(20)
Select Event
Case #PB_Event_Menu
indexMenu = EventMenu()
Select indexMenu
Case #MenuAppQuit : Break
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver