Probleme d'event avec openWindowScreen

Programmation d'applications complexes
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Probleme d'event avec openWindowScreen

Message par Ar-S »

Je suis en train de bosser sur mon soft d'arvertisseur d'évènements.

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
;
;}

~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Probleme d'event avec openWindowScreen

Message par Backup »

pourquoi tu fais :

Code : Tout sélectionner

Case #Panel
         
          Select EventType()
            Case #PB_EventType_LeftClick
             
              Onglet = GetGadgetState(#Panel)
              Debug "Onglet : " +Str(Onglet+1)
tu récupere le clique gauche sur un panel ?

ça sert a rien ! :)
un panel te renverra toujours son numero du panel actilf grace a Onglet = GetGadgetState(#Panel)
t'as pas besoin de recuperer le clique souris pour ça ! ;)

pour le reste , tu peux utiliser un tread uniquement si tu veux que l'anim se poursuive alors que tu n'es plus dans l'onglet actif
sinon , c'est pas obligé , simplement lorsque tu ne sera pas sur l'onglet , ben ton anim ne marchera pas ,tant que t'es pas a nouveau dessus ...
(donc dans son Case)

je ne peux pas tester le code que tu as mis, il manque trop de truc..
je te dis donc tout ça de, visu ;)

pour le moment , tu peux virer

Code : Tout sélectionner

Select EventType()
            Case #PB_EventType_LeftClick
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Probleme d'event avec openWindowScreen

Message par Ar-S »

Yop. En fait c'est une habitude que j'ai pris par rapport à certain gadgets qui font apparaitre 2 fois la donnée dans le debug.

Regarde dans le debug lorsque tu joues avec les panels :
Si on ne met pas le EventType clique gauche, l'info est doublée !

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Panel_0
  #Panel1
