[RESOLU] La modification de texte ne se fait pas???

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

[RESOLU] La modification de texte ne se fait pas???

Message par microdevweb »

Bonjour,
J'ai une routine appelée par un timer qui doit afficher le temps dans un "gadget string". Mais la modification n'apparaît que si déplace la fenêtre avec la souris! Si quelqu'un voit le problème?.
NB: Il y a 2 "Thread" également dans le programme...


Thead 1

Code : Tout sélectionner

Procedure Compte_Temps(*value)
  Repeat
    gTemps_Ecoulees=Date()-gDate_Commancement
  ForEver
EndProcedure
Thead 2

Code : Tout sélectionner

Procedure ShowHideWindow(void)
  Repeat
    If GetAsyncKeyState_(#VK_F8) & $1
      If gMainformStatus = #False
        HideWindow(#Window_Main, #False)
        SetActiveWindow(#Window_Main)
        gMainformStatus = #True
      Else
        HideWindow(#Window_Main, #True)
        gMainformStatus = #False
      EndIf
    EndIf
  ForEver
EndProcedure

Code : Tout sélectionner

AddWindowTimer(#Window_Main,1,100)

Code : Tout sélectionner

Select EventID
        Case #PB_Event_Timer
          If EventTimer()=1 And GetGadgetState(#Gadget_Main_BT_PLAY)=1
            Affiche_Temps()
          EndIf

Code : Tout sélectionner

Procedure Affiche_Temps()
  Protected Temps_Projet=0,Heure=0,Reste=0,Minute=0,Temps_Tache=0,Requet$,secondes.i=0
  Temps_Projet=gTemps_Ecoulees+gTemp_Projet
  gCompteur_Sauvegarde+gTemps_Ecoulees
  If Temps_Projet>=3600
    Heure=Temps_Projet/3600
    Reste=Temps_Projet-(Heure*3600)
    Minute=Reste/60
    secondes=Temps_Projet-((Heure*3600)+(Minute*60))
  Else
    Minute=Temps_Projet/60
    secondes=Temps_Projet-(Minute*60)
  EndIf
  If Heure=0 : Temp_TXT$="00" : EndIf
  If Heure<10 And Heure>0 : Temp_TXT$="0" : EndIf
  If Heure>0 : Temp_TXT$+Str(Heure) : EndIf
  Temp_TXT$+"h"
  If Minute=0 : Temp_TXT$+"00" : EndIf
  If Minute<10 And Minute>0: Temp_TXT$+"0": EndIf
  If Minute>0 : Temp_TXT$+Str(Minute) : EndIf
  Temp_TXT$+"m"
  Temp_TXT$+Str(secondes)+"s"
  SetGadgetText(#Gadget_Main_S_Temps_Project,Temp_TXT$)
  Temps_Tache=gTemps_Ecoulees+gTemp_Projet
  SetActiveGadget(#Gadget_Main_S_Temps_Project)
  If Temps_Tache>=3600
    Heure=Temps_Tache/3600
    Reste=Temps_Tache-(Heure*3600)
    Minute=Reste/60
  Else
    Minute=Temps_Tache/60
  EndIf  
  If Heure=0 : Temp_TXT$="00" : EndIf
  If Heure<10 And Heure>0: Temp_TXT$="0" : EndIf
  If Heure>0 : Temp_TXT$+Str(Heure) : EndIf
  Temp_TXT$+"h"
  If Minute=0 : Temp_TXT$+"00" : EndIf
  If Minute<10 And Minute>0 : Temp_TXT$+"0" : EndIf
  If Minute>0 : Temp_TXT$+Str(Minute) : EndIf
  Temp_TXT$+"m"
  Temp_TXT$+Str(secondes)+"s"
  SetGadgetText(#Gadget_Main_S_Temps_Tache,Temp_TXT$)
  Requet$="UPDATE Project SET Temp_Ecouler='"+Str(Temps_Projet)+"' WHERE ID_Project='"+Str(gID_Projet)+"'"
  If Not DatabaseUpdate(0,Requet$)
    MessageRequester("Erreur Sqlite",DatabaseError())
    End
  EndIf
  Requet$="UPDATE Tache SET Temp_Ecouler='"+Str(Temps_Projet)+"' WHERE ID_Tache='"+Str(gID_Tache)+"'"
  If Not DatabaseUpdate(0,Requet$)
    MessageRequester("Erreur Sqlite",DatabaseError())
    End
  EndIf
 EndProcedure
Dernière modification par microdevweb le ven. 07/sept./2012 10:56, modifié 1 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: La modification de texte ne se fait pas???

Message par Backup »

la seule partie intéressante, tu ne l'affiche pas ..... (ta boucle d'event )

WaitWindowEvent()


essaye

WaitWindowEvent(2)
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: La modification de texte ne se fait pas???

Message par microdevweb »

Bonjour Dobro,

J'ai essayé le WaitEventwindows(2) et windowsEvent mais cela ne change rien, comme je le comprend le timer ne se fait que quant il y un évènement dans la fenêtre.

Code : Tout sélectionner

Repeat
      Gere_Blocage_Fenetre()
      Gere_BT_Win_Project()
      EventID  =WaitWindowEvent(2)
      MenuID   =EventMenu()
      GadgetID =EventGadget()
      WindowID =EventWindow()
      Select EventID
        Case #PB_Event_Timer
          If GetGadgetState(#Gadget_Main_BT_PLAY)=1
            Affiche_Temps()
          EndIf
        Case #PB_Event_CloseWindow
          If WindowID=#Window_Main
            HideWindow(#Window_Main,1)
          Else
            CloseWindow(GetActiveWindow())
          EndIf
        Case #PB_Event_Gadget
          Select GadgetID
              ;- Les gadgets de Main  
            Case #Gadget_Main_S_Project
            Case #Gadget_Main_S_Tache
            Case #Gadget_Main_BT_Projet_Open
              Main_Bt_Project_Open()
            Case #Gadget_Main_BT_Tache_Open
              Main_BT_Tache_Open()
            Case #Gadget_Main_S_Deb_Project
            Case #Gadget_Main_S_Deb_Tache
            Case #Gadget_Main_S_Temps_Project
            Case #Gadget_Main_S_Temps_Tache
            Case #Gadget_Main_BT_PLAY
              Main_BT_PLAY()
            Case #Gadget_Main_BT_CLOSE_TACHE
              Main_BT_CLOSE_TACHE()
            Case #Gadget_Main_BT_CLOSE_PROJECT
              Main_BT_CLOSE_PROJECT()
            Case #Gadget_Main_BT_Historique
              Main_BT_Historique()
            Case #Gadget_Main_BT_Exit
              HideWindow(#Window_Main,1)
              ;_
              ;- Les Gadget de Projet
            Case #Gadget_Project_BT_VALIDE
              Project_BT_VALIDE()
            Case #Gadget_Project_BT_New
              Project_BT_New()
            Case #Gadget_Project_BT_Edit
              Project_BT_Edit()
            Case #Gadget_Project_BT_Delete
              Project_BT_Delete()
            Case #Gadget_Project_BT_Exit 
              CloseWindow(#Window_Project)
            Case #Gadget_Project_Tab_Project
              ;Debug GetGadgetState(#Gadget_Project_Tab_Project)
              ;_
              ;- Les gadget de Projet_Fic
            Case #Gadget_Project_Fic_Bt_Valide
              Project_Fic_Bt_Valide()
            Case #Gadget_Project_Fic_Bt_Annule 
              CloseWindow(#Window_Project_Fic)
              ;_
              ;- Les gadget de Tache
            Case #Gadget_Tache_BT_VALIDE
              Tache_BT_VALIDE()
            Case #Gadget_Tache_BT_New
              Tache_BT_New()
            Case #Gadget_Tache_BT_Edit  
              Tache_BT_Edit()
            Case #Gadget_Tache_BT_Delete
              Tache_BT_Delete()
            Case #Gadget_Tache_BT_Exit
              CloseWindow(#Window_Tache)
              ;_
              ;- Les gadgets de Tache_Fic
            Case #Gadget_TacheFic_Bt_Valide
              TacheFic_Bt_Valide()
            Case #Gadget_TacheFic_Bt_Annule
              CloseWindow(#Window_TacheFic)
              ;_
              ;- Autre
              
              ;_
          EndSelect
        Case #PB_Event_SysTray
          If EventType()=#PB_EventType_LeftClick
            HideWindow(#Window_Main,0)
            SetActiveWindow(#Window_Main)
          EndIf
          If EventType()=#PB_EventType_RightClick
            DisplayPopupMenu(#MENU_POPUP,WindowID(#Window_Main))
          EndIf
        Case #PB_Event_Menu
          Select EventMenu()
            Case #MENU_QUITTER
              quitMain=1
              ;- Menu main
            Case #M_MAIN_OPEN_PROJECT
              Main_Bt_Project_Open()
            Case #M_MAIN_OPEN_TACHE
              Main_BT_Tache_Open()
            Case #M_MAIN_EXIT
              HideWindow(#Window_Main,1)
              ;_
              ;- Menu Project   
            Case #M_PROJECT_VALIDE
              Project_BT_VALIDE()
            Case #M_PROJECT_NEW
              Project_BT_New()
            Case #M_PROJECT_EDIT
              Project_BT_Edit()
            Case #M_PROJECT_DELETE
              Project_BT_Delete()
            Case #M_PROJECT_EXIT
              CloseWindow(GetActiveWindow())
            Case #M_MAIN_PLAY
              If GetGadgetState(#Gadget_Main_BT_PLAY)=0
                SetGadgetState(#Gadget_Main_BT_PLAY,1)
              Else
                SetGadgetState(#Gadget_Main_BT_PLAY,0)
              EndIf
              Main_BT_PLAY()
            Case #M_MAIN_STOP_TACHE
              
            Case #M_MAIN_STOP_PROJET
              
            Case #M_MAIN_HISTORIQUE
              
              ;_
              ;- Menu project_Fic
            Case #M_PROJECT_FIC_VALIDE
              Project_Fic_Bt_Valide()
            Case #M_PROJECT_FIC_ANNULE
              CloseWindow(#Window_Project_Fic)
              ;_
              ;- Menu Tache
            Case #M_TACHE_VALIDE 
              Tache_BT_VALIDE()
            Case #M_TACHE_NEW
              Tache_BT_New()
            Case #M_TACHE_EDIT
              Tache_BT_Edit()
            Case #M_TACHE_DELETE
              Tache_BT_Delete()
            Case #M_TACHE_EXIT
              CloseWindow(#Window_Tache)
              ;_
              ;- Menu Tache_Fic
            Case #M_TACHE_FIC_VALIDE
              TacheFic_Bt_Valide()
            Case #M_TACHE_FIC_ANNULE
              CloseWindow(#Window_TacheFic)
              ;_
              ;- Autre
              ;_            
          EndSelect
      EndSelect
  Until quitMain
  Sauve_Donnees()
  CloseWindow(#Window_Main)
EndIf
End
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: La modification de texte ne se fait pas???

Message par Backup »

oula , j'avais pas vu

tu melange les Thread avec un timer ??? 8O

a mon avis c'est soit Thread , soit Timer

pas les 2 , j'imagine le cirque sinon ... :?
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: La modification de texte ne se fait pas???

Message par microdevweb »

Bon voila la solution que j'ai trouvé,

ce code en lieu et place du Timer.

Code : Tout sélectionner

If GetGadgetState(#Gadget_Main_BT_PLAY)=1
        gCompteur_Sauvegarde+1
        If gCompteur_Sauvegarde=gSauve_a
          Affiche_Temps()
          gCompteur_Sauvegarde=0
        EndIf
      EndIf
Et comme la mise à jour des "GadgetString" ne se fait pas, j'utilise des "GadgetText" ou la ça fonctionne...
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: La modification de texte ne se fait pas???

Message par falsam »

Bonjour microdevweb:)

Meme code que tu as eu hier auquel j'ai ajouté ton timer qui compte un temps.
N'oublies pas la touche F8 pour faire apparaître la fenêtre.

Code : Tout sélectionner

Enumeration
  #Mainform
  #MenuPopUp
  
  #Time  
  #StartTime
  #ElapsedTime
EndEnumeration

Global MainformStatus.b

Procedure Compte_Temps()
  SetGadgetText(#Time, FormatDate("%hh:%ii:%ss", Date()))
  SetGadgetData(#Time, Date()) 
    
  SetGadgetText(#ElapsedTime, FormatDate("%hh:%ii:%ss", GetGadgetData(#Time)-GetGadgetData(#StartTime))) 
EndProcedure


Procedure ShowHideWindow(*Value)
  Repeat   
    If GetAsyncKeyState_(#VK_F8) & $1
     
      If MainformStatus = #False
        HideWindow(#MainForm, #False)
        MainformStatus = #True
        
      Else
        HideWindow(#Mainform, #True)
        MainformStatus = #False
      EndIf
     
    EndIf
  ForEver
EndProcedure

OpenWindow(#MainForm, 100, 150, 300, 100, "SysTray Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreatePopupMenu(#MenuPopUp)
MenuItem(0, "Afficher la fenetre")
MenuItem(1, "Quitter")

TextGadget(#PB_Any, 10, 20, 80, 20, "Il est")
TextGadget(#Time,100, 20, 80, 24, "00:00:00")

TextGadget(#PB_Any, 10, 45, 80, 20, "Début")
TextGadget(#StartTime,100, 45, 80, 24, "00:00:00")

TextGadget(#PB_Any, 10, 75, 80, 20, "Temps passé")
TextGadget(#ElapsedTime,100, 75, 80, 24, "00:00:00")

HideWindow(#Mainform, #True)

AddSysTrayIcon(1, WindowID(#Mainform), LoadIcon_(#Null, #IDI_WARNING))
SysTrayIconToolTip(1, "Touche F8" +#CRLF$+ "Pour afficher la fenetre")

AddWindowTimer(#Mainform, 123, 100)
CreateThread(@ShowHideWindow(), #Null)

;Initialisation de l'heure de début d"exécution
SetGadgetText(#StartTime, FormatDate("%hh:%ii:%ss", Date()))
SetGadgetData(#StartTime, Date()) 

Repeat
  Event = WaitWindowEvent()    
  
  If Event = #PB_Event_Timer And EventTimer() = 123
    Compte_Temps()
  EndIf    

  
  Select Event
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0
          HideWindow(#Mainform, #False)
        Case 1
          End 
      EndSelect
      
    Case #PB_Event_SysTray
      If EventType() = #PB_EventType_LeftDoubleClick
        HideWindow(#Mainform, #False)
      EndIf
      
      If EventType() = #PB_EventType_RightClick
        DisplayPopupMenu(#MenuPopUp, WindowID(#Mainform))
      EndIf
      
      
    Case #PB_Event_CloseWindow
      End
      
  EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: La modification de texte ne se fait pas???

Message par microdevweb »

Merci Falsam,

Je comprend toujours pas bien pourquoi la mise à jour ne fait pas sur un GadgetString m'enfin c'est pas grave.

Merci encore pour ton aide précieuse.

P.s. Au fait génial SQLITE Vision
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: La modification de texte ne se fait pas???

Message par falsam »

microdevweb a écrit :Je comprend toujours pas bien pourquoi la mise à jour ne fait pas sur un GadgetString
je viens de tester en remplaçant TextGadget par Stringgadget et ça fonctionne de la même manière.
microdevweb a écrit :P.s. Au fait génial SQLITE Vision
Je pourrais d'ailleurs m'y remettre à ce code.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: La modification de texte ne se fait pas???

Message par Mesa »

Tu peux t'inspirer de ce code (voir http://www.purebasic.fr/french/viewtopic.php?p=137336 )

Code : Tout sélectionner

Enumeration
		#Obj_Window0
		#Obj_Window1
		#Obj_String0
		#Obj_String1
EndEnumeration
Global d


Procedure Counter()
			HideWindow(#Obj_Window1, 0)
			Delay(100)
			For t = 1 To 10
				SetGadgetText(#Obj_String1,Str(t)+"/100")
					Debug t
					Delay (200)  ; 10*200 = 2000mS = 2s
			Next t
			
			HideWindow(#Obj_Window1, 1)
			
EndProcedure


If OpenWindow(#Obj_Window0,150,10,200,25,"Attendre 5 secondes")
		StringGadget(#Obj_String0,2,2,196,21,"Attendre 5 secondes")
		AddWindowTimer(#Obj_Window0, 100, 1*1000)  ; 1 seconde
		AddWindowTimer(#Obj_Window0, 500, 5*1000)  ; 5 secondes
		d = Date()
		
			OpenWindow(#Obj_Window1,150, 55,100,25,"Thread", #PB_Window_Tool, WindowID(#Obj_Window0))     
				TextGadget(#Obj_String1,2,2,96,21,"Cnt")
				SetGadgetColor(#Obj_String1, #PB_Gadget_BackColor, $FFFFFF)
				HideWindow(#Obj_Window1, 1) 
		
		Repeat
			
			Event = WaitWindowEvent()
					
			If Event = #PB_Event_Timer And EventTimer() = 100
				SetGadgetText(#Obj_String0,FormatDate("%hh:%ii:%ss",Date()-d))
			EndIf
			
			If Event = #PB_Event_Timer And EventTimer() = 500
				d = Date()
				Counter()
			EndIf 
			
		Until Event= #PB_Event_CloseWindow
		
EndIf
Mesa.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: La modification de texte ne se fait pas???

Message par microdevweb »

Problème résolu,

Une formule de calcul qui faisait des sienne merci mesa..
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre