Fenetre Escamotable
Re: Fenetre Escamotable
Tu as remarqué le problème d'affichage à l'ouverture comme je te l'avais signalé et lorsqu'on a un double écran, la fenêtre est toujours apparente.
Re: Fenetre Escamotable
Le problème à l'ouverture est que les gadgets ne sont pas dessinés pendant la transition, ils s'affichent une fois la transition terminée.
Re: Fenetre Escamotable
Dixit Fred sur le forum us il y a quelque temps, sur ce sujet: Les gagdets ne sont redessinés que lors d'une boucle d'attente (WindowEvent()). Une seule itération suffit.nico a écrit :Le problème à l'ouverture est que les gadgets ne sont pas dessinés pendant la transition, ils s'affichent une fois la transition terminée.
Ligne 78, après (ResizeWindow) tu ajoutes
Code : Tout sélectionner
While WindowEvent(): Wend

Dans le code de Dobro:
Code : Tout sélectionner
Procedure Move_window(fenetre,direction,vitesse)
;by Dobro
ExamineDesktops()
largeur_bureau=DesktopWidth(0)
larg_fenetre=WindowWidth(fenetre)
Select direction
Case 1 ; vers la gauche
For i=largeur_bureau To (largeur_bureau-larg_fenetre ) Step-1
ResizeWindow(Fenetre, i, #PB_Ignore,#PB_Ignore, #PB_Ignore)
While WindowEvent() : Wend ; <<< *** Boucle à vide pour forcer le rafraichissement des gadgets ***
Delay(vitesse)
Next i
Case -1 ; vers la droite
For i=(largeur_bureau-larg_fenetre) To Largeur_bureau
ResizeWindow(Fenetre, i, #PB_Ignore,#PB_Ignore, #PB_Ignore)
Delay(vitesse)
Next i
EndSelect
EndProcedure
Cependant je n'ai pas testé sur mon appli (qui contient 124 gadgets sur la fenêtre principale)
Re: Fenetre Escamotable
Bien joué, je note des variations sur la vitesse de déplacement parfois cela semble se bloquer un chouilla, peut être dû au debug.
En tout cas, marche bien.
En tout cas, marche bien.
Re: Fenetre Escamotable
On peut compenser la lenteur de régénération avec plusieurs solutions:

- N'afficher les gadgets qu'une fois sur 5 par exemple.
- Ne pas faire une vitesse constante (démarrer doucement puis accélérer)
- N'afficher qu'un cadre (si on est sur une machine lente (tester CPU avant))
- Faire une copie écran de la fenêtre (je ne sais pas le faire) et déplacer cette image au lieu de la fenêtre.

Re: Fenetre Escamotable
J'ai voulu tâter du bindevent, je me retrouve coincer avec l'histoire de gadget qui apparait une fois la fenêtre stoppée. Le While WindowEvent(): Wend n'etant pas supporté par bindevent.
Dommage
Cependant ça fonctionne
Dommage

Cependant ça fonctionne
Code : Tout sélectionner
InitMouse()
ExamineDesktops()
Enumeration
#win
EndEnumeration
Enumeration
#bouton
#TACTION
#TMOUSE
EndEnumeration
; ETAT
#FEN_CACHE = 0
#FEN_OUVERTE = 1
; ACTION
#AFFICHE = 1
#CACHE = 2
#STOP = 3
Global.b ETAT, ACTION
Global L_DESK=DesktopWidth(0), H_DESK=DesktopHeight(0), X_WIN, Y_WIN, X_WIN_MAX
Global L_WIN = 220, H_WIN = 400
Global.i Mx, My
Declare Action()
Declare Fermer()
Declare CheckMouse()
ETAT = #FEN_OUVERTE
X_WIN = (L_DESK - L_WIN)
X_WIN_MAX = (L_DESK - 2)
Y_WIN = 100
If OpenWindow(#win, X_WIN, Y_WIN, L_WIN, H_WIN, "Exemple...", #PB_Window_SystemMenu)
ButtonGadget (#bouton, 10, 60, 200, 30, "Fermer")
AddWindowTimer(#win, #TMOUSE, 30)
AddWindowTimer(#win, #TACTION, 100)
BindEvent(#PB_Event_Timer,@CheckMouse(), #win, #TMOUSE )
BindEvent(#PB_Event_Timer,@Action(), #win, #TACTION )
BindEvent(#PB_Event_CloseWindow,@Fermer())
BindGadgetEvent(#bouton,@Fermer() )
Repeat
Event = WindowEvent()
Until quite = 1
End
EndIf
Procedure Fermer()
quite = 1
End
EndProcedure
Procedure CheckMouse()
Mx = DesktopMouseX()
My = DesktopMouseY()
Debug mx
If MX > L_DESK -5 And ETAT = #FEN_CACHE
Debug "Réapparition ON"
ACTION = #AFFICHE
ElseIf MX < X_WIN And ETAT = #FEN_OUVERTE
Debug "Disparition ON"
ACTION = #CACHE
ElseIf MX > X_WIN And ETAT = #FEN_OUVERTE
Debug "RIEN"
ACTION = #STOP
Else
Debug " rien "
ACTION = #STOP
EndIf
EndProcedure
Procedure Action()
Select ACTION
Case #AFFICHE
COmpte = X_WIN_MAX
Debug "OUVERTURE"
Repeat
ResizeWindow(#win, Compte, #PB_Ignore,#PB_Ignore, #PB_Ignore)
UpdateWindow_(GadgetID(#bouton))
Compte-1
Until Compte = X_WIN
ETAT = #FEN_OUVERTE
ACTION = #STOP
Case #CACHE
COmpte = X_WIN
Repeat
ResizeWindow(#win, Compte, #PB_Ignore,#PB_Ignore, #PB_Ignore)
Compte+1
Until Compte = X_WIN_MAX
ETAT = #FEN_CACHE
ACTION = #STOP
EndSelect
EndProcedure
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Fenetre Escamotable
Tu devrais pouvoir supprimer quelques lignes en affinant le BindEvent (pas testé, mais ça devrait fonctionner)
Remplace:
Par:
Ce qui te permet de supprimer "If EventTimer() = #..." dans les deux procédures.
Ça te fait gagner 2 tests (entrer dans la procédure à chaque fois + Tester EventTimer() )
(C'est l'un des avantages de BindEvent: aller directement à l'objet/évènement)

Remplace:
Code : Tout sélectionner
BindEvent(#PB_Event_Timer,@CheckMouse() )
BindEvent(#PB_Event_Timer,@Action() )
Code : Tout sélectionner
BindEvent(#PB_Event_Timer,@CheckMouse(), #win, #TMOUSE )
BindEvent(#PB_Event_Timer,@Action(), #win, #TACTION )
Ça te fait gagner 2 tests (entrer dans la procédure à chaque fois + Tester EventTimer() )
(C'est l'un des avantages de BindEvent: aller directement à l'objet/évènement)

Re: Fenetre Escamotable
Effectivement, j'ai modifié mon code, j'ai du coup viré le 2 if/endif.
nikel
nikel
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Fenetre Escamotable
je l'ai ajouté à mon code ( UpdateWindow_(GadgetID(#bouton)) ) ça mrche au poil Spock
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels