gestion des fenetres
gestion des fenetres
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
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
Oui, c'est vrai...Ben dsl, mais j'arrive pas a recupere l'event avec #PB_Event_MoveWindow
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
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
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.
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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Tiens, j'avais du temps à tuer alors voilà:
Ca correspond à ta question, non ?
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
Salut 
En passant par une CallBack, ça fonctionne plutôt bien !
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

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

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
