Page 1 sur 1

Temps de reaction du programme

Publié : dim. 22/avr./2007 20:43
par lepiaf31
Bonsoir a vous,

je suis confronté a un petit probleme: il faut parfois que je clique plusieurs fois sur la croix pour fermer le programme ou sur un bouton pour activer les fonctions. Je ne montre pas mon code parce qu'il est long mais je vous demande si ca vous est deja arrivé ? et surtout pourquoi ?

Publié : dim. 22/avr./2007 21:46
par kuroyi
Bah, non. Pas encore (mais je suis un débutant en PB). Je constate plutôt que PB et les applications générées sont très véloces et réactives. Sur ma configuration j'avais fait des tests sous RealBasic et ce qui me prenait de 5 à 6s se passe maintenant sous PB de façon quasi instantanée (quand j'ai vu ça, j'ai immédiatement acheté une licence PB)..Après je me suis aperçu que l'exe PB ne faisiait qu'une dizane de ko et celui de RealBasic 5mo... Vu le prix des deux solutions, mon choix se passe d'autres explications.

Re: Temps de reaction du programme

Publié : dim. 22/avr./2007 21:55
par Backup
lepiaf31 a écrit :Bonsoir a vous,

je suis confronté a un petit probleme: il faut parfois que je clique plusieurs fois sur la croix pour fermer le programme ou sur un bouton pour activer les fonctions. Je ne montre pas mon code parce qu'il est long mais je vous demande si ca vous est deja arrivé ? et surtout pourquoi ?
c'est symptomatique d'un code mal ecrit !
ta boucle des event est tout simplement mal geré ! :)

Publié : lun. 23/avr./2007 17:43
par lepiaf31
J'ai beau cherché je ne voit pas ce qui ne va pas:

Code : Tout sélectionner

