Page 1 sur 1

pb recuperation identifiant fenetre programme exterieur

Publié : ven. 23/juin/2006 8:50
par david
voici un bout de mon code.

l'appuie sur le bouton calculatrice lance la calculatrice
ligne 38 j'essaie de récupérer son numéro de fenetre pour la forcer a toujours etre apparente.
le delay (sans doute pas utile) pour laisser le temps a l'ordi de realiser l'arriver d'une nouvelle fenetre...

au bout de quelques clics sur l'une et l'autre des fenetres (la mienne et celle de la calculatrice) ca bug.

après mon idée c'est de forcer la calculatrice a se positionner aux coordonnees que je lui indique alors vous voyez c'est pas gagne.

si quelqu'un peut m'aider...
PS:j'ai bien essayé aussi d'utiliser WindowID = WindowID(Fenetre)....
mais rien n'y fait

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Rintern
EndEnumeration
;
;- MenuBar Constants
Enumeration
  #MenuBar_43
EndEnumeration
;
;- Gadget Constants
Enumeration
   #ECRANcaisse
   #calculator
 EndEnumeration

  If OpenWindow(#ECRANcaisse, 0, 0, 1272, 732, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_43, WindowID(#Rintern))
      EndIf

      If CreateGadgetList(WindowID(#Rintern))
        ButtonGadget(#calculator, 340, 650, 60, 40, "calculatrice")
     
         
         ;La boucle Repeat-Until sert à la gestion des évènements 
         Repeat 
          Event = WaitWindowEvent () ; on récupère un évènement 
             Select Event ; on sélectionne cet évènement 
                 Case #PB_Event_Gadget ; cet évènement concerne une action sur un Gadget 
                     Select EventGadget () ; dans ce cas, on récupère l'identifiant du gadget qui l'a créé 
                  ;       Case #Button_1 ; on compare l'identifiant à #ButtonGadget 
                  ;           Debug "bouton 1" 
                  ;       Case #Button_2 ; on compare l'identifiant à #ButtonGadget 
                   ;           Debug "bouton 2" 
                         Case #calculator ; on compare l'identifiant à #ButtonGadget 
                   RunProgram("calc")
                   Delay (1000)
                   Fenetre = GetActiveWindow() ;renvoie le n° fenetre active
                    SetWindowPos_(WindowID(Fenetre), -1, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE) ;fenetre toujours devant 
                   ;    Case #Button_4 ; on compare l'identifiant à #ButtonGadget 
                      ;        Debug "bouton 4" 
                       ;  Case #Button_5 ; on compare l'identifiant à #ButtonGadget 
                        ;      Debug "bouton 5" 
                         ;Case #Button_6 ; on compare l'identifiant à #ButtonGadget 
                          ;    Debug "bouton 6" 
                     EndSelect 
                 Case #PB_Event_CloseWindow ; cet évènement concerne la fermeture de la fenêtre !!!!!!
                 Quit=1 
             EndSelect 
        Until Quit=1 
         
     EndIf 
EndIf

Publié : sam. 24/juin/2006 9:14
par olivier
Salut David

Voilà qui devrais faire l'affaire...

Code : Tout sélectionner

;- Window Constants
Enumeration
   #Rintern
EndEnumeration
;
;- MenuBar Constants
Enumeration
   #MenuBar_43
EndEnumeration
;
;- Gadget Constants
Enumeration
   #ECRANcaisse
   #calculator
EndEnumeration

If OpenWindow(#ECRANcaisse, 0, 0, 1272, 732, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
   If CreateMenu(#MenuBar_43, WindowID(#Rintern))
   EndIf
   
   If CreateGadgetList(WindowID(#Rintern))
      ButtonGadget(#calculator, 340, 650, 60, 40, "calculatrice")
      
      
      ;La boucle Repeat-Until sert à la gestion des évènements
      Repeat
         Event = WaitWindowEvent () ; on récupère un évènement
         Select Event ; on sélectionne cet évènement
            Case #PB_Event_Gadget ; cet évènement concerne une action sur un Gadget
               Select EventGadget () ; dans ce cas, on récupère l'identifiant du gadget qui l'a créé
                  ;       Case #Button_1 ; on compare l'identifiant à #ButtonGadget
                  ;           Debug "bouton 1"
                  ;       Case #Button_2 ; on compare l'identifiant à #ButtonGadget
                  ;           Debug "bouton 2"
                  Case #calculator ; on compare l'identifiant à #ButtonGadget
                     RunProgram("calc")
                     Delay (1000)
                     hWinCalc = FindWindow_(vbNullString,"Calculatrice") 
                     Debug hWinCalc
                     ;Fenetre = GetActiveWindow() ;renvoie le n° fenetre active
                     SetWindowPos_(hWinCalc, -1, 100, 100, 0, 0,#SWP_NOSIZE	);#SWP_NOSIZE | #SWP_NOMOVE) ;fenetre toujours devant
                     ;SetWindowPos_(hWinCalc, -1, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE) ;fenetre toujours devant
                     ;    Case #Button_4 ; on compare l'identifiant à #ButtonGadget
                     ;        Debug "bouton 4"
                     ;  Case #Button_5 ; on compare l'identifiant à #ButtonGadget
                     ;      Debug "bouton 5"
                     ;Case #Button_6 ; on compare l'identifiant à #ButtonGadget
                     ;    Debug "bouton 6"
               EndSelect
            Case #PB_Event_CloseWindow ; cet évènement concerne la fermeture de la fenêtre !!!!!!
               Quit=1
         EndSelect
      Until Quit=1
      
   EndIf

Publié : dim. 25/juin/2006 13:01
par david
merci c'est impeccable
c'est cool!

Publié : lun. 24/juil./2006 14:01
par david
par contre ça plante si j'ouvre deux calculatrices l'une après l'autre et que je souhaite les positionner à deux endroit différents et quelles restes toutes deux en avant plan de ma fenetre principale qui les a appelee.

je suppose que ça vient du fait que j'intervient sur la fenetre "Calculatrice" et que comme y en a deux qui portent le même nom...

j'ai bien essayé d'apporter une modification du nom de la fenetre après oiuverture, mais la c'est Pb qui plante. vu que je ne l'ai pas vu souvent bugger (et même si je l'avais déjà vu) je pense pouvoir affirmer que j'ai mal codé ce qui :

Code : Tout sélectionner

   RunProgram("calc")
                          Delay (200)
                          hWinCalc = GetForegroundWindow_() 
                          SetWindowTitle(hWinCalc, "Calculatrice1") ;rename en CALCULATRICE1
                          SetWindowPos_(hWinCalc, -1, 680, 60, 0, 0,#SWP_NOSIZE   );#SWP_NOSIZE | #SWP_NOMOVE) ;fenetre toujours devant 
                          
                          RunProgram("calc")
                          Delay (200)
                          hWinCalc = GetForegroundWindow_() 
                          SetWindowTitle(hWinCalc, "Calculatrice2") ;rename en CALCULATRICE1
                          SetWindowPos_(hWinCalc, -1, 680, 60, 0, 0