Page 1 sur 1

Déplacement d'une fenetre pop-up

Publié : lun. 04/juil./2005 22:15
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

Publié : mar. 05/juil./2005 11:28
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 

Publié : mar. 05/juil./2005 18:28
par lionel_om
Merci, c nickel !!!! :lol: :D