Bords collants

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Bords collants

Message par Heis Spiter »

Salut a tous ! Je ne sais plus qui avait fait un code pour une fenetre avec les bords collant... et ca avait pas trop marché ! Voici ma version qui je l'espère marchera mieux :

Code : Tout sélectionner

ScreenX = GetSystemMetrics_(#SM_CXSCREEN)
ScreenY = GetSystemMetrics_(#SM_CYSCREEN)
If OpenWindow(Fenetre, 0, 0, 100, 100, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered, "Bords 'collants'")
EndIf
Repeat
  WinX = WindowX()
  WinY = WindowY()
  If WinX < 0
    MoveWindow(0,WinY)
  EndIf
  If WinX < 20
    MoveWindow(0,WinY)
  EndIf
  If WinY < 0
    MoveWindow(WinX,0)
  EndIf
  If WinY < 20
    MoveWindow(WinX,0)
  EndIf
  If WinX + 115 > ScreenX
    MoveWindow(ScreenX - 115,WinY)
  EndIf
  If WinX + 115 > ScreenX - 20
    MoveWindow(ScreenX - 115,WinY)
  EndIf
  If WinY + 125 > ScreenY
    MoveWindow(WinX,ScreenY - 125)
  EndIf
  If WinY + 125 > ScreenY - 20
    MoveWindow(WinX,ScreenY - 125)
  EndIf
Until WaitWindowEvent() = #PB_Event_CloseWindow
1 - Les valeur 125, et 115 sont tout a fait arbitraires.... Je l'ai ait trouvé en testant, enfin ca doit être largeur fenetre + bard, etc... et longueur fentre + bord,etc...
2 - Si quelqu'un pouvait me troeuver l'ancien code.... ce serait sympa
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

J'ai codé ceci. la principale différence vient du fait que le collage avec mon code s'effectue sur les bords de l'écran et la barre des taches quelque soit sa position (en bas, en haut, etc...)

Code : Tout sélectionner

#SizeWindowX = 300 
#SizeWindowY = 200 

Procedure Open_Window() 
  If OpenWindow(0, 0, 0, #SizeWindowX, #SizeWindowY, #PB_Window_ScreenCentered, "Fenêtre") 
    If CreateGadgetList(WindowID()) 
      TextGadget(1 ,3, #SizeWindowY - 18, #SizeWindowX - 6, 15, "Alt + F4 pour quitter") 
    EndIf 
  EndIf 
EndProcedure 



Procedure Deplace() 
  
  ; Dimension de la fenêtre avec prise en comptes des bords 
  GetWindowRect_(WindowID(), @Taille_Fenetre.rect) 
  Largeur_Fenetre = Taille_Fenetre\Right - Taille_Fenetre\Left 
  Hauteur_Fenetre = Taille_Fenetre\Bottom - Taille_Fenetre\top 
  
  ; Dimension de l'écran 
  SystemParametersInfo_(#SPI_GETWORKAREA, 0, @Taille_Ecran.RECT, 0) 
  
  ; Position de la fenêtre 
  PosWinX = WindowX() 
  PosWinY = WindowY() 
  
  ; Ajustement sur les X 
  If Abs(PosWinX - Taille_Ecran\Left) <= 12 ; Si fenêtre placé contre le bord droit de l'écran 
    MoveWindow(Taille_Ecran\Left, PosWinY) ; On aligne sur le bord droit de l'écran 
    PosWinX = WindowX() ; Nouvelle position de la fenêtre 
  ElseIf Abs(PosWinX + Largeur_Fenetre - Taille_Ecran\Right) <= 12 ; Si fenêtre placé contre le bord gauche de l'écran 
    MoveWindow(Taille_Ecran\Right - Largeur_Fenetre, PosWinY) ; On aligne sur le bord gauche de l'écran 
    PosWinX = WindowX() ; Nouvelle position de la fenêtre 
  EndIf 
  
  ; Ajustement sur les Y 
  If Abs(PosWinY - Taille_Ecran\top) <= 12 ; Si fenêtre placé contre le haut de l'écran 
    MoveWindow(PosWinX, Taille_Ecran\top) ; On aligne sur le haut de l'écran 
  ElseIf Abs(PosWinY + Hauteur_Fenetre - Taille_Ecran\Bottom) <= 12 
    MoveWindow(PosWinX, Taille_Ecran\Bottom - Hauteur_Fenetre) 
  EndIf 
  
EndProcedure 




; Debut du programme 

Open_Window() 

Repeat 
  
  Event = WaitWindowEvent() 
  
  If Event = 161 
    Deplace() 
  EndIf 
  
Until Event = #PB_EventCloseWindow
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)]
Répondre