deplacer une fenetre malgré #PB_Window_BorderLess [RESOLU]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

deplacer une fenetre malgré #PB_Window_BorderLess [RESOLU]

Message par david »

Bonjour à tous

Je travaille avec ce code, mais le pb c'est que si on clique sur la barre de titre pour déplacer la fenêtre, tout est mis en pause (mon compte-a-rebours est stoppé...). Je n'arrive pas à trouver comment faire pour que ma boucle continue pendant ce temps...

Code : Tout sélectionner

a=300

If OpenWindow(0, 0, 0, 220, 100, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

   ButtonGadget  (1, 10, 60, 200, 30, "Fermer")
   
   Repeat
   
     a=a-1
     SetWindowTitle(0, Str(a))

     If a =0:MessageRequester("fin","fin"):End:EndIf
    
     Event = WaitWindowEvent(10)
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 
              CloseWindow(0)
              End  
         EndSelect
            
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf
Alors j'ai bien essayé de l'afficher avec #PB_Window_BorderLess en remplacant le titre par un GadgetText
Le soucis c'est que ma fenêtre n'est plus déplacable (enfin en tout cas avec mon niveau de débutant)

Code : Tout sélectionner

a=300

If OpenWindow(0, 0, 0, 220, 100, "Exemple...", #PB_Window_BorderLess )
   TextGadget(0,10,10,200,20,"")
   ButtonGadget  (1, 10, 60, 200, 30, "Fermer")
   
   Repeat
   
     a=a-1
     SetGadgetText(0, Str(a))

     If a =0:MessageRequester("fin","fin"):End:EndIf
     
     Event = WaitWindowEvent(10)
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 
              CloseWindow(0)
              End  
         EndSelect
            
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf
Idéalement j'aurais souhaité rester sur le code1
Mon petit doigt me dis que c'est Windows qui gère ce qui se passe quand je clique et déplace ma fenêtre et que ça va être compliqué et que c'est le code2 qui doit me permettre de gérer le déplacement de la fenêtre si on clique dessus et qu'on la déplace, mais alors là...??

je lui dis:
si la souris est dans ma fenetre et que mon clic gauche appuyé mémorise la position de ma souris
regarde ou elle bouge, et replace la fentre la ou elle est?? // il y a peut-être plus simple :lol:
Dernière modification par david le lun. 14/août/2017 16:45, modifié 1 fois.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: deplacer une fenetre malgré #PB_Window_BorderLess

Message par microdevweb »

Bonjour,

Voici une solution éventuel (fait à la vas vite je l'avoue)

Code : Tout sélectionner

Enumeration 
  #Form
  #Canvas
EndEnumeration
EnableExplicit
Structure Pos
  x.l
  y.l
EndStructure

Global gMouse.Pos,gOld.Pos,Win.pos,ClicOn.b=#False
Procedure Exit()
  CloseWindow(#Form)
  End
EndProcedure
Procedure MoveMyWindow()
  Protected Dep.Pos
  Select EventType()
    Case #PB_EventType_LeftButtonUp
      ClicOn=#False ; le bt gauche est relaché
    Case #PB_EventType_LeftButtonDown
      If Not ClicOn
        ; je mémorise les position pour
        ; calculer par après le déplacement
        CopyStructure(@gMouse,@gOld,Pos)
        ; ainsi que la position de la fenêtre
        win\x=WindowX(#Form)
        win\y=WindowY(#Form)
      EndIf
      ClicOn=#True
    Case #PB_EventType_MouseMove
      ; je sauve la position de la souris du bureau
      ExamineDesktops()
      gMouse\x=DesktopMouseX()
      gMouse\y=DesktopMouseY()
      ; REMARQUE: si la fenêtre appartient à une fenêtre mère
      ; j'utiliserais WindowMouseX(IdFenetre)
      If ClicOn ; le bt est enfoncé
                ; Calcul des déplacement
        dep\x=gMouse\x-gOld\x
        dep\y=gMouse\y-gOld\y
        ; Déplacement de la fenêtre
        ResizeWindow(#Form,win\x+dep\x,win\y+dep\y,#PB_Ignore,#PB_Ignore)
      EndIf
  EndSelect
EndProcedure
OpenWindow(#Form,0,0,200,300,"",#PB_Window_BorderLess)
; Le canvas va servir à gèrer les déplacement de souris et ainsi
; déplacer la fenêtre
CanvasGadget(#Canvas,0,0,200,300,#PB_Canvas_Container)
; Un raccourci pour sortir
AddKeyboardShortcut(#Form,#PB_Shortcut_Escape,$FF)
BindEvent(#PB_Event_Menu,@Exit(),#Form,$FF)
BindGadgetEvent(#Canvas,@MoveMyWindow())

Repeat
  WaitWindowEvent()
ForEver 

Dernière modification par microdevweb le mar. 15/août/2017 8:07, modifié 1 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: deplacer une fenetre malgré #PB_Window_BorderLess

Message par falsam »

@microdevweb: Et le compteur on le voit ou ? :p

Souci non résolu cher ami ^-^
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: deplacer une fenetre malgré #PB_Window_BorderLess

Message par falsam »

Seul solution à mon avis pour pouvoir déplacer une fenetre sans bloquer le compteur : LE THREAD.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: deplacer une fenetre malgré #PB_Window_BorderLess

Message par Marc56 »

Voila l'adaptation d'un de mes vieux programmes.
(Que du pure basic, sans thread)

Déplacement d'une fenêtre sans bordure (fausse barre titre qui est en fait un canvas)
Compteur qui tourne toujours car dans une procédure Bind

Code : Tout sélectionner

Global Test.l, Quit.l

Enumeration
     #Main
EndEnumeration

Enumeration
     #Canvas
     #Button
     #Text
EndEnumeration

OpenWindow(#Main, 100, 100, 300, 100, "", #PB_Window_BorderLess | #PB_Window_BorderLess)
CanvasGadget(#Canvas, 0, 0, 300, 20)
TextGadget(#Text, 10, 50, 100, 30, "")
ButtonGadget(#Button, 250, 70, 40, 20, "Quit")

Procedure UpdateDate()
     SetGadgetText(#Text, FormatDate("%hh:%ii:%ss", Date()))
EndProcedure


BindGadgetEvent(#Text, @UpdateDate())

Repeat
     UpdateDate()
     Select WaitWindowEvent(10)
          Case #PB_Event_Gadget
               Select EventGadget()
                    Case #Canvas
                         Select  EventType()
                              Case #PB_EventType_LeftButtonDown
                                   Debug "#PB_EventType_LeftButtonDown"
                                   Test = 1
                                   MouseX1 = WindowX(#Main)
                                   MouseY1 = WindowY(#Main)
                                   MouseX2 = DesktopMouseX()
                                   MouseY2 = DesktopMouseY()
                                   DecalageX = MouseX2  - MouseX1
                                   DecalageY = MouseY2  - MouseY1         
                                   
                              Case #PB_EventType_MouseMove
                                   If Test = 1
                                        MouseX = DesktopMouseX()
                                        MouseY = DesktopMouseY() 
                                        x = MouseX - DecalageX
                                        y = MouseY - DecalageY
                                        ResizeWindow(#Main, x, y, #PB_Ignore, #PB_Ignore)
                                   EndIf
                                   
                              Case #PB_EventType_LeftButtonUp
                                   Test = 0 
                         EndSelect
                         
                    Case #Button
                         Quit = 1
                         
               EndSelect
               
     EndSelect
Until Quit = 1
À adapter et optimiser.

:wink:
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: deplacer une fenetre malgré #PB_Window_BorderLess

Message par falsam »

Bien ton code Marc.

Ma petite contribution quand même avec un thread et uen fenetre classique.

Code : Tout sélectionner

CompilerIf Not #PB_Compiler_Thread
  CompilerError "L'option activer la gestion des thread doit etre activer!"
CompilerEndIf

Enumeration Window 
  #mf
EndEnumeration

Enumeration Gadget
  #mfCount
  #mfClose
EndEnumeration

Global Thread
Global a = 20000

;Plan de l'application
Declare Start()
Declare StartThread(*Value)
Declare Count()
Declare Exit()

Start()

Procedure Start()
  If OpenWindow(#mf, 0, 0, 220, 100, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
    TextGadget(#mfCount, 10, 20, 50, 22, "0")
    ButtonGadget(#mfClose, 10, 60, 200, 30, "Fermer")    
    
    ;Lancement du thread
    Thread = CreateThread(@StartThread(), 0) 
    
    ;Evenements
    BindEvent(#PB_Event_CloseWindow, @Exit())
    BindGadgetEvent(#mfClose, @Exit())
    
    Repeat : WaitWindowEvent(1) : ForEver
  EndIf  
EndProcedure

Procedure StartThread(*Value)  
  Count()
  MessageRequester("fin","fin")
  End
EndProcedure

Procedure Count()
  While a <> 0
    a = a - 1
    SetGadgetText(#mfCount, Str(a))
  Wend 
EndProcedure

Procedure Exit()
  If IsThread(Thread)
    KillThread(Thread)
  EndIf
  
  End  
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

Re: deplacer une fenetre malgré #PB_Window_BorderLess [RESO

Message par david »

@microdevweb : merci car je ne maîtrise pas trop les canvas, je vais pouvoir étudier tout ça en profitant du 15 aout...

@Marc56 : à adapter (un peu) certes, mais ça répond exactement à ma problématique. merci

@falsam : merci je vais pouvoir en même temps me pencher un peu plus sur les threads et apprendre encore plein de belles choses...
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: deplacer une fenetre malgré #PB_Window_BorderLess [RESO

Message par microdevweb »

@Falsam,

Je n'ai pas lu le code je l'avoue... Seulement l’inoncé en vitesse.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: deplacer une fenetre malgré #PB_Window_BorderLess [RESO

Message par microdevweb »

J'ai modifié mon code qui ne fonctionnait pas correctement.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre