Page 1 sur 2

probleme de rafraichissement

Publié : mer. 08/mars/2006 11:09
par bison56
bonjour,

j ai une fenetre principale qui est rafraichit par l'appel d'une procedure dans un callback.
lorsque que j'ouvre une autre fenetre a partir du menu, le rafraichissement s'effectue sur la 2eme fenetre et non pas sur la fenetre principale.
Comment rafraichir seulement ma fenetre principale meme si c'est la 2eme fenetre qui a le focus ?

merci
bison56

Tu utilise bine ça?

Publié : mer. 08/mars/2006 11:18
par meganet
Tu utilise bien le bonne hidentifiant de fenêtre?
Tu à pas attribuer par example WindowID=WindowID(0) et WindowID=WindowID(1) se qui fait que quand tu rafréchie WindowID ça réactualise la 2eme fenêtre et pas la première?
Si tu posterai un example de code, ça cerai mieu!

Publié : mer. 08/mars/2006 11:19
par Dr. Dri
Bienvenue, je n'ai pas compris de quelle manière tu t'y prends pour le rafraichissement... Sinon comment t'as entendu parler du pure ? ^^

Dri

Publié : mer. 08/mars/2006 11:28
par bison56
voila un morceau du code...

OpenWindow(#Window_0, 350, 100, 406, 580, "fenetre principale")

...blablabla....

Procedure Affiche_Scores()
EnableWindow_(WindowID(#Window_0), 0)
OpenWindow(#Window_1, 533, 373, 282, 195, "fenetre secondaire")
..blablabla...
Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
EnableWindow_(WindowID(#Window_0), 1)
CloseWindow(#Window_1)
EndProcedure

Procedure CallBack(Hnd,msg,wParam,lParam)
Resultat = #PB_ProcessPureBasicEvents
Select msg
Case #WM_PAINT : Rafraichir_Affichage_Window0()
EndSelect
ProcedureReturn Resultat
EndProcedure

Procedure Rafraichir_Affichage_Window0()
;reaffiche les gadget images
endprocedure

Pour moi c'est bon je pence.

Publié : mer. 08/mars/2006 12:00
par meganet
A première vue, ton code est bon. Mintenant, il faut voir peut-être la dernière procedure qui bug. Tu le compile avec quel version de PB 4.0 ou 3.94? Si c'est avec la 4.0, tu à essayer avec al 3.94? C'est peut-être un bug.

J'avais oublié.

Publié : mer. 08/mars/2006 12:02
par meganet
J'avais oublié, tu à bien déclarer tes procedures, vue qu'elle ne son pas dans l'ordre?

Publié : mer. 08/mars/2006 12:06
par bison56
le truc c'est que la procedure affiche_score() affiche egalement des gadget images sur la fenetre secondaire ce qui a pour consequence de lancer le rafraichissement dans la procedure callback qui affiche donc sur la fenetre secondaire ce qui devrait etre affiche sur la fenetre principale.

:?

Publié : mer. 08/mars/2006 12:07
par bison56
oui oui, les procedures sont bien declarees

Tu utilise quoi?

Publié : mer. 08/mars/2006 12:34
par meganet
Tu utilise quel version pour le compiler?

Publié : mer. 08/mars/2006 12:37
par bison56
j utilise la version 3.94

Publié : mer. 08/mars/2006 14:55
par brossden
Je n'ai pas bien compris le problème mais peut être une réponse avec se programme !

Code : Tout sélectionner


Enumeration
  #Window_0
  #Window_1
  #Listview_0
  #Button_0
  #CheckBox_0
EndEnumeration
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 423, 159, 400, 300,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
    If CreateGadgetList(WindowID())
      ListViewGadget(#Listview_0, 40, 20, 170, 270)
      ButtonGadget(#Button_0, 250, 10, 90, 30, "Ajout de ligne")
      CheckBoxGadget(#CheckBox_0, 250, 60, 110, 20, "Avec Régénération")
    EndIf
  EndIf
EndProcedure
Open_Window_0()
Repeat 
  Event = WaitWindowEvent() 
  WindowID = EventWindowID() 
  GadgetID = EventGadgetID() 
  EventType = EventType()
  If Event = #PB_EventGadget
    ClearGadgetItemList(#Listview_0)
    UpdateWindow_(WindowID(#Window_0))
    If GadgetID = #Button_0
     OpenWindow(#Window_1, 650, 300, 100, 100,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window (1)")
      For n = 1 To 20

        ;La ligne qui tue !!!! lol
        AddGadgetItem(#Listview_0,-1,"Ligne "+Str(n)) ; pour voir l'effacement de la liste plusieur appuis sur le bouton

        If GetGadgetState(#CheckBox_0) 
        
          ; Encore la ligne qui tue !!!! lol 
          res = UpdateWindow_(WindowID(#Window_0))

          EndIf
        Delay(30)
      Next
      CloseWindow(#Window_1) 
  EndIf
  EndIf
Until Event = #PB_Event_CloseWindow 
End

Publié : mer. 08/mars/2006 15:29
par bison56
Je pense qu'il me suffirait de connaitre la fonction qui me ramene l'id de la fenetre active, et comme ca, je ne lance le rafraichissement que si ma fenetre active est #Window_0

kelk1 connais la fonction ?

merci d'avance !
bison56

Publié : mer. 08/mars/2006 15:40
par brossden
As tu essayé mon petit bout de code ?

Publié : mer. 08/mars/2006 15:45
par bison56
oui je l ai essaye, mais ca ne rafraichit pas. il reste la trace de la fenetre secondaire sur la fenetre principale lorsque je quitte la fenetre secondaire

sniff

Publié : mer. 08/mars/2006 15:52
par brossden
Tu ne pourrais pas nous donner ton code en totalité parce que je ne comprend vraiment pas le problème. Un code simplifié si celuici est trop gros !! mais qui ne bug pas au lancement !!
et pour ce qui est de ID de la fenetre le code c'est :

WindowID(#Window_0) dans ton cas !