.................

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

.................

Message par Backup »

..........................
Dernière modification par Backup le ven. 07/oct./2011 12:27, modifié 2 fois.
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Pas mal, mais y'a plusieurs bugs :
* Tu n'utilise pas les mêmes constantes pour ta fenêtre
* Dans ton callBack tu renvoie True et non pas Res => le bouton "Calculatrice" ne s'affiche pas et qd on déplace la fenêtre on pert les pointillés Windows

Voici le code corrigé :

Code : Tout sélectionner

;- Window Constants
Enumeration 1
     #Rintern
EndEnumeration

;
;- Gadget Constants
Enumeration 20
     #calculator
EndEnumeration

Declare WindowCallback( WindowID ,message,wParam,lParam)


If OpenWindow ( #Rintern , 0, 0, 800, 600, "New window ( 0 )" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
   SetWindowCallback (@WindowCallback())
   If CreateGadgetList ( WindowID ( #Rintern ))
     ButtonGadget ( #calculator , 340, 550, 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 #calculator ; on compare l'identifiant à #ButtonGadget
                   RunProgram ( "calc" )
                   Delay (1000)
                   hWinCalc = FindWindow_ (vbNullString, "Calculatrice" )
                   Debug hWinCalc
                   SetWindowPos_ (hWinCalc, -1, 100, 100, 0, 0, #SWP_NOSIZE ) ;#SWP_NOSIZE | #SWP_NOMOVE) ;fenetre toujours devant
             EndSelect
         
         Case #PB_Event_CloseWindow ; cet évènement concerne la fermeture de la fenêtre !!!!!!
            Quit=1
       EndSelect
       
     Until Quit=1
   EndIf
EndIf



Procedure WindowCallback( WindowID ,message,wParam,lParam)
    res= #PB_ProcessPureBasicEvents
     Select message
         Case #WM_PAINT
            
            xw = WindowX ( #Rintern )+50
            yw = WindowY ( #Rintern )+50
            
            hWinCalc = FindWindow_ (vbNullString, "Calculatrice" )
             Debug hWinCalc
            
            
             SetWindowPos_ (hWinCalc, -1, xw, yw, 0, 0, #SWP_NOSIZE ) ;#SWP_NOSIZE | #SWP_NOMOVE) ;fenetre toujours devant
             ProcedureReturn res
     EndSelect
     ProcedureReturn res
EndProcedure

Dernière modification par lionel_om le ven. 22/déc./2006 10:53, modifié 1 fois.
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Gillou
Messages : 373
Inscription : sam. 28/août/2004 17:35
Localisation : Bretagne, 22
Contact :

Message par Gillou »

Une autre idée ?
#FenetrePrincipale = 0
   If OpenWindow ( #FenetrePrincipale , 0, 0, 400, 300, "MDIGadget" , #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget )
     If CreateGadgetList ( WindowID ( #FenetrePrincipale ))
       MDIGadget (0, 10, 10, 265, 265, 1, 2)
         RunProgram ( "calc" )
        t= ElapsedMilliseconds ()
         Repeat
         Delay (1)
        hWinCalc = FindWindow_ (vbNullString, "Calculatrice" )
         Until hWinCalc <> 0 Or 1000+t < ElapsedMilliseconds ()
        SetParent_ (hWinCalc, GadgetID (0))
        SetWindowPos_ (hWinCalc, #HWND_TOP , 0, 0, 0, 0, #SWP_NOSIZE )
     EndIf
     Repeat : Until WaitWindowEvent ()= #PB_Event_CloseWindow
   EndIf
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Voici un code du soldat inconnu de 2004 que j'ai adapté pour la calculatrice.

Code : Tout sélectionner

Global hWinCalc.l


If Not(RunProgram ("calc"))
    MessageRequester("Erreur", "Impossible d'ouvrir la calculatrice", 16)
Else
    t = ElapsedMilliseconds()
    Repeat
        Delay (1)
        hWinCalc = FindWindow_ (0, "Calculatrice" )
    Until (hWinCalc <> 0) Or ((1000 + t) < ElapsedMilliseconds ())
    
    If hWinCalc = 0 : End : EndIf
    
    ; on récupère la taille de la fenêtre de la calculatrice
    If GetWindowRect_(hWinCalc, rc.RECT)
        
        
        If OpenWindow(0, 200, 200, rc\right - rc\left + 150, rc\bottom - rc\top + 100, "Intégrer la calculatrice", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #WS_CLIPCHILDREN)
            
            SetWindowLong_(hWinCalc, #GWL_EXSTYLE, GetWindowLong_(hWinCalc, #GWL_EXSTYLE) | #WS_EX_MDICHILD)
            SetParent_(hWinCalc, WindowID(0))
            
            MoveWindow_(hWinCalc, 0, 0, rc\right - rc\left, rc\bottom - rc\top, 1)
            SetFocus_(hWinCalc)
            
            
            Repeat
                Event = WaitWindowEvent()
                
            Until Event = #WM_CLOSE
            
            ; SetWindowLong_(hWinCalc, #GWL_EXSTYLE, GetWindowLong_(hWinCalc, #GWL_EXSTYLE) ! #WS_EX_MDICHILD)
            ; SetParent_(hWinCalc, 0)
            
        EndIf
    EndIf
EndIf
End
Répondre