gestion des fenetres

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
nadrak

gestion des fenetres

Message 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
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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......
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Pourquoi une api?
Il y a les commandes windowx(), windowy(), et movewindow().
Ca marche pas avec ça ?
Invité

Message 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
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message 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().
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
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)]
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message 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 ?
Invité

Message 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 .
Invité

Message par Invité »

merci pour vos reponses,

ne tenez pas compte du message precedent,

et encore merci
Invité

Message par Invité »

merci pour vos reponses,

ne tenez pas compte du message precedent,

et encore merci
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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......... :(
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

un peu comme winamp, quand tu bouges le lecteur, la playlist et l'équaliseur , bouge en même temps....

patrick
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 ! :lol:

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 :)
Répondre