Page 1 sur 1

Trop de gadgets ?

Publié : mar. 18/déc./2007 18:49
par Oliv
Bonjour,
J'ai fait cette interface, seulement je trouve que le chargement des gadgets est long : On voit les gadgets se dessiner un à un quand on change d'onglet ou quand ouvre la fenêtre. Est-ce moi qui ai loupé quelquechose ? ça m'étonne que mon PC soit dépassé ou que j'ai mis trop de gadgets....
Vous auriez une idée ? Désactiver les gagdets non affichés ?

Merci

Code : Tout sélectionner

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Principale
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #Quitter
  #Aide
  #A_Propos
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Panel
  #Liste_Musique
  #Ajouter
  #Retirer
  #Lire
  #Suivant
  #Frame_Opt_Gales
  #Text_Opt_Gales
  #Text_3
  #Text_4
  #S_Serie
  #S_Token
  #Frame_Opt_Musique
  #Text_Opt_Musique
  #Text_Port
  #S_Port
  #Frame3D_3
  #Text_8
  #Editor_0
  #Envoyer_Message
  #Frame_Oreilles
  #Text_9
  #Text_10
  #S_Pos_GActuelle
  #S_Pos_DActuelle
  #Text_18
  #S_Pos_GSouhait
  #S_Pos_DSouhait
  #Envoyer_Oreilles
  #Text_Voix
  #Frame3D_5
  #Text_Radio
  #Text_Vitesse
  #Text_Frequence
  #Combo_Voix
  #Spin_Vitesse
  #Spin_Frequence
  #Button_Enregistrer
  #Defaut
  #Combo_Radio
  #Ecouter
  #Text_23
  #Text_24
  #Frame3D_6
  #Text_25
  #Status
EndEnumeration