EndEnumeration
;}
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 465, 206, 280, 257, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
       PanelGadget(#Panel_0, 5, 10, 200, 85)
        ; Tab #1
        AddGadgetItem(#Panel_0, -1, "Tab #1")
        ; Tab #2
        AddGadgetItem(#Panel_0, -1, "Tab #2")
      CloseGadgetList()
      PanelGadget(#Panel1, 5, 120, 200, 95)
        ; Tab #1
        AddGadgetItem(#Panel1, -1, "Tab #1")
        ; Tab #2
        AddGadgetItem(#Panel1, -1, "Tab #2")
      
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Select WaitWindowEvent()
      ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Panel_0
          Debug "Sans EventType"
          Debug GetGadgetState(#Panel_0)
          
          
        Case #Panel1
          If EventType() = #PB_EventType_LeftClick
            Debug "Avec EventType !"
            Debug GetGadgetState(#Panel1)
            
          EndIf
          
            
          
      EndSelect
      ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
ForEver
;
;}

~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Probleme d'event avec openWindowScreen

Message par Backup »

oui normal , puisque tu as le #WM_LBUTTONDOWN et le #WM_LBUTTONUP

mais quoiqu'il en soit la variable "onglet" aura bien la valeur de ton onglet
celle -ci est simplement récupéré par le click gauche , et son relâchement ;)


Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
	#Window_0
	#Panel_0
EndEnumeration
;}
;}
Procedure OpenWindow_Window_0()
	If OpenWindow(#Window_0, 450, 200, 280, 257, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
		PanelGadget(#Panel_0, 25, 35, 210, 185)
		; Tab #1
		AddGadgetItem(#Panel_0, -1, "Tab #1")
		; Tab #2
		AddGadgetItem(#Panel_0, -1, "Tab #2")
		
	EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
	Select WaitWindowEvent()
		; ///////////////////
		Case #PB_Event_Gadget
		Select EventGadget()
			Case #Panel_0
			onglet=GetGadgetState(#Panel_0)
			debug onglet
		EndSelect
		; ////////////////////////
		Case #PB_Event_CloseWindow
		Select EventWindow()
			Case #Window_0
			CloseWindow(#Window_0)
			Break
		EndSelect
	EndSelect
ForEver
;
;}
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Probleme d'event avec openWindowScreen

Message par blendman »

salut, j'ai regardé vite fait ton code.

Je pense que si c'est un "gros" projet, tu devrais encore plus séparer en petit fichier, ce serait plus facile de t'y retrouver.

J'ai remarqué plusieurs choses concernant tes problèmes :
- problème de souris : c'est lié à ExamineMouse(). Je pense que tu devrais l'enlever, il ne sert à rien (enlève aussi le mousebutton() au niveau du until de ta 1ère procedure.
- ensuite ton programme se bloque et pour cause : tu lances une procedure avec un repeat, donc, le programme se "bloque" dans cette procédure, jusqu'à ce que tu en sorte.
Il faut mieux faire ton affichage dans ta boucle principale, et éviter un repeat à l'intérieur d'un repeat dans ton cas, si ce n'est pas souhaité.

Par contre, tu devrais utiliser un canvas plutôt qu'un openwindowscreen(), ça t'éviterait ce genre de problème (souris, boucle dans une boucle..).

Je t'ai un petit zip d'exemple, en modifiant ton code, j'ai ça vite fait, juste pour que tu aies une idée générale de l'organisation, après à toi de voir comment tu veux arranger ça :
http://blendman.free.fr/dev/pb/ars/linotte_ars.zip

En espérant que ça te soit utile.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Probleme d'event avec openWindowScreen

Message par Ar-S »

Oui certes mais comme je disais, à la base, c'est une habitude (qui ne gêne pas) que j'ai pris, surtout pour les Combo avec des listes.
Pour revenir à mon problème ce n'est pas ce qui me gêne ^^

Une question me taraude.

Dans la création de ma fenêtre principale, la logique voudrait que je la crée dans ce sens :

CreationFenetre
> AjoutGadgets
> AjoutPanel
>> Ongle1
>>> CreationScreen
>>Onglet2
etc..

Hors si je fais ça le screen s'ouvre et apparait, peut importe les onglets, c'est l'anarchie.
J'ai donc procédé comme dans mon code en début de topic.

Est-ce la bonne marche à suivre ?
~~~~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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Probleme d'event avec openWindowScreen

Message par Ar-S »

blendman a écrit :salut, j'ai regardé vite fait ton code.

Je pense que si c'est un "gros" projet, tu devrais encore plus séparer en petit fichier, ce serait plus facile de t'y retrouver.

J'ai remarqué plusieurs choses concernant tes problèmes :
- problème de souris : c'est lié à ExamineMouse(). Je pense que tu devrais l'enlever, il ne sert à rien (enlève aussi le mousebutton() au niveau du until de ta 1ère procedure.
- ensuite ton programme se bloque et pour cause : tu lances une procedure avec un repeat, donc, le programme se "bloque" dans cette procédure, jusqu'à ce que tu en sorte.
Il faut mieux faire ton affichage dans ta boucle principale, et éviter un repeat à l'intérieur d'un repeat dans ton cas, si ce n'est pas souhaité.

Par contre, tu devrais utiliser un canvas plutôt qu'un openwindowscreen(), ça t'éviterait ce genre de problème (souris, boucle dans une boucle..).

Je t'ai un petit zip d'exemple, en modifiant ton code, j'ai ça vite fait, juste pour que tu aies une idée générale de l'organisation, après à toi de voir comment tu veux arranger ça :
http://blendman.free.fr/dev/pb/ars/linotte_ars.zip

En espérant que ça te soit utile.
Merci d'avoir pris du temps pour me répondre.
faut vraiment que j'étudie ce nouveau Canvas vu sa puissance... Je vais regarder tes modifs avec soin. Merci :)
~~~~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
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Probleme d'event avec openWindowScreen

Message par Mesa »

Je pense aussi qu'un canvas serait plus adapté sinon j'ai un léger mieux en ajoutant CloseScreen() dans Procedure AnimeMessage() après ProcedureReturn 0

Une solution de facilité serait de lancer un avi ou un gif animé.

Mesa.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Probleme d'event avec openWindowScreen

Message par Backup »

++1 :)

tu veux mettre un screen dans un onglet, le mieux serai de mettre un canvas (qui est un gadget_screen)
ce sera beaucoup plus simple :)
la gestion de la souris est comprise dedans en plus ;)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Probleme d'event avec openWindowScreen

Message par Ar-S »

Oui oui je passe au Canvas :P sa gestion à l'air bien moins chiant que l'openscreen classique.
Pour le moment je me fais un rendu 3D de Ciel (avec VUE d'Esprit) en image pour les futures annonces du logiciels.


---edit----

Presque 7 min pour le rendu en 640x480... J'avais oublié à quel point il est lent ce moteur de rendu (même si c'est beau)..
Ciel v0.1
Image
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Probleme d'event avec openWindowScreen

Message par Backup »

Ar-S a écrit : Presque 7 min pour le rendu en 640x480... J'avais oublié à quel point il est lent ce moteur de rendu (même si c'est beau)..
Ciel v0.1
c'est pas plutot ton bousin qui rame ? :mrgreen: :mrgreen: :lol:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Probleme d'event avec openWindowScreen

Message par Ar-S »

Voilà Monsieur à un i7 alors il crane :mrgreen: (t'as bien raison)
Sans rire, pour avoir brassé sur pas mal de soft 3D, VUE est vraiment incomparablement plus lent que ses cousins.

3DS avec un rendu MentalRay est bien plus rapide... Mais bien plus complexe pour générer des paysages.
(Faut dire que VUE permet des trucs de dingue. Créer une foret avec nuage et vent faisant bouger tout ça. (mais là vaut mieux un PC pour surfer et un qui génèrera le rendu ^^)
~~~~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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Probleme d'event avec openWindowScreen

Message par Backup »

je testai Vue d'esprit , il y a fort longtemps nous le trouvions dans certains magasine dédié au images
(depuis le Net, je n’achète plus de press Papier..)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Probleme d'event avec openWindowScreen

Message par Ar-S »

J'avais acheté la V4, il doivent en être à la 9 ou plus... M'en cague.. pour les rares fois ou je m'en sert..
~~~~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
Répondre