Page 1 sur 2

Je rêve ou il y a un bug (Ou je suis nul)

Publié : mar. 28/nov./2017 17:19
par MLD
Bonjour a tous
Je souhaite déplacer cette petite fenêtre a l'aide des 4 boutons flèche. de 1 pixel a la fois.En vertical tous est oK. Mais en horizontal j'ai un résultat plutôt étrange. :roll: :twisted:
Faite un éssai. J'ai peu-être trop fumé la moquette de mon bureau :!: :lol:

Code : Tout sélectionner

OpenWindow(165,0,0,80,80,"",#PB_Window_BorderLess|#WS_SIZEBOX|#PB_Window_ScreenCentered) 
  StickyWindow(165,#True)
  WID=WindowID(165)
  SetWindowLongPtr_(WID,#GWL_EXSTYLE,GetWindowLongPtr_(WID,#GWL_EXSTYLE) | #WS_EX_LAYERED)
  SetLayeredWindowAttributes_(WID,0,100,#LWA_ALPHA)
  AddKeyboardShortcut(165,#PB_Shortcut_Up,1)
  AddKeyboardShortcut(165,#PB_Shortcut_Down,2)
  AddKeyboardShortcut(165,#PB_Shortcut_Left,3)
  AddKeyboardShortcut(165,#PB_Shortcut_Right,4)

; Boucle générale
  Repeat
    Event = WaitWindowEvent()
    Select Event
     Case #PB_Event_Menu
      Select EventMenu()
       Case 1
          ResizeWindow(165,#PB_Ignore,WindowY(165)-1,#PB_Ignore,#PB_Ignore) 
       Case 2
          ResizeWindow(165,#PB_Ignore,WindowY(165)+1,#PB_Ignore,#PB_Ignore)
        Case 3
          ResizeWindow(165,WindowX(165)-1,#PB_Ignore,#PB_Ignore,#PB_Ignore)  
        Case 4
          ResizeWindow(165,WindowX(165)+1,#PB_Ignore,#PB_Ignore,#PB_Ignore)  
      EndSelect
  EndSelect
Until EventID=#PB_Event_CloseWindow 
End

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mar. 28/nov./2017 18:22
par Zorro

Code : Tout sélectionner



 OpenWindow(165,0,0,80,80,"",#PB_Window_BorderLess|#WS_SIZEBOX|#PB_Window_ScreenCentered)
  StickyWindow(165,#True)
  WID=WindowID(165)
  SetWindowLongPtr_(WID,#GWL_EXSTYLE,GetWindowLongPtr_(WID,#GWL_EXSTYLE) | #WS_EX_LAYERED)
  SetLayeredWindowAttributes_(WID,0,100,#LWA_ALPHA)
  AddKeyboardShortcut(165,#PB_Shortcut_Up,1)
  AddKeyboardShortcut(165,#PB_Shortcut_Down,2)
  AddKeyboardShortcut(165,#PB_Shortcut_Left,3)
  AddKeyboardShortcut(165,#PB_Shortcut_Right,4)
 x=Windowx(165) ; recup la coordonée X actuelle
 y=WindowY(165) ;  ; recup la coordonée Y actuelle
; Boucle générale
  Repeat
    Event = WaitWindowEvent()
    Select Event
     Case #PB_Event_Menu
      Select EventMenu()
       Case 1 ;UP		
		 y=y-1 ; diminue la coordonée Y
          ResizeWindow(165,#PB_Ignore,y,#PB_Ignore,#PB_Ignore)
       Case 2 ;Down
		  y=y+1 ;Augmente la coordonée Y
          ResizeWindow(165,#PB_Ignore,y,#PB_Ignore,#PB_Ignore)
        Case 3 ;Left
		  x=x-1  ; diminue la coordonée X
          ResizeWindow(165,x,#PB_Ignore,#PB_Ignore,#PB_Ignore) 
        Case 4 ;Right
		  x=x+1 ;Augmente la coordonée X
          ResizeWindow(165,x,#PB_Ignore,#PB_Ignore,#PB_Ignore) 
      EndSelect
  EndSelect
Until EventID=#PB_Event_CloseWindow
End



Lorsque tu fais :

Code : Tout sélectionner

WindowY(165)-1
tu ne diminues pas la coordonée de la fenetre

tu ne fait que prendre la coordonnée actuelle auquel tu retires 1
car "WindowY(165)" te renvoi la Derniere coordonée de la fenetre , connue
donc ça ne te renvoi pas la coordonée en temps reel

c'est pour ça qu'il faut mieux passer par une variable
la variable a un effet memoire , qui fait qu'elle retient vraiment la coodonée apres modification ...

enfin , c'est comme ça que je le comprends :)

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 8:42
par MLD
@Zorro
Bon il n'y a pas de Bug. Je suis donc nul :mrgreen:
Tu as 100/100% raison. Je n'est pas percuté sur L’effet mémoire de la position.
Merci beaucoup :lol:

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 9:43
par Guillot
ouai, etrange quand même...

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 10:21
par Ar-S
Je comprends la réponse de Zorro mais on est dans une boucle, pour moi, à chaque appel de WindowX ou WindowY il aurait été logique qu'il capture la nouvelle position. Comme toute commande Getxxxxxxx()
Je trouve cela aussi bizarre. Mais c'est bon à savoir.

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 10:21
par MLD
Après reflexion je trouve aussi cela étrange.
Cela fonctionne en vertical, mais pas en horizontal. :?:
Zorro avec ton astuce tout est OK,mais j'aimerais quand même avoir une explication. Je flair un peu le bug :roll:

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 11:06
par PAPIPP
Bonjour MLD

Chez moi tout fonctionne bien tout est OK. Sous PB 561 en 32 bits

Je fais un essai en 64 bits PB 561
C'est aussi tout bon

A+

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 11:40
par MLD
@PAPIPP
avec le code a Zorro c'est OK, mais pas avec le mien.
Je suis sous PB 561 32bits
A+

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 11:49
par Zorro
Ar-S a écrit :Je comprends la réponse de Zorro mais on est dans une boucle, pour moi, à chaque appel de WindowX ou WindowY il aurait été logique qu'il capture la nouvelle position. Comme toute commande Getxxxxxxx()
Je trouve cela aussi bizarre. Mais c'est bon à savoir.
oui , c'est bizarre

lorsque tu fais :

Code : Tout sélectionner

 ResizeWindow(165,#PB_Ignore,WindowY(165)-1,#PB_Ignore,#PB_Ignore)
une seule fois , tu prends la coordonée Y de la fenetre , tu retires 1 ...
et en principe ça bouge la fenetre vers le haut ... <---- c'est là le probleme !
il semble que pour que la fenetre change effectivement de place, il faut que windows reçoive l'evenement de mouvement
hors, ça ne semble pas etre le cas !

peut etre dans un callback ??


ce qui fait qu'a la boucle suivante, il repart avec la derniere position connue .....

c'est peut etre bien un bug de Purebasic ... demandez a Fred .. :)

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 11:52
par Zorro
oui c'est bien un bug !!
je pense a un probleme d'alignement dans Purebasic

regardez ce code fonctionne , c'est le meme que MLD

a une petite difference pres !!!

il faut faire -6 pour avoir en fait un -1 en deplacement !!!

Code : Tout sélectionner


 OpenWindow(165,0,0,80,80,"",#PB_Window_BorderLess|#WS_SIZEBOX|#PB_Window_ScreenCentered)
  StickyWindow(165,#True)
  WID=WindowID(165)
  SetWindowLongPtr_(WID,#GWL_EXSTYLE,GetWindowLongPtr_(WID,#GWL_EXSTYLE) | #WS_EX_LAYERED)
  SetLayeredWindowAttributes_(WID,0,100,#LWA_ALPHA)
  AddKeyboardShortcut(165,#PB_Shortcut_Up,1)
  AddKeyboardShortcut(165,#PB_Shortcut_Down,2)
  AddKeyboardShortcut(165,#PB_Shortcut_Left,3)
  AddKeyboardShortcut(165,#PB_Shortcut_Right,4)

; Boucle générale
  Repeat
    Event = WaitWindowEvent()
    Select Event
     Case #PB_Event_Menu
      Select EventMenu()
       Case 1
          ResizeWindow(165,#PB_Ignore,WindowY(165)-1,#PB_Ignore,#PB_Ignore)
       Case 2
          ResizeWindow(165,#PB_Ignore,WindowY(165)+1,#PB_Ignore,#PB_Ignore)
        Case 3
          ResizeWindow(165,WindowX(165)-6,#PB_Ignore,#PB_Ignore,#PB_Ignore) 
        Case 4
          ResizeWindow(165,WindowX(165)+1,#PB_Ignore,#PB_Ignore,#PB_Ignore) 
      EndSelect
  EndSelect
Until EventID=#PB_Event_CloseWindow
End


Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 12:16
par PAPIPP
@MLD

J'ai réalisé les 2 essais avec ton code.
et tout est OK en 32 et en 64 bit sous PB561 en mode debug et en mode normal.

A+

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 13:09
par Ar-S
Et bien moi de la 5.50 à la 5.61 j'ai le bug
Tu parles bien de celui là ? (j'ai ajouté 4 constantes et un debug pour être sûr)
Le soucis viens de la gauche et de la droite.
En plus de n'aller que vers la droite, la fenêtre bouge de 6px au lieu de 1px
Ce n'est pas logique du tout.

Code : Tout sélectionner


#Haut = 1
#BAS = 2
#Droite = 4
#Gauche = 3

OpenWindow(165,0,0,80,80,"",#PB_Window_BorderLess|#WS_SIZEBOX|#PB_Window_ScreenCentered)
  StickyWindow(165,#True)
  WID=WindowID(165)
  SetWindowLongPtr_(WID,#GWL_EXSTYLE,GetWindowLongPtr_(WID,#GWL_EXSTYLE) | #WS_EX_LAYERED)
  SetLayeredWindowAttributes_(WID,0,100,#LWA_ALPHA)
  AddKeyboardShortcut(165,#PB_Shortcut_Up,1)
  AddKeyboardShortcut(165,#PB_Shortcut_Down,2)
  AddKeyboardShortcut(165,#PB_Shortcut_Left,3)
  AddKeyboardShortcut(165,#PB_Shortcut_Right,4)

; Boucle générale
  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_Menu
        WX = WindowX(165) : WY = WindowY(165)
      Select EventMenu()
       Case #Haut
          ResizeWindow(165,#PB_Ignore,WY-1,#PB_Ignore,#PB_Ignore)
       Case #BAS
          ResizeWindow(165,#PB_Ignore,WY+1,#PB_Ignore,#PB_Ignore)
        Case #Gauche
          ResizeWindow(165,WX-1,#PB_Ignore,#PB_Ignore,#PB_Ignore) 
        Case #Droite
          ResizeWindow(165,WX+1,#PB_Ignore,#PB_Ignore,#PB_Ignore) 
      EndSelect
      Debug Str(wx) + " x " + Str(wy)
  EndSelect
Until EventID=#PB_Event_CloseWindow
End

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 13:47
par MLD
@Zorro
le +6 fonctionne pour la gauche ,mais pas pour la droite.

@PAPIPP

Fred a fait une version de PB spécial pour toi :?: :?:

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 13:58
par MLD
@ a tous
Après plusieurs tests avec différents changements J'ai la conviction qu'il y a BUG
Si quelqu’un qui manie l'Anglais mieux que moi pouvais poser la question sur le forum US, ce serais sympa.
Merci

Re: Je rêve ou il y a un bug (Ou je suis nul)

Publié : mer. 29/nov./2017 13:58
par Ar-S
J'ai reporté le bug
http://www.purebasic.fr/english/viewtop ... 70#p515370

On verra ce qu'en dit la team.