Page 1 sur 1
gestion des fenetres
Publié : mer. 04/févr./2004 14:00
par nadrak
bonjour,
voila mon probleme,
j'ai deux fenetres, A et B.
Je veux que l'affichage de la fenetre B soit conditonné par la fenetre A.
c'est à dire, que la fenetre B s'affiche juste en dessous de la fenetre (jusque la pas de blem) et que quand je bouge la fenetre A, la B bouge avec.(si c'est pas en tps reel, pas de bleme, je veux juste que la fenetre B se remette sous la A)
Merci
Publié : mer. 04/févr./2004 14:51
par Oliv
Cherche un peu dans les apis windows il y en a une toute simple qui donne la position du fdenêtre, je l'ai déjà utilisé mais je ne me rapelle plus......
Publié : mer. 04/févr./2004 15:21
par filperj
Pourquoi une api?
Il y a les commandes windowx(), windowy(), et movewindow().
Ca marche pas avec ça ?
Publié : mer. 04/févr./2004 15:39
par Invité
Ben dsl, mais j'arrive pas a recupere l'event avec #PB_Event_MoveWindow
les position de x et y ne s'actualisent pas.
Je dois mal m'y prendre
Publié : mer. 04/févr./2004 16:04
par filperj
Ben dsl, mais j'arrive pas a recupere l'event avec #PB_Event_MoveWindow
Oui, c'est vrai...
Mais par contre windowx() et widowy() renvoient des valeurs correctes, du moins chez moi.
Donc tu peux vérifier la position de la fenêtre dans le "Default" de ton "Select Waitwindowevent()"
Code : Tout sélectionner
w=OpenWindow(0,0,0,200,200,#pb_window_screencentered|#pb_window_systemmenu,"")
Repeat
Select WaitWindowEvent()
Case #pb_event_closewindow : End
Default
Debug "x="+Str(WindowX())
Debug "y="+Str(WindowY())
EndSelect
ForEver
Et si tu as plusieur fenêtres, n'oublie pas de passer de l'une à l'autre avec Usewindow().
Publié : mer. 04/févr./2004 16:30
par Le Soldat Inconnu
essai avec la constantes #wm_move pour choper l'évènement fenêtre déplacer
sinon, une autre méthodes est d'afficher tous les événement et de regarder la valeur de celui qui est obtenu quand tu bouges une fenêtre.
Code : Tout sélectionner
repeat
Event = waitwindowevent()
debug Event
until Event = #wm_close
Publié : mer. 04/févr./2004 16:32
par filperj
Tiens, j'avais du temps à tuer alors voilà:
Code : Tout sélectionner
w=OpenWindow(0,0,0,200,200,#pb_window_screencentered|#pb_window_borderless,"")
w2=OpenWindow(1,0,0,100,100,#pb_window_windowcentered|#pb_window_systemmenu,"",w)
Repeat
Select WaitWindowEvent()
Case #pb_event_closewindow : End
Default
UseWindow(1)
newx=WindowX()
newy=WindowY()
If newx<>oldx Or newy<>oldy
UseWindow(0)
MoveWindow(newx-50,newy-50)
oldx=newx:oldy=newy
EndIf
EndSelect
ForEver
Ca correspond à ta question, non ?
Publié : mer. 04/févr./2004 16:34
par Invité
ton exemple marche bien avec une fenetre, mais des que j'en met deux il y a un probleme.
enfin bon je ne comprend pas trop .
Publié : mer. 04/févr./2004 16:36
par Invité
merci pour vos reponses,
ne tenez pas compte du message precedent,
et encore merci
Publié : mer. 04/févr./2004 16:36
par Invité
merci pour vos reponses,
ne tenez pas compte du message precedent,
et encore merci
Publié : mer. 04/févr./2004 17:11
par Oliv
t'as raison Filperj, il devait y avoir un truc en plus dans l'api qu me convenai mais je ne sais plus quoi.........

Publié : mer. 04/févr./2004 18:36
par Patrick88
un peu comme winamp, quand tu bouges le lecteur, la playlist et l'équaliseur , bouge en même temps....
patrick
Publié : mer. 04/févr./2004 21:55
par Chris
Salut
En passant par une CallBack, ça fonctionne plutôt bien !
Code : Tout sélectionner
; ****************************************************
; **** Move 2 Windows ****
; **** ---------------------------------------- ****
; **** Déplacement d'une fenêtre avec une autre ****
; **** Auteur Chris : http://forum.purebasic.fr ****
; **** 04/02/2004 ****
; ****************************************************
Enumeration
#Window_0
#Window_1
EndEnumeration
WinPos.RECT
Global WinPos, hWnd_1, hWnd_0
Procedure MyCallback(WindowID,Message,wParam,lParam)
result = #PB_ProcessPureBasicEvents
Select WindowID
Case hWnd_0
Select Message
Case #WM_MOVING
GetWindowRect_(WindowID,WinPos)
UseWindow(#Window_1) : MoveWindow(WinPos\left,WinPos\bottom)
;MoveWindow_(hWnd_1,WinPos\left,WinPos\bottom,WinPos\right-WinPos\left,WinPos\bottom-WinPos\top,#True)
EndSelect
EndSelect
ProcedureReturn result
EndProcedure
hWnd_0 = OpenWindow(#Window_0, 300, 200, 300, 200, #PB_Window_SystemMenu, "Fenêtre 1",0)
hWnd_1 = OpenWindow(#Window_1, 300, 300, 300, 200, #PB_Window_SystemMenu, "Fenêtre 2",hWnd_0)
GetWindowRect_(hWnd_0,WinPos)
UseWindow(#Window_1) : MoveWindow(WinPos\left,WinPos\bottom)
; MoveWindow_(hWnd_1,WinPos\left,WinPos\bottom,WinPos\right-WinPos\left,WinPos\bottom-WinPos\top,#True)
SetWindowCallback(@MyCallback())
Repeat
Select WindowEvent()
Case #PB_EventCloseWindow : quit = 1
EndSelect
Until quit = 1
End
C'est ce que j'ai pu trouver de mieux, jusqu'à maintenant !
Chris

********* Edité ********
J'ai un peu modifié le code pour utiliser au maximum les commandes de Pure Basic.
J'ai laissé les commandes qui passaient par l'Api en commenté.
Chris
