PureBasic

Forums PureBasic
Nous sommes le Jeu 14/Nov/2019 23:24

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 2 messages ] 
Auteur Message
 Sujet du message: Bug ou pas sur le déplacemnt d'une image gadget
MessagePosté: Jeu 15/Avr/2010 9:45 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 556
Bonjour à tous
Je viens de recompiler l’un de mes prg en PB450B2
Et l’ imagegadget que je pouvais déplacer dans les versions précédentes
ne se déplace que de quelques pixels en PB450B2
(Appuyez sur le bouton gauche de la souris en même temps que l’on déplace la souris)
J’ai reconstitué le « bug » dans un prg plus simple ci-dessous avec pour initiales
WWE=WaitWindowEvent(0)
EF=EventWindow()
EG=EventGadget()
Et les résultats du « débogage » montrent qu’à la suite d’une tentative de déplacement WWE=512
Dans PB450B2 EG perd le N° de gadget qui revient à 0 après appel de WWE
Alors que l’on garde le bouton gauche appuyé
La cause semble être l’appel à ImageGadget( ….) qui permet de déplacer le gadget(..)
On peut remarquer que sous PB441 tout se passe normalement

Code:

A+
Procedure.q nbcycl()
  !RDTSC
  ProcedureReturn
EndProcedure

Macro q_t
  "
EndMacro
Macro ff_n(n)
  q_t#n#=q_t+Str(n)+" "
EndMacro

Macro ff_s(S)
  q_t#S#=q_t+S+" "
EndMacro

Macro ff_f(F,nv=8)
  q_t#F#=q_t+StrF(f,nv)+" "
EndMacro

Macro ff_d(D,nv=8)
  q_t#D#=q_t+StrD(D,nv)+" "
EndMacro

Macro ff_Q(Q)
  q_t#Q#=q_t+StrQ(Q)+" "
EndMacro

Macro ff_H(H)
  q_t#H#=q_t+Hex(H)+" "
EndMacro

Macro ff_U(U,typ=4)
  q_t#U#=q_t+StrU(U,typ)+" "
EndMacro

Macro nl
  "**"+Str(#PB_Compiler_Line)+"** "
EndMacro
Enumeration
  #f1
  #GadgetImage
EndEnumeration
#WM_MOUSEWHEEL=$20A
#WHEEL_DELTA=120
#text=1
If OpenWindow(#f1,10,10,400,400,"Test sur Souris",#PB_Window_SystemMenu)
  ImageGadget(#GadgetImage,125,125,150,150,0,#PB_Image_Border)
EndIf
Repeat
  Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)+ff_n(WWe)
  WWE=WaitWindowEvent(0)
  ;WE = WindowEvent(); ne pas mettre cette fonction en service sous risque de dysfonctionnement
  EF=EventWindow()
  Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)+ff_n(WWe)
  EG=EventGadget()
  Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)+ff_n(WWe)
  ET=EventType()
  EM=EventMenu()
  EWP=EventwParam()
  ELP=EventlParam()
 
  Select WWE
    Case #PB_Event_CloseWindow
        End
    Case #WM_LBUTTONDOWN ;"Bouton gauche appuyé")
;          Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)
         Gosub SEL_GAD_ENFONCE
    Case #WM_LBUTTONUP ;"Bouton gauche relaché")