OpenWindow(0, 0, 0, 557, 574, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
CreateGadgetList(WindowID(0))

UsePNGImageDecoder()
If LoadImage(0, "C:\Documents and Settings\Kevin Serin\Bureau\testNewLog\logo.png")
  ImageGadget(4, 300, 20, 220, 110, ImageID(0))
Else
  MessageRequester("info", "impossible de charger l'image", #PB_MessageRequester_Ok)
EndIf

ListIconGadget(0, 10, 180, 400, 370, "Titre", 200)
AddGadgetColumn(0, 2, "où", 50)
AddGadgetColumn(0, 3, "Genre", 100)
AddGadgetColumn(0, 4, "Etat", 100)

ButtonGadget(1, 430, 180, 110, 40, "Ajouter", #PB_Button_Default)
ButtonGadget(2, 430, 240, 110, 40, "Modifier")
ButtonGadget(3, 430, 300, 110, 40, "Supprimer")

PostFilmNumber()
ListFilm()

Repeat
  Delay(1)
  Event = WaitWindowEvent()
  If Event = #PB_Event_Gadget
    Gadget = EventGadget()
    If Gadget = 1
      AddFilmRequester()
    ElseIf Gadget = 2
      ModifyFilm()
    EndIf
  EndIf    
Until WaitWindowEvent() = #PB_Event_CloseWindow

Publié : lun. 23/avr./2007 18:04
par Thierryfr
Au début du code il manque le IF avant Openwindow
et le IF avant CreateGadgetList(WindowID(0))

j'ai repris ton code
j'ai enlever quelque ligne ; mais ça marche !


Code : Tout sélectionner

If OpenWindow(0, 0, 0, 557, 574, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) 
If CreateGadgetList(WindowID(0)) 



ListIconGadget(0, 10, 180, 400, 370, "Titre", 200) 
AddGadgetColumn(0, 2, "où", 50) 
AddGadgetColumn(0, 3, "Genre", 100) 
AddGadgetColumn(0, 4, "Etat", 100) 

ButtonGadget(1, 430, 180, 110, 40, "Ajouter", #PB_Button_Default) 
ButtonGadget(2, 430, 240, 110, 40, "Modifier") 
ButtonGadget(3, 430, 300, 110, 40, "Supprimer") 


EndIf
Repeat 
  WaitWindowEvent() 
  Select WaitWindowEvent()
    Case  #PB_Event_CloseWindow
  fermer_0=1
  EndSelect 
  Until fermer_0=1
  EndIf
  End
ta boucle d'evenement est pas bonne voici la mienne :

Code : Tout sélectionner

Repeat 
  WaitWindowEvent() 
  Select WaitWindowEvent()
    Case  #PB_Event_CloseWindow
  fermer_0=1
  EndSelect 
  Until fermer_0=1
  EndIf
  End
au plaisir de t'aider

Publié : lun. 23/avr./2007 18:06
par Thierryfr
sinon je te conseil

de crée ton programme comme ceci ( c'est comme ça que j'ai appris )

Constante fenetre

Constante gadget

variables

creation de la procedure fenetre

creation de la boucle principale

Publié : lun. 23/avr./2007 18:10
par Jacobus
Comme l'a dit Dobro, c'est dans la gestion des évènements qu'il faut chercher. De plus je te conseillerai de tester ta fenêtre.
Il est important de bien distinguer chaque gadget dans la boucle, sinon tu vas rapidement t'y perdre dès que tu auras des dizaines ou centaines de gadgets à gérer.

[Edit] :) Grillé par vous autres, fait rien je le laisse quand même

Exemple avec ton bout de code

Code : Tout sélectionner

UsePNGImageDecoder() ; en tête de listing c'est mieux

;teste la création de la fenêtre et de la gadgetlist
If OpenWindow(0, 0, 0, 557, 574, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) 
 If CreateGadgetList(WindowID(0)) 
   
  If LoadImage(0, "C:\Documents and Settings\Kevin Serin\Bureau\testNewLog\logo.png") 
    ImageGadget(4, 300, 20, 220, 110, ImageID(0)) 
  Else 
    MessageRequester("info", "impossible de charger l'image", #PB_MessageRequester_Ok) 
  EndIf 
  
  ListIconGadget(0, 10, 180, 400, 370, "Titre", 200) 
  AddGadgetColumn(0, 2, "où", 50) 
  AddGadgetColumn(0, 3, "Genre", 100) 
  AddGadgetColumn(0, 4, "Etat", 100) 
  
  ButtonGadget(1, 430, 180, 110, 40, "Ajouter", #PB_Button_Default) 
  ButtonGadget(2, 430, 240, 110, 40, "Modifier") 
  ButtonGadget(3, 430, 300, 110, 40, "Supprimer") 
  
  ;PostFilmNumber() 
  ;ListFilm() 
 EndIf 
EndIf 
;Rends la lecture de ta boucle claire, que tu n'ais pas à chercher pendant des lustres à quoi correspond chaque élément. Il existe d'autres méthodes mais en voilà une simple et lisible. 
Repeat 
 Select WaitWindowEvent() 
  Case #PB_Event_Gadget  
    Select EventGadget()
    
    Case 1 : MessageRequester("info", "Bouton ajouter", #PB_MessageRequester_Ok)
    
    Case 2 : MessageRequester("info", "Bouton modifier", #PB_MessageRequester_Ok)
    
    Case 3 : MessageRequester("info", "Bouton Supprimer", #PB_MessageRequester_Ok)
    
    EndSelect 
    
  Case #PB_Event_CloseWindow :Quitter = 1
     
  EndSelect  
  
Until Quitter

End 

Publié : lun. 23/avr./2007 18:44
par kuroyi
Personnellement, je préfére utiliser des énumérations pour identifier mes gadgets par des noms #XXX plutôt qu'un numéro, ça donne un source plus lisible (enfin c'est mon avis).

Enumeration
#BTN_Ajouter
#BTN_Modifier
#BTN_Supprimer
EndEnumeration
...
ButtonGadget(#BTN_Ajouter, 430, 180, 110, 40, "Ajouter", #PB_Button_Default)
ButtonGadget(#BTN_Modifier, 430, 240, 110, 40, "Modifier")
ButtonGadget(#BTN_Supprimer, 430, 300, 110, 40, "Supprimer")
...
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #BTN_Ajouter : MessageRequester("info", "Bouton ajouter", #PB_MessageRequester_Ok)
Case #BTN_Modifier : MessageRequester("info", "Bouton modifier", #PB_MessageRequester_Ok)
Case #BTN_Supprimer : MessageRequester("info", "Bouton Supprimer", #PB_MessageRequester_Ok)

Publié : lun. 23/avr./2007 19:53
par lepiaf31
Merci beaucoup de vos reponses
Sujet resolu ! :D