Page 1 sur 1

Redimensionement d'une fenêtre CHAPITRE2^^

Publié : sam. 29/mars/2008 18:01
par Neosis
Salut à tous, je c'est que l'on a déjà parler de redimensionnement de fenêtre dans un topic mais j'ai un petit soucis et j'aimerai avoir une explication...
Voila c'est simple lorsque ma souris ce situe sur la fenêtre celle-ci s'agrandit progressivement, jusque la tous va bien :) Quand ma souris n'est plus au-dessus de ma fenêtre celle-ci reviens à ça taille normale. Le HIC c'est que ma fenêtre mais beaucoup plus de temps à revenir en taille normale, pourquoi? Pourtant lorsque celle-ci s'agrandit le redimensionnement et rapide :roll:
Voila mon code source et si quelqu'un à une réponse ou une solution, je suis toute ouï :wink:

; Fait par Néosis
#Window =1
#GA_ROOT =2

OpenWindow(#Window,50,50,100,50,"Test")
SetTimer_(#Null, 1, 50, #Null)

Repeat
Evenement = WaitWindowEvent()

Select Evenement
Case #WM_TIMER
HObjet = WindowFromPoint_(DesktopMouseX(),DesktopMouseY())

If HObjet = WindowID(#Window) Or HRoot = WindowID(#Window)
While i<800
ResizeWindow(#Window,WindowX(#Window),WindowY(#Window), i, i/2)
i+1
Wend
Else
While i>100
ResizeWindow(#Window,WindowX(#Window),WindowY(#Window), i, i/2)
i-1
Wend
EndIf
EndSelect

Until Evenement = #PB_Event_CloseWindow

Publié : sam. 29/mars/2008 18:15
par venom
salut Neosis,

je ne serai pas t'expliquer pourquoi :) mais si tu change la valeur de i-1 c'est bon non ?

Code : Tout sélectionner

#Window =1
#GA_ROOT =2

OpenWindow(#Window,50,50,100,50,"Test")
SetTimer_(#Null, 1, 50, #Null)

Repeat
Evenement = WaitWindowEvent()

Select Evenement
Case #WM_TIMER
HObjet = WindowFromPoint_(DesktopMouseX(),DesktopMouseY())
HRoot = GetAncestor_(HObjet, #GA_ROOT)

If HObjet = WindowID(#Window) Or HRoot = WindowID(#Window)
While i<800
ResizeWindow(#Window,WindowX(#Window),WindowY(#Window), i, i/2)
i+1
Wend
Else
While i>100
ResizeWindow(#Window,WindowX(#Window),WindowY(#Window), i, i/2)
i-2
Wend
EndIf
EndSelect

Until Evenement = #PB_Event_CloseWindow


@++

Publié : sam. 29/mars/2008 18:20
par Neosis
Effectivement je pourrai changé la valeur de i j'ai déjà essayé mais par exemple si je prend i-6 pour réduire ma fenêtre, lors du redimensionnement la fenêtre va laissé des "traces" derrière elle , je c'est pas si vous comprenez ce que je veux dire par "laisser des trace" en gros le redimensionnement ce fait pas très bien... Et puis j'aimerai savoir pourquoi le redimensionnement en taille normale et plus lent ;)

Publié : sam. 29/mars/2008 18:57
par Backup
Neosis a écrit :Effectivement je pourrai changé la valeur de i j'ai déjà essayé mais par exemple si je prend i-6 pour réduire ma fenêtre, lors du redimensionnement la fenêtre va laissé des "traces" derrière elle , je c'est pas si vous comprenez ce que je veux dire par "laisser des trace" en gros le redimensionnement ce fait pas très bien... Et puis j'aimerai savoir pourquoi le redimensionnement en taille normale et plus lent ;)
faut y aller carrement !

Code : Tout sélectionner

; Fait par Néosis
#Window =1
#GA_ROOT =2

OpenWindow(#Window,50,50,100,50,"Test")
SetTimer_(#Null, 1, 50, #Null)

Repeat
      Evenement = WaitWindowEvent()
      
      Select Evenement
            Case #WM_TIMER
                  HObjet = WindowFromPoint_(DesktopMouseX(),DesktopMouseY())
                  
                  If HObjet = WindowID(#Window) Or HRoot = WindowID(#Window)
                        While i<800
                              ResizeWindow(#Window,WindowX(#Window),WindowY(#Window), i, i/2)
                              i+20
                        Wend
                  Else
                        While i>100
                              ResizeWindow(#Window,WindowX(#Window),WindowY(#Window), i, i/2)
                              i-20
                        Wend
                  EndIf
      EndSelect
      
Until Evenement = #PB_Event_CloseWindow
le traces sont du au Redraw, parceque ta fenetre met trop de temp a se fermer !!

mais si tu met 20 , pas de problemes , parce que la fermeture a lieu avant le rafraichissement de l'ecran :)

;*************************************************************
;*************************************************************
;*************************************************************
;*************************************************************


ce code prouve l'interaction avec le refraichissement d'ecran
le Delay() a la particularité de permettre de rendre la main aux system (DO EVENTS en Visual Basic)
ce qui permet d'obtenir un agrandissement lent tout en ayant le rafraichissement niquel :)

après faut jouer avec les valeurs
pour faire réapparaitre le rafraichissement de l'écran diminue le Delay() :)

Code : Tout sélectionner

; Fait par Néosis
#Window =1
#GA_ROOT =2

OpenWindow(#Window,50,50,100,50,"Test")
SetTimer_(#Null, 1, 50, #Null)

Repeat
      Evenement = WaitWindowEvent()
      
      Select Evenement
            Case #WM_TIMER
                  HObjet = WindowFromPoint_(DesktopMouseX(),DesktopMouseY())
                  
                  If HObjet = WindowID(#Window) Or HRoot = WindowID(#Window)
                        While i.f<800
                              ResizeWindow(#Window,WindowX(#Window),WindowY(#Window), i, i/2)
                              i+0.5 
                             Delay(4)
                        Wend
                  Else
                        While i>100
                              ResizeWindow(#Window,WindowX(#Window),WindowY(#Window), i, i/2)
                              i-0.5 
                                     Delay(4)
                        Wend
                  EndIf
      EndSelect
      
Until Evenement = #PB_Event_CloseWindow

ceci est pas mal :)

Code : Tout sélectionner

; Fait par Néosis
#Window =1
#GA_ROOT =2

OpenWindow(#Window,50,50,100,50,"Test")
SetTimer_(#Null, 1, 50, #Null)

Repeat
      Evenement = WaitWindowEvent()
      
      Select Evenement
            Case #WM_TIMER
                  HObjet = WindowFromPoint_(DesktopMouseX(),DesktopMouseY())
                  
                  If HObjet = WindowID(#Window) Or HRoot = WindowID(#Window)
                        While i.f<800
                              ResizeWindow(#Window,WindowX(#Window),WindowY(#Window), i, i/2)
                              i+10
                             Delay(8)
                        Wend
                  Else
                        While i>100
                              ResizeWindow(#Window,WindowX(#Window),WindowY(#Window), i, i/2)
                              i-10
                                     Delay(8)
                        Wend
                  EndIf
      EndSelect
      
Until Evenement = #PB_Event_CloseWindow

Publié : sam. 29/mars/2008 21:11
par Neosis
J'était justement entrain d'utiliser "delay" au moment ou tu as posté le message :) ...
Merci dobro 8)