;          Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)
         Gosub SEL_GAD_RELACHE
    Case #WM_LBUTTONDBLCLK ;"Double clic gauche")
    Case #WM_RBUTTONDOWN ;"Bouton droit appuyé")
    Case #WM_RBUTTONUP ;"Bouton droit relaché")
    Case #WM_RBUTTONDBLCLK ;"Double clic droit")
    Case #WM_MBUTTONDOWN ;"Bouton du milieu appuyé"
    Case #WM_MBUTTONUP ;"Bouton du milieu relaché")
    Case #WM_MBUTTONDBLCLK ;"Double clic du milieu")
    Case #WM_MOUSEMOVE
      M_X=WindowMouseX(#f1)
      M_Y=WindowMouseY(#f1)
        If EG>0 And click_g=1
          NG_X=M_X-D_X0
          NG_Y=M_Y-D_Y0
          ImageGadget(EG,(NG_X),(NG_Y),150,150,0,#PB_Image_Border) ; permet de déplacer imagegadget
          UpdateWindow_(WindowID(#f1))
        EndIf
    Case #WM_MOUSEWHEEL
      Molette.l=-(EWP>>16)/#WHEEL_DELTA
      If Molette>0 ;"Molette en avant de
      ElseIf Molette<0 ;"Molette en arrière de
      EndIf
    Case #PB_Event_Gadget
      Select ET
        Case #PB_EventType_LeftClick ;"Image : Bouton gauche appuyé"
            Gosub SEL_GAD_ENFONCE
          Case #PB_EventType_LeftDoubleClick ;"Image : Double clic gauche")
        Case #PB_EventType_RightClick ;"Image : Bouton Droit appuyé"
        Case #PB_EventType_RightDoubleClick ;"Image : Double clic droit")
      EndSelect
    Case #PB_Event_Repaint 
    Case #PB_Event_CloseWindow:End
  EndSelect
  MWWE=WWE
  ;MWE = WE
  MEF=EF
  MEG=EG
  MET=ET
  MEM=EM
  MEWP=EWP
ForEver

; routine qui s'execute seulement a l'appuis du bouton gauche sur le gadget !!
SEL_GAD_ENFONCE:
Debug "***************** Routine  sur l'appuis du bouton gauche ******************"
  G_X=GadgetX(#GadgetImage)
  G_Y=GadgetY(#GadgetImage)
  M_X=WindowMouseX(#f1)
  M_Y=WindowMouseY(#f1)
  D_X0=M_X-G_X
  D_Y0=M_Y-G_Y
  G_larg=GadgetWidth(#GadgetImage)
  G_haut=GadgetHeight(#GadgetImage)
  click_g=1
Return
SEL_GAD_RELACHE:
Debug "***************** routine sur le relachement du bouton gauche ******************"

click_g=0

Return



Résultats sous PB441

Code:

**55** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=0
**57** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=0
**51** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=0
**55** EG=0 MEG=0 EventGadget()=1 click_g=0 WWe=13100
**57** EG=1 MEG=0 EventGadget()=1 click_g=0 WWe=13100
***************** Routine  sur l'appuis du bouton gauche ******************
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=13100
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=0
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=0



**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=0
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=0
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=15
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=15
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=15
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=13100
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=13100
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=13100
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=15
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=15
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=15

**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=15
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=15
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=15
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=15
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=514
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=514
***************** routine sur le relachement du bouton gauche ******************
**51** EG=1 MEG=1 EventGadget()=1 click_g=0 WWe=514
**55** EG=1 MEG=1 EventGadget()=1 click_g=0 WWe=512
**57** EG=1 MEG=1 EventGadget()=1 click_g=0 WWe=512
**51** EG=1 MEG=1 EventGadget()=1 click_g=0 WWe=512
**55** EG=1 MEG=1 EventGadget()=1 click_g=0 WWe=0
**57** EG=1 MEG=1 EventGadget()=1 click_g=0 WWe=0
**51** EG=1 MEG=1 EventGadget()=1 click_g=0 WWe=0
**55** EG=1 MEG=1 EventGadget()=1 click_g=0 WWe=0



Résultats sous PB450B2
Code:
**51** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=0
**55** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=13104
**57** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=13104


**57** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=0
**51** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=0
**55** EG=0 MEG=0 EventGadget()=1 click_g=0 WWe=13100
**57** EG=1 MEG=0 EventGadget()=1 click_g=0 WWe=13100
***************** Routine  sur l'appuis du bouton gauche ******************
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=13100
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=0
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=0


**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=0
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=0
**55** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**57** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**51** EG=1 MEG=1 EventGadget()=1 click_g=1 WWe=512
**55** EG=1 MEG=1 EventGadget()=0 click_g=1 WWe=15
**57** EG=0 MEG=1 EventGadget()=0 click_g=1 WWe=15
**51** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=15
**55** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=512
**57** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=512
**51** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=512
**55** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=0
**57** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=0
**51** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=0


**57** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=0
**51** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=0
**55** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=0
**57** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=0
**51** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=0
**55** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=514
**57** EG=0 MEG=0 EventGadget()=0 click_g=1 WWe=514
***************** routine sur le relachement du bouton gauche ******************
**51** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=514
**55** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=0
**57** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=0
**51** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=0
**55** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=0

**55** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=161
**57** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=161
**51** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=161
**55** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=16
**57** EG=0 MEG=0 EventGadget()=0 click_g=0 WWe=16


_________________
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Bug ou pas sur le déplacemnt d'une image gadget
MessagePosté: Ven 16/Avr/2010 8:16 
Hors ligne

Inscription: Sam 23/Fév/2008 17:58
Messages: 556
Bonjour à tous
Voici une solution permettant de contourner le "bug" tout en gardant une certaine portabilité
Mais le Pb se complique s'il y a plus 52 imagegadgets (jeu de 52 cartes par exemple + dos + etc..)
Code:
Procedure.q nbcycl()
  !RDTSC
  ProcedureReturn
EndProcedure

Macro q_t
  "
EndMacro
Macro ff_n(n)
  q_t#n#=q_t+Str(n)+" "
EndMacro

Macro ff_s(S)
  q_t#S#=q_t+S+" "
EndMacro

Macro ff_f(F,nv=8)
  q_t#F#=q_t+StrF(f,nv)+" "
EndMacro

Macro ff_d(D,nv=8)
  q_t#D#=q_t+StrD(D,nv)+" "
EndMacro

Macro ff_Q(Q)
  q_t#Q#=q_t+StrQ(Q)+" "
EndMacro

Macro ff_H(H)
  q_t#H#=q_t+Hex(H)+" "
EndMacro

Macro ff_U(U,typ=4)
  q_t#U#=q_t+StrU(U,typ)+" "
EndMacro

Macro nl
  "**"+Str(#PB_Compiler_Line)+"** "
EndMacro
Enumeration
  #f1
  #GadgetImage
EndEnumeration
#WM_MOUSEWHEEL=$20A
#WHEEL_DELTA=120
#text=1
If OpenWindow(#f1,10,10,400,400,"Test sur Souris",#PB_Window_SystemMenu)
  ImageGadget(#GadgetImage,125,125,150,150,0,#PB_Image_Border)
EndIf
Repeat
  Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)+ff_n(WWe)
  WWE=WaitWindowEvent(0)
  ;WE = WindowEvent(); ne pas mettre cette fonction en service sous risque de dysfonctionnement
  EF=EventWindow()
  Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)+ff_n(WWe)
  EG=EventGadget()
  Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)+ff_n(WWe)
  ET=EventType()
  EM=EventMenu()
  EWP=EventwParam()
  ELP=EventlParam()
 
  Select WWE
    Case #PB_Event_CloseWindow
        End
    Case #WM_LBUTTONDOWN ;"Bouton gauche appuyé")
;          Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)
         Gosub SEL_GAD_ENFONCE
    Case #WM_LBUTTONUP ;"Bouton gauche relaché")
;          Debug nl+ff_n(EG)+ff_n(MEG)+ff_n(EventGadget())+ff_n(click_g)
         Gosub SEL_GAD_RELACHE
    Case #WM_LBUTTONDBLCLK ;"Double clic gauche")
    Case #WM_RBUTTONDOWN ;"Bouton droit appuyé")
    Case #WM_RBUTTONUP ;"Bouton droit relaché")
    Case #WM_RBUTTONDBLCLK ;"Double clic droit")
    Case #WM_MBUTTONDOWN ;"Bouton du milieu appuyé"
    Case #WM_MBUTTONUP ;"Bouton du milieu relaché")
    Case #WM_MBUTTONDBLCLK ;"Double clic du milieu")
    Case #WM_MOUSEMOVE
      M_X=WindowMouseX(#f1)
      M_Y=WindowMouseY(#f1)
      If EG_CLIK>0 ; And click_g=1
        NG_X=M_X-D_X0
        NG_Y=M_Y-D_Y0
        ImageGadget(EG_CLIK,(NG_X),(NG_Y),150,150,0,#PB_Image_Border) ; permet de déplacer imagegadget
;         UpdateWindow_(WindowID(#f1))
      EndIf
    Case #WM_MOUSEWHEEL
      Molette.l=-(EWP>>16)/#WHEEL_DELTA
      If Molette>0 ;"Molette en avant de
      ElseIf Molette<0 ;"Molette en arrière de
      EndIf
    Case #PB_Event_Gadget
      Select ET
        Case #PB_EventType_LeftClick ;"Image : Bouton gauche appuyé"
          Gosub SEL_GAD_ENFONCE
        Case #PB_EventType_LeftDoubleClick ;"Image : Double clic gauche")
        Case #PB_EventType_RightClick ;"Image : Bouton Droit appuyé"
        Case #PB_EventType_RightDoubleClick ;"Image : Double clic droit")
      EndSelect
    Case #PB_Event_Repaint
    Case #PB_Event_CloseWindow:End
  EndSelect
  MWWE=WWE
  ;MWE = WE
  MEF=EF
  MEG=EG
  MET=ET
  MEM=EM
  MEWP=EWP
ForEver

; routine qui s'execute seulement a l'appuis du bouton gauche sur le gadget !!
SEL_GAD_ENFONCE:
Debug "***************** Routine  sur l'appuis du bouton gauche ******************"
G_X=GadgetX(#GadgetImage)
G_Y=GadgetY(#GadgetImage)
M_X=WindowMouseX(#f1)
M_Y=WindowMouseY(#f1)
D_X0=M_X-G_X
D_Y0=M_Y-G_Y
G_larg=GadgetWidth(#GadgetImage)
G_haut=GadgetHeight(#GadgetImage)
; click_g=1
EG_CLIK=EG
Return
SEL_GAD_RELACHE:
Debug "***************** routine sur le relachement du bouton gauche ******************"

; click_g=0
EG_CLIK=0


Return


_________________
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 2 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye