.................
.................
..........................
Dernière modification par Backup le ven. 07/oct./2011 12:27, modifié 2 fois.
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
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é :
* 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 !
Participez à son extension: ajouter vos programmes et partagez vos codes !
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
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