Procedure Open_Principale()
  If OpenWindow(#Principale, 268, 225, 650, 400, "Nom Fenetre",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_0, WindowID(#Principale))
      MenuTitle("Fichier")
      MenuItem(#Quitter, "Quitter")
      MenuTitle("Aide")
      MenuItem(#Aide, "Aide...")
      MenuItem(#A_Propos, "A Propos...")
      EndIf

      If CreateGadgetList(WindowID(#Principale))
        
        ;- Panel
        PanelGadget(#Panel, 1, 0, 649, 380)
        AddGadgetItem(#Panel, -1, "Commandes")
        Frame3DGadget(#Frame3D_3, 7, 8, 480, 170, "")
        TextGadget(#Text_8, 17, 18, 100, 20, "Envoyer un message")
        EditorGadget(#Editor_0, 17, 48, 310, 90)
        ButtonGadget(#Envoyer_Message, 307, 148, 130, 20, "Envoyer")
        Frame3DGadget(#Frame_Oreilles, 7, 188, 210, 160, "")
        TextGadget(#Text_9, 17, 198, 100, 20, "Oreilles")
        TextGadget(#Text_10, 37, 218, 150, 20, "Position actuelle", #PB_Text_Center)
        StringGadget(#S_Pos_GActuelle, 57, 238, 50, 20, "", #PB_String_ReadOnly)
        StringGadget(#S_Pos_DActuelle, 117, 238, 50, 20, "", #PB_String_ReadOnly)
        TextGadget(#Text_18, 37, 268, 160, 20, "Position souhaitée", #PB_Text_Center)
        StringGadget(#S_Pos_GSouhait, 57, 288, 50, 20, "")
        StringGadget(#S_Pos_DSouhait, 117, 288, 50, 20, "")
        ButtonGadget(#Envoyer_Oreilles, 67, 318, 100, 20, "Envoyer")
        TextGadget(#Text_Voix, 337, 48, 55, 20, "Voix", #PB_Text_Center)
        Frame3DGadget(#Frame3D_5, 236, 188, 250, 160, "")
        TextGadget(#Text_Radio, 246, 198, 80, 20, "Radio")
        TextGadget(#Text_Vitesse, 337, 78, 55, 20, "Vitesse", #PB_Text_Center)
        TextGadget(#Text_Frequence, 337, 108, 55, 20, "Fréquence", #PB_Text_Center)
        ComboBoxGadget(#Combo_Voix, 407, 48, 70, 20)
        SpinGadget(#Spin_Vitesse, 407, 78, 70, 20, 0, 10)
        SpinGadget(#Spin_Frequence, 407, 108, 70, 20, 0, 10)
        ComboBoxGadget(#Combo_Radio, 257, 278, 220, 20)
        ButtonGadget(#Ecouter, 346, 308, 130, 20, "Ecouter")
        TextGadget(#Text_23, 256, 228, 220, 20, "Sélectionnez une radio ou entrez une adresse")
        TextGadget(#Text_24, 256, 238, 220, 20, "sous la forme Adresse:Port")
        Frame3DGadget(#Frame3D_6, 497, 188, 140, 160, "")
        TextGadget(#Text_25, 507, 198, 70, 20, "Sommeil")
        ButtonGadget(#Status, 527, 268, 90, 30, "Endormir")
        AddGadgetItem(#Panel, -1, "Musique")
        
        ;-
        ListIconGadget(#Liste_Musique, 7, 8, 630, 310, "Fichier", 100, #PB_ListIcon_CheckBoxes | #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_HeaderDragDrop)
        ButtonGadget(#Ajouter, 84, 328, 100, 20, "Ajouter")
        ButtonGadget(#Retirer, 194, 328, 100, 20, "Retirer")
        ButtonGadget(#Lire, 414, 328, 150, 20, "Lire")
        ButtonGadget(#Suivant, 304, 328, 100, 20, "Suivant")
        AddGadgetItem(#Panel, -1, "Options")
        Frame3DGadget(#Frame_Opt_Gales, 7, 8, 480, 150, "")
        TextGadget(#Text_Opt_Gales, 17, 18, 110, 20, "Options générales")
        TextGadget(#Text_3, 196, 38, 100, 20, "Numéro de série :")
        TextGadget(#Text_4, 196, 78, 100, 20, "Numéro de token :")
        StringGadget(#S_Serie, 306, 38, 150, 20, "")
        StringGadget(#S_Token, 306, 78, 150, 20, "", #PB_String_Numeric)
        Frame3DGadget(#Frame_Opt_Musique, 7, 168, 190, 180, "")
        TextGadget(#Text_Opt_Musique, 17, 178, 100, 20, "Options musique")
        TextGadget(#Text_Port, 57, 218, 40, 20, "Port :")
        StringGadget(#S_Port, 107, 218, 80, 20, "", #PB_String_Numeric)
        ButtonGadget(#Button_Enregistrer, 277, 128, 90, 20, "Enregistrer")
        ButtonGadget(#Defaut, 377, 128, 100, 20, "Valeurs par defaut")
        CloseGadgetList()
        
      EndIf
    EndIf
EndProcedure

Open_Principale()


Repeat
  Select WindowEvent()
    Case #PB_Event_CloseWindow
      Sortie = 1
    Case #PB_Event_Menu
      Select EventMenu()
        Case #Quitter
          Sortie = 1
      EndSelect
  EndSelect
  Delay(10)
Until Sortie = 1

End

Publié : mar. 18/déc./2007 19:03
par Thyphoon
ça me fait ça aussi lorsqu'il y a beaucoup de gadget... Bon c'est pas vraiment génant ça se voit mais ça ne dure que 2 ou 3 sec max.
Mais c'est vrai que ce n'est pas tres jolies....
j'ai aussi testé avec l'option SmartWindowRefresh(#Fenetre, Etat) mais ça ne change rien

Publié : mar. 18/déc./2007 20:08
par Jacobus
Commente le Delay(10)
D'ailleurs pourquoi l'avoir mis ?

Autre chose, lorsque tu dois afficher plusieurs centaines de gadgets et afin de ne pas voir le dessin en cours de la fenêtre, il est possible de la rendre invisible durant sa création et de ne l'afficher qu'après.
Ton code ainsi modifié donne ça :

Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Principale
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #Quitter
  #Aide
  #A_Propos
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Panel
  #Liste_Musique
  #Ajouter
  #Retirer
  #Lire
  #Suivant
  #Frame_Opt_Gales
  #Text_Opt_Gales
  #Text_3
  #Text_4
  #S_Serie
  #S_Token
  #Frame_Opt_Musique
  #Text_Opt_Musique
  #Text_Port
  #S_Port
  #Frame3D_3
  #Text_8
  #Editor_0
  #Envoyer_Message
  #Frame_Oreilles
  #Text_9
  #Text_10
  #S_Pos_GActuelle
  #S_Pos_DActuelle
  #Text_18
  #S_Pos_GSouhait
  #S_Pos_DSouhait
  #Envoyer_Oreilles
  #Text_Voix
  #Frame3D_5
  #Text_Radio
  #Text_Vitesse
  #Text_Frequence
  #Combo_Voix
  #Spin_Vitesse
  #Spin_Frequence
  #Button_Enregistrer
  #Defaut
  #Combo_Radio
  #Ecouter
  #Text_23
  #Text_24
  #Frame3D_6
  #Text_25
  #Status
EndEnumeration


Procedure Open_Principale()
  If OpenWindow(#Principale, 268, 225, 650, 400, "Nom Fenetre",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar |#PB_Window_Invisible )
    If CreateMenu(#MenuBar_0, WindowID(#Principale))
      MenuTitle("Fichier")
      MenuItem(#Quitter, "Quitter")
      MenuTitle("Aide")
      MenuItem(#Aide, "Aide...")
      MenuItem(#A_Propos, "A Propos...")
      EndIf

      If CreateGadgetList(WindowID(#Principale))
       
        ;- Panel
        PanelGadget(#Panel, 1, 0, 649, 380)
        AddGadgetItem(#Panel, -1, "Commandes")
        Frame3DGadget(#Frame3D_3, 7, 8, 480, 170, "")
        TextGadget(#Text_8, 17, 18, 100, 20, "Envoyer un message")
        EditorGadget(#Editor_0, 17, 48, 310, 90)
        ButtonGadget(#Envoyer_Message, 307, 148, 130, 20, "Envoyer")
        Frame3DGadget(#Frame_Oreilles, 7, 188, 210, 160, "")
        TextGadget(#Text_9, 17, 198, 100, 20, "Oreilles")
        TextGadget(#Text_10, 37, 218, 150, 20, "Position actuelle", #PB_Text_Center)
        StringGadget(#S_Pos_GActuelle, 57, 238, 50, 20, "", #PB_String_ReadOnly)
        StringGadget(#S_Pos_DActuelle, 117, 238, 50, 20, "", #PB_String_ReadOnly)
        TextGadget(#Text_18, 37, 268, 160, 20, "Position souhaitée", #PB_Text_Center)
        StringGadget(#S_Pos_GSouhait, 57, 288, 50, 20, "")
        StringGadget(#S_Pos_DSouhait, 117, 288, 50, 20, "")
        ButtonGadget(#Envoyer_Oreilles, 67, 318, 100, 20, "Envoyer")
        TextGadget(#Text_Voix, 337, 48, 55, 20, "Voix", #PB_Text_Center)
        Frame3DGadget(#Frame3D_5, 236, 188, 250, 160, "")
        TextGadget(#Text_Radio, 246, 198, 80, 20, "Radio")
        TextGadget(#Text_Vitesse, 337, 78, 55, 20, "Vitesse", #PB_Text_Center)
        TextGadget(#Text_Frequence, 337, 108, 55, 20, "Fréquence", #PB_Text_Center)
        ComboBoxGadget(#Combo_Voix, 407, 48, 70, 20)
        SpinGadget(#Spin_Vitesse, 407, 78, 70, 20, 0, 10)
        SpinGadget(#Spin_Frequence, 407, 108, 70, 20, 0, 10)
        ComboBoxGadget(#Combo_Radio, 257, 278, 220, 20)
        ButtonGadget(#Ecouter, 346, 308, 130, 20, "Ecouter")
        TextGadget(#Text_23, 256, 228, 220, 20, "Sélectionnez une radio ou entrez une adresse")
        TextGadget(#Text_24, 256, 238, 220, 20, "sous la forme Adresse:Port")
        Frame3DGadget(#Frame3D_6, 497, 188, 140, 160, "")
        TextGadget(#Text_25, 507, 198, 70, 20, "Sommeil")
        ButtonGadget(#Status, 527, 268, 90, 30, "Endormir")
        AddGadgetItem(#Panel, -1, "Musique")
       
        ;-
        ListIconGadget(#Liste_Musique, 7, 8, 630, 310, "Fichier", 100, #PB_ListIcon_CheckBoxes | #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_HeaderDragDrop)
        ButtonGadget(#Ajouter, 84, 328, 100, 20, "Ajouter")
        ButtonGadget(#Retirer, 194, 328, 100, 20, "Retirer")
        ButtonGadget(#Lire, 414, 328, 150, 20, "Lire")
        ButtonGadget(#Suivant, 304, 328, 100, 20, "Suivant")
        AddGadgetItem(#Panel, -1, "Options")
        Frame3DGadget(#Frame_Opt_Gales, 7, 8, 480, 150, "")
        TextGadget(#Text_Opt_Gales, 17, 18, 110, 20, "Options générales")
        TextGadget(#Text_3, 196, 38, 100, 20, "Numéro de série :")
        TextGadget(#Text_4, 196, 78, 100, 20, "Numéro de token :")
        StringGadget(#S_Serie, 306, 38, 150, 20, "")
        StringGadget(#S_Token, 306, 78, 150, 20, "", #PB_String_Numeric)
        Frame3DGadget(#Frame_Opt_Musique, 7, 168, 190, 180, "")
        TextGadget(#Text_Opt_Musique, 17, 178, 100, 20, "Options musique")
        TextGadget(#Text_Port, 57, 218, 40, 20, "Port :")
        StringGadget(#S_Port, 107, 218, 80, 20, "", #PB_String_Numeric)
        ButtonGadget(#Button_Enregistrer, 277, 128, 90, 20, "Enregistrer")
        ButtonGadget(#Defaut, 377, 128, 100, 20, "Valeurs par defaut")
        CloseGadgetList()
       
      EndIf
    EndIf
EndProcedure

Open_Principale()
HideWindow(#Principale, 0)

Repeat
  Select WindowEvent()
    Case #PB_Event_CloseWindow
      Sortie = 1
    Case #PB_Event_Menu
      Select EventMenu()
        Case #Quitter
          Sortie = 1
      EndSelect
  EndSelect
 ; Delay(10)
Until Sortie = 1

End

Publié : mar. 18/déc./2007 20:20
par Thyphoon
Jacobus a écrit :Commente le Delay(10)
D'ailleurs pourquoi l'avoir mis ?
ça marche ... j'aurais jamais penser a ça lollllllllllll :lol:
j'étais persuadé que le rafraichissement des fenetre était gerer en parallèle part windows et pas directement part le programme ...
comme quoi ...

Publié : mar. 18/déc./2007 20:47
par comtois
tu peux mettre un delay(), faut juste vérifier qu'il n'y a pas d'évènements à traiter , et les gadgets sont affichés correctement.

Code : Tout sélectionner

Select WindowEvent()
    Case 0
      Delay(10)
Jacobus a écrit :Commente le Delay(10)
D'ailleurs pourquoi l'avoir mis ?
Pour ne pas bouffer 100% de CPU ?

Publié : mar. 18/déc./2007 20:58
par Guimauve
Il suffit de remplacer WindowEvent() par WaitWindowEvent() et le programme de prendra pas 100% du CPU et le Delay(10) deviendra totalement inutile.

A+
Guimauve

Publié : mar. 18/déc./2007 21:00
par Jacobus
Guimauve a écrit :Il suffit de remplacer WindowEvent() par WaitWindowEvent() et le programme de prendra pas 100% du CPU et le Delay(10) deviendra totalement inutile.

A+
Guimauve
Je préfère ça aussi

forum application

Publié : mar. 18/déc./2007 21:49
par beauregard
Jacobus a écrit :
Guimauve a écrit :Il suffit de remplacer WindowEvent() par WaitWindowEvent() et le programme de prendra pas 100% du CPU et le Delay(10) deviendra totalement inutile.
Cela s'applique uniquement pour les applications, et non pas pour les jeux, ai-je bien compris ?

Publié : mar. 18/déc./2007 21:55
par Oliv
Merci :)

Comme le dis Comtois, le Delay() est pour libérer les ressources. Je ne peux pas utiliser WaitWindowEvent() car le programme doit pouvoir fonctionner aussi pour le réseau, donc si il est désactivé.
En tout cas merci Comtois, ta solution est la meilleure :D . Par contre j'aimerai comprendre : pourquoi le rafraichissement de la fenêtre dépend du temps d'éxécution de la boucle ? Quelqu'un sait comment c'est géré ?

Beauregard : Oui, en fait WaitWindowEvent() bloque la fenêtre jusqu'a ce qu'un évènement intervienne dessus.

Edit : Il y a maintenant un paramètre qui permet de tout combiner : WaitWindowEvent(10) :P

Publié : mar. 18/déc./2007 22:11
par beauregard
Oliv a écrit : Quelqu'un sait comment c'est géré ?
ché pas, l'ignare que je suis testerai en rajoutant un flip, hum, ou en excutant une partie de ton code 1 fois sur 2...

Publié : mar. 18/déc./2007 22:11
par RV
Oliv a écrit :Je ne peux pas utiliser WaitWindowEvent() car le programme doit pouvoir fonctionner aussi pour le réseau, donc si il est désactivé.
Tu peux mettre à la place un WaitWindowEvent(10) :wink:
Ainsi ta boucle sera passée en revue toutes les 10ms même si aucun évènement n'intervient et la aussi ton appli ne prendra pas tout le temps process.

Publié : mar. 18/déc./2007 22:42
par Oliv
RV a écrit :
Oliv a écrit :Je ne peux pas utiliser WaitWindowEvent() car le programme doit pouvoir fonctionner aussi pour le réseau, donc si il est désactivé.
Tu peux mettre à la place un WaitWindowEvent(10) :wink:
Ainsi ta boucle sera passée en revue toutes les 10ms même si aucun évènement n'intervient et la aussi ton appli ne prendra pas tout le temps process.
Oui c'est ce que j'ai vu. C'était pas là quand j'ai commencé et ça a jamais été dans l'historique des changement ça, du coup hop, à la trappe :lol: :lol:

Publié : mer. 19/déc./2007 14:33
par gnozal
Il est toujours possible d'utiliser #PB_Window_Invisible à la création de la fenêtre puis de la montrer avec HideWindow() lorque tous les gadgets ont été créés.
Ou s'amuser avec le message WM_SETREDRAW ...