J'ai donc une fenêtre principale comprenant des gadgets donc un panelgadget.
Dans l'onglet 0 (le 1er onglet) de ce panel, j'ai un OpenWindowScreen() qui aura pour but de présenter les évènements du jour avec des animations.
J'ai toujours un soucis par rapports aux réactions du logiciels pendant une anim ou à la fin de celle-ci.
Je m'embrouille probablement dans la gestion des event. Perte du curseur souris ...
Ou faut-il obligatoirement passer par un thread si je souhaite naviguer dans les onglets alors que l'anim se joue ?
Des qu'un code commence à être volumineux ou multi-fenêtré je perds la boule.

Pourtant j'ai essayé d'être "propre" dans son agencement.
Pour tester, lancer le programme (avec le debug) et cliquez sur le 1er onglet.
Archive avec code + datas : ICI
Code principale seul ci dessous
Code : Tout sélectionner
; Tête de Linotte
; Gestionnaire d'évènements type "pense-bête"
; Par Ar-S // http://ldvmultimedia.com / Débuté le 1 Fev 2012
;---------------------------------------------------------------------
;- ** INITIALISATION / ENUMERATION
;---------------------------------------------------------------------
InitSprite()
InitKeyboard()
InitMouse()
UseJPEGImageDecoder()
UsePNGImageDecoder()
;{ Fenêtre
Enumeration
#w0
EndEnumeration
;}
;{ Menu
Enumeration
#Menu_w0
EndEnumeration
;}
;{ Menu/Toolbar items
Enumeration
EndEnumeration
;}
;{ Gadgets
Enumeration
#IMG_TITRE
#Panel
#Calendar
#Txt_Categorie
#Categorie
#CHK_Annuel
#Chk_jours
#CHK_Semaine
#CHK_Mois
#CHK_annee
#Txt_EVENT
#EVENT_TITRE
#Txt_Descript_Event
#AFF
#BT_AIDE_APROPOS
#BT_PREF
#BT_Don
#Descript_Event
#BT_AJOUT_EVENT
#PREF_Demarrage_Auto
#IMG_TRAIT
#PREF_PLAN
#IMG_TRAIT2
#PREF_SON
#TXT_Liste_Event
#ListEvent
#BT_MODIF_EVENT
#BT_CLONER_EVENT
#BT_SUP_EVENT
#IMG_TRAIT3
#TXT_Gerer_cat
#ListCategorie
#CATEGORIE_MOD
#BT_AJOUT_CAT
#BT_SUPPR_CAT
EndEnumeration
;}
;{ Fonts
Enumeration
#Font_Normal
#Font_Gras
EndEnumeration
;}
;{ Images
Enumeration
#ID_IMG_TITRE
#ID_IMG_BT_Apropos
#ID_IMG_BT_PREF
#ID_BT_DON
#ID_IMG_TRAIT
#ID_IMG_TRAIT2
#ID_IMG_Trait3
EndEnumeration
;}
;{ Sprites
Enumeration
#Balle
EndEnumeration
;}
;---------------------------------------------------------------------
;- ** VARIABLES / CONSTANTES
;---------------------------------------------------------------------
Global Path$ = GetCurrentDirectory()
Global FontNormal = LoadFont(#Font_Normal, "Microsoft Sans Serif", 11, #PB_Font_HighQuality)
Global FontGras = LoadFont(#Font_Gras, "Microsoft Sans Serif", 12, #PB_Font_Bold|#PB_Font_HighQuality)
Define.l x, y, T, FloatingMedium.f, cnt
Global MainWin, L = 390, H = 292
Global.i Mouvement, Direction
Global.c vitesse = 3
Global.b Droite = vitesse, gauche = -vitesse
#COULFOND = $F0DFD9
;---------------------------------------------------------------------
;- ** INCLUDES
;---------------------------------------------------------------------
XIncludeFile ("datas.pbi")
XIncludeFile ("tooltip_proce.pbi")
;---------------------------------------------------------------------
;- ** PROCEDURES
;---------------------------------------------------------------------
Procedure AnimeMessage()
; Message d'alerte animé
Direction = Droite
Mouvement = 0
GO = 1
Bleu = 0
Vert = 0
Repeat
ExamineMouse()
ExamineKeyboard()
If GO = 1
FlipBuffers()
ClearScreen(RGB(0, Vert, Bleu))
Mouvement + Direction
StartDrawing(ScreenOutput())
DrawText(Mouvement,H-20,"ALERTE ! ")
StopDrawing()
Debug "Mouvement : " + Str(Mouvement) ;-Test Mouvement
Delay(10)
If Mouvement > 333
Direction = gauche
cogne + 1
Debug "Cogne : "+ Str(cogne) ;- Test cogne
ElseIf Mouvement < 0
Direction = Droite
cogne + 1
Debug "Cogne : "+ Str(cogne) ;- Test cogne
EndIf
Bleu + 1
If Bleu > 254
Bleu = 254
Vert + 1
If Vert > 128
Vert = 128
EndIf
EndIf
If cogne = 4
ClearScreen(0)
GO = 0
EndIf
EndIf
Until MouseButton(#PB_MouseButton_Left) Or GO = 0 Or KeyboardPushed(#PB_Key_Escape)
ProcedureReturn 0
EndProcedure
Procedure Parasyte()
#filter = 0.2
#UpdateFreq = 100
Depart = ElapsedMilliseconds()
Repeat
FlipBuffers()
StartDrawing(ScreenOutput())
For y = 0 To H-1
For x = 0 To L-1
If Random(1)
Plot(x,y,#Black)
Else
Plot(x,y,#White)
EndIf
Next
Next
StopDrawing()
cnt + 1
If cnt >= #UpdateFreq
cnt = 0
EndIf
Delay(2)
Until ElapsedMilliseconds() > Depart + 400
ProcedureReturn 0
EndProcedure
;---------------------------------------------------------------------
;- ** PROGRAMME
;---------------------------------------------------------------------
;---------------------------------------------------------------------
;- ****** FENETRE PRINCIPALE *******
; ---------------------------------------------------------------------
MainWin = OpenWindow(#w0, 480, 258, 760, 443, "LDVM REMINDER", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
If MainWin = 0
MessageRequester ("Erreur", "Impossible d'ourir la fenêtre, ce programme va se terminer",#MB_ICONERROR|#PB_MessageRequester_Ok)
End
EndIf
; ---------------------------------------------------------------------
;- >>> MENU
; ---------------------------------------------------------------------
If CreateMenu(#Menu_w0, WindowID(#w0))
MenuTitle("Gestion des évènements")
EndIf
; ---------------------------------------------------------------------
;- >>> GADGETS GENERAUX
; ---------------------------------------------------------------------
ImageGadget(#IMG_TITRE, 2, 0, 757, 76, CatchImage(#ID_IMG_TITRE, ?ID_IMG_TITRE))
IMG_TITRE_Tooltip = GadgetBalloonToolTip(#w0, #IMG_TITRE, "Tête de linotte ! Pour mémoriser tous vos évènements !")
StringGadget(#AFF, 3, 397, 610, 23, "Bienvenue sur Tête de Linotte !", #PB_String_ReadOnly)
ButtonImageGadget(#BT_AIDE_APROPOS, 668, 397, 27, 24, CatchImage(#ID_IMG_BT_Apropos, ?ID_IMG_BT_Apropos))
BT_AIDE_APROPOS_Tooltip = GadgetBalloonToolTip(#w0, #BT_AIDE_APROPOS, "A propos de tête de Linotte ?")
ButtonImageGadget(#BT_PREF, 700, 397, 27, 24, CatchImage(#ID_IMG_BT_PREF, ?ID_IMG_BT_PREF))
BT_PREF_Tooltip = GadgetBalloonToolTip(#w0, #BT_PREF, "Préférences")
ButtonImageGadget(#BT_Don, 730, 397, 27, 24, CatchImage(#ID_BT_DON, ?ID_BT_DON))
BT_Don_Tooltip = GadgetBalloonToolTip(#w0, #BT_Don, "Faire un Don !")
TextGadget(#TXT_Liste_Event, 5, 75, 348, 20, "Liste des évènements à venir", #SS_CENTERIMAGE)
ListViewGadget(#ListEvent, 5, 100, 350, 270, #PB_ListView_ClickSelect)
ButtonGadget(#BT_MODIF_EVENT, 5, 374, 120, 20, "Modifier l'évènement", #BS_FLAT)
BT_MODIF_EVENT_Tooltip = GadgetBalloonToolTip(#w0, #BT_MODIF_EVENT, "Modifier lévènement sélectionné")
ButtonGadget(#BT_CLONER_EVENT, 128, 374, 105, 20, "Cloner l'évènement", #BS_FLAT)
BT_CLONER_EVENT_Tooltip = GadgetBalloonToolTip(#w0, #BT_CLONER_EVENT, "Modifier lévènement sélectionné")
ButtonGadget(#BT_SUP_EVENT, 235, 374, 120, 20, "Supprimer l'évènement", #BS_FLAT)
BT_SUP_EVENT_Tooltip = GadgetBalloonToolTip(#w0, #BT_SUP_EVENT, "supprimer l'évènement sélectionné.")
; ---------------------------------------------------------------------
;- >>> PANEL
; ---------------------------------------------------------------------
PanelGadget(#Panel, 360, 76, 395, 319)
;- Onglet 1 (numero 0) : Afficher le prochain évènement
AddGadgetItem(#Panel, -1, " Afficher le prochain évènement ")
;- Onglet 2 (numero 1) : Ajouter un évènement
AddGadgetItem(#Panel, -1, "Ajouter un évènement")
CalendarGadget(#Calendar, 3, 0, 230, 164, Date(), #PB_Calendar_Borderless)
TextGadget(#Txt_Categorie, 235, 5, 150, 20, "Choisissez une catégorie", #PB_Text_Center|#SS_CENTERIMAGE)
ComboBoxGadget(#Categorie, 235, 27, 150, 20)
Categorie_Tooltip = GadgetBalloonToolTip(#w0, #Categorie, "Choisissez la catégorie du futur évènement")
CheckBoxGadget(#CHK_Annuel, 236, 52, 150, 20, "Avertir une fois")
CheckBoxGadget(#Chk_jours, 236, 75, 150, 20, "Avertir tous les jours")
CheckBoxGadget(#CHK_Semaine, 236, 97, 150, 20, "Avertir chaque semaine")
CheckBoxGadget(#CHK_Mois, 236, 120, 150, 20, "Avertir chaque mois")
CheckBoxGadget(#CHK_annee, 236, 142, 150, 20, "Avertir chaque année")
TextGadget(#Txt_EVENT, 5, 165, 380, 20, "Titre de l'évenement (obligatoire)", #SS_CENTERIMAGE)
StringGadget(#EVENT_TITRE, 2, 187, 384, 20, "", #ES_CENTER)
EVENT_TITRE_Tooltip = GadgetBalloonToolTip(#w0, #EVENT_TITRE, "Incrivez ici le nom de l'évènement à venir")
TextGadget(#Txt_Descript_Event, 5, 210, 380, 20, "Descriptif de l'évènement (*optionnel)", #SS_CENTERIMAGE)
EditorGadget(#Descript_Event, 2, 233, 383, 40)
Descript_Event_Tooltip = GadgetBalloonToolTip(#w0, #Descript_Event, "Ecrire le descriptif de l'évènement à venir.")
ButtonGadget(#BT_AJOUT_EVENT, 2, 275, 385, 20, "Valider et enregistrer l'évènement")
;- Onglet 3 (numero 2) : Préférences
AddGadgetItem(#Panel, -1, "Préférences")
CheckBoxGadget(#PREF_Demarrage_Auto, 10, 5, 375, 20, "Démarrer Tête de Linotte avec Windows")
ImageGadget(#IMG_TRAIT, 7, 29, 375, 7, CatchImage(#ID_IMG_TRAIT, ?ID_IMG_TRAIT), #PB_Image_Border)
CheckBoxGadget(#PREF_PLAN, 10, 40, 375, 20, "Laisser la fenêtre au 1er plan")
ImageGadget(#IMG_TRAIT2, 7, 64, 375, 7, CatchImage(#ID_IMG_TRAIT2, ?ID_IMG_TRAIT), #PB_Image_Border)
CheckBoxGadget(#PREF_SON, 10, 76, 375, 20, "Activer le son")
ImageGadget(#IMG_TRAIT3, 8, 101, 375, 7, CatchImage(#ID_IMG_Trait3, ?ID_IMG_TRAIT), #PB_Image_Border)
TextGadget(#TXT_Gerer_cat, 5, 120, 377, 20, "Gérer les catégories", #PB_Text_Center|#SS_CENTERIMAGE)
ListViewGadget(#ListCategorie, 5, 147, 378, 120)
StringGadget(#CATEGORIE_MOD, 5, 270, 245, 20, "", #ES_CENTER)
ButtonGadget(#BT_AJOUT_CAT, 260, 270, 30, 22, "+")
BT_AJOUT_CAT_Tooltip = GadgetBalloonToolTip(#w0, #BT_AJOUT_CAT, "Ajouter / Modifier une catégorie")
ButtonGadget(#BT_SUPPR_CAT, 295, 270, 30, 22, "-")
BT_SUPPR_CAT_Tooltip = GadgetBalloonToolTip(#w0, #BT_SUPPR_CAT, "Supprimer la catégorie ")
CloseGadgetList()
SetActiveGadget(#Panel)
; ---------------------------------------------------------------------
;- >>> FONTS
; ---------------------------------------------------------------------
; Les Fonts
SetGadgetFont(#Txt_Descript_Event, FontID(#Font_Normal))
SetGadgetFont(#TXT_Gerer_cat, FontID(#Font_Normal))
SetGadgetFont(#TXT_Liste_Event, FontID(#Font_Normal))
SetGadgetFont(#BT_AJOUT_CAT, FontID(#Font_Gras))
SetGadgetFont(#BT_SUPPR_CAT, FontID(#Font_Gras))
; ---------------------------------------------------------------------
;- >>> COULEURS GADGETS / WINDOW
; ---------------------------------------------------------------------
SetGadgetColor(#EVENT_TITRE,#PB_Gadget_BackColor,$FFF5D9)
SetGadgetColor(#AFF,#PB_Gadget_BackColor,$0)
SetGadgetColor(#AFF,#PB_Gadget_FrontColor,$FF80)
SetGadgetColor(#Descript_Event,#PB_Gadget_BackColor,$FFF5D9)
SetGadgetColor(#TXT_Liste_Event,#PB_Gadget_BackColor,#COULFOND)
SetGadgetColor(#TXT_Gerer_cat,#PB_Gadget_BackColor,#COULFOND)
SetGadgetColor(#CATEGORIE_MOD,#PB_Gadget_BackColor,#COULFOND)
SetWindowColor(#w0, #COULFOND)
;---------------------------------------------------------------------
;- ** BOUCLE PRINCIPALE
;---------------------------------------------------------------------
Repeat
Select WindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Panel
Select EventType()
Case #PB_EventType_LeftClick
Onglet = GetGadgetState(#Panel)
Debug "Onglet : " +Str(Onglet+1)
EndSelect
If Onglet = 0 ; Si c'est l'ecran affichant la fenêtre 2D
; ---------------------------------------------------------------------
;- ****** SCREEN *******
; ---------------------------------------------------------------------
OpenWindowedScreen(MainWin,362, 100, L, H, 0, 0, 0,#PB_Screen_NoSynchronization)
cogne = 0
; ---------------------------------------------------------------------
;- >>> PARASYTES
; ---------------------------------------------------------------------
If Parasyte() = 0
; ---------------------------------------------------------------------
;- >>> MESSAGE ANIME
; ---------------------------------------------------------------------
AnimeMessage()
EndIf
ElseIf Onglet = 1
If EventType() = #PB_EventType_LeftClick
Debug "Clic 2"
EndIf
ElseIf Onglet = 2
If EventType() = #PB_EventType_LeftClick
Debug "Clic 3"
EndIf
EndIf
Case #Calendar
Case #Categorie
Case #CHK_Annuel
Case #Chk_jours
Case #CHK_Semaine
Case #CHK_Mois
Case #CHK_annee
Case #EVENT_TITRE
Case #AFF
Case #BT_AIDE_APROPOS
Case #BT_PREF
Case #BT_Don
Case #Descript_Event
Case #BT_AJOUT_EVENT
Case #PREF_Demarrage_Auto
Case #PREF_PLAN
Case #PREF_SON
Case #ListEvent
Case #BT_MODIF_EVENT
Case #BT_CLONER_EVENT
Case #BT_SUP_EVENT
Case #TXT_Gerer_cat
Case #ListCategorie
Case #CATEGORIE_MOD
Case #BT_AJOUT_CAT
Case #BT_SUPPR_CAT
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #w0
CloseWindow(#w0)
Break
EndSelect
EndSelect
ForEver
;
;}