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.
Faite un éssai. J'ai peu-être trop fumé la moquette de mon bureau
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 :
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
Tu as 100/100% raison. Je n'est pas percuté sur L’effet mémoire de la position.
Merci beaucoup

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

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