Déplacement d'une fenetre pop-up

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Déplacement d'une fenetre pop-up

Message par lionel_om »

Voila, je voudrais savoir comment faire pour pouvoir déplacer correctement une fenêtre de type POP-UP avec la souris (fenêtre sans barre de titre).
J'ai fais le code suivant, mais il y a des problèmes qd on est près d'un bord et qu'on la déplace rapidement. Essayez de faire n'importe quoi vous comprendrez...

Voici le code, je n'ai pas forcément pris la bonne méthode :

Code : Tout sélectionner

;- Num de la fenetre
#WINDOW         = 0

;- Evenements
#MOUSE_MOVE     = 512



;- Infos pour le deplacement de la fenetre
Structure MoveWindow
  etat.b
  clic.point
  idObj.l
  posObj.point
EndStructure

Global moveWin.MoveWindow


;- Deplacement de la fenetre dans le cas d'un drag and drop
Procedure MoveWindowByDrag(*param.MoveWindow)

  If moveWin\etat
    *param\posObj\x + DesktopMouseX() - *param\clic\x
    *param\posObj\y + DesktopMouseY() - *param\clic\y
    *param\clic\x   = DesktopMouseX()
    *param\clic\y   = DesktopMouseY()
    MoveWindow(*param\posObj\x, *param\posObj\y)
  EndIf

EndProcedure




hWnd    = OpenWindow(#WINDOW, 50, 50, 314, 176, #PB_Window_BorderLess , "Window Name")
; hBitmap = LoadImage(0, "skin.bmp")
; SkinWin(hWnd, hBitmap)


moveWin\idObj = WindowID(#WINDOW)


  Repeat
    EventID.l = WaitWindowEvent()
    
    Select EventID
    
      Case #WM_LBUTTONDOWN
        If WindowFromPoint_(DesktopMouseX(), DesktopMouseY()) = moveWin\idObj
          moveWin\etat      = #True
          moveWin\clic\x    = DesktopMouseX()
          moveWin\clic\y    = DesktopMouseY()
          moveWin\posObj\x  = WindowX()
          moveWin\posObj\y  = WindowY()
        EndIf
      
      Case #WM_LBUTTONUP
        moveWin\etat = #False

      Case #MOUSE_MOVE
        MoveWindowByDrag(@moveWin)
      
      Case #PB_Event_CloseWindow  ; If the user has pressed on the close button
        Quit = 1
    
    EndSelect

  Until Quit = 1
  End
Merci d'avance :P
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Ton code ne fonctionne pas car si le curseur se déplace trop vite, le message
#WM_MOUSEMOVE ne sera pas envoyé; cela dit il pourrait quand même fonctionné en utilisant GetCursorPos.

Mais bon, Il y a beaucoup plus simple:

Code : Tout sélectionner

#WINDOW=0

hWnd    = OpenWindow(#WINDOW, 50, 50, 314, 176, #PB_Window_BorderLess , "Window Name") 

Repeat 
  EventID.l = WaitWindowEvent() 
  
  Select EventID 
      
    Case #WM_LBUTTONDOWN 
      SendMessage_(WindowID(), #WM_NCLBUTTONDOWN, #HTCAPTION, 0) 
      
      
    Case #PB_Event_CloseWindow  
      Quit = 1 
      
  EndSelect 
  
Until Quit = 1 
End 
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Merci, c nickel !!!! :lol: :D
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre