Bug SetWindowCallback et #WM_NOTIFY sous PB 6.02 - résolu

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Bug SetWindowCallback et #WM_NOTIFY sous PB 6.02 - résolu

Message par cage »

Bonjour a tous,
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
Dernière modification par cage le mar. 11/juil./2023 15:17, modifié 1 fois.
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Bug SetWindowCallback et #WM_NOTIFY sous PB 6.02

Message par boddhi »

Salut cage,

Confirmé.
Fonctionne correctement sous 6.00 et 6.01 mais effectivement pas sous 6.02...
Avatar de l’utilisateur
Mindphazer
Messages : 694
Inscription : mer. 24/août/2005 10:42

Re: Bug SetWindowCallback et #WM_NOTIFY sous PB 6.02

Message par Mindphazer »

C'est pas un bug.

La manière de gérer le setWindowCallBack() a été changée en 6.02, mais comme ça posait des problèmes, la 6.03 est revenue au mode de fonctionnement d'avant :
https://www.purebasic.fr/english/viewtopic.php?t=81810
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Bug SetWindowCallback et #WM_NOTIFY sous PB 6.02

Message par cage »

Bonjour,
Merci a vous deux pour vos réponses.
Je vais donc attendre que la version 6.03 ne soit plus en bêta pour passer dessus.
Pour l'instant, je vais repasser en 6.00 LTS
Bonne journée a tous,
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Répondre