Page 1 sur 1
[resolu] - ContainerGadget event
Publié : mer. 20/mars/2013 16:39
par doudouvs
Salut,
Je n'arrive pas a crée un evenement clique sur un container
Avez vous une solution ?
Code : Tout sélectionner
Enumeration
#Container_01
#Button_Menu01
#Button_Menu02
EndEnumeration
If OpenWindow(0, 0, 0, 600, 600, "ContainerGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(#Button_Menu01,250,WindowHeight(0)-50,150,25,"Send")
ContainerGadget(#Container_01, 10, 130, 500, 100, #PB_Container_Flat)
ButtonGadget(#Button_Menu02,250,50,130,25,"Send")
CloseGadgetList()
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Container_01
Debug "Youpieeeeee ca marche"
Case #Button_Menu01
Debug "c'est un bouton classic pourquoi tu clique"
Case #Button_Menu02
Debug "Aie !!! loupé - clique sur le container pas sur le bouton"
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
Re: ContainerGadget event
Publié : mer. 20/mars/2013 17:05
par falsam
je ne me suis pas trop poser de questions sur les évènements liés aux ContainerGadget.
Apparemment Pure Basic ne gére pas les évenements du ContainerGadget.
la solution que je vois est de passer par un callback. Je ne suis pas un spécialiste du callback mais je te propose cette solution.
Code : Tout sélectionner
Enumeration
#Container_01
#Button_Menu01
#Button_Menu02
EndEnumeration
Procedure ContainerCallback(hWnd, uMsg, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
If IsGadget(#Container_01)
If hWnd = GadgetID(#Container_01)
Select uMsg
Case #WM_LBUTTONUP
Debug "#WM_LBUTTONUP"
Case #WM_LBUTTONDOWN
Debug "#WM_LBUTTONDOWN"
EndSelect
EndIf
EndIf
ProcedureReturn Result
EndProcedure
If OpenWindow(0, 0, 0, 600, 600, "ContainerGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(#Button_Menu01,250,WindowHeight(0)-50,150,25,"Send")
ContainerGadget(#Container_01, 10, 130, 500, 100, #PB_Container_Flat)
ButtonGadget(#Button_Menu02,250,50,130,25,"Send")
CloseGadgetList()
SetWindowCallback(@ContainerCallback())
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_Menu01
Debug "c'est un bouton classic pourquoi tu clique"
Case #Button_Menu02
Debug "Aie !!! loupé - clique sur le container pas sur le bouton"
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
Re: ContainerGadget event
Publié : mer. 20/mars/2013 17:35
par falsam
J'ai corrigé mon code précédent en ajoutant un test d’existence du container (If IsGadget(#Container_01)) afin d'éviter une erreur lors de la fermeture de la fenêtre.
Re: ContainerGadget event
Publié : mer. 20/mars/2013 17:54
par Backup
d'un autre coté un container n'est pas un gagdet comme les autres
il est la surtout pour englober les autres gadgets ...
dans le but par exemple de cacher en une seule fois plusieurs gadget ...
il suffit de cacher le container , ça va cacher ce qui se trouve dedans .. (enfin en principe

)
ou bien de regrouper plusieurs Gadget dans un but x ou y
un container n'a pas pour vocation a recevoir les clique souris ..ça n'a pas vraiment de sens

Re: ContainerGadget event
Publié : mer. 20/mars/2013 19:08
par doudouvs
Me suis énerver, impossible de faire marche le code je me suis dit c'est pas possible
je code sous OSX je test sous windows ben la ca marche grrrr
@Dobro j'aime bien détourner les choses
Re: ContainerGadget event
Publié : mer. 20/mars/2013 19:29
par doudouvs
Il ya quand meme beaucoup de chose qui ne marche pas sous OSX et inversement
Genre pour le code plus haut les declarations
marche sous windows
Code : Tout sélectionner
Enumeration
#Container_01
#Button_Menu01
#Button_Menu02
EndEnumeration
marche sous OSX pas sous windows
Code : Tout sélectionner
Enumeration
#Container_01
#Button_Menu01
#Button_Menu02
#PB_ProcessPureBasicEvents
#WM_LBUTTONUP
#WM_LBUTTONDOWN
EndEnumeration
un WebGadet qui na pas le même comportement avec les cibles: _blank sous windows ca marche sous OSX que nenni
et j'en passe si on continue je vais avoir une Doc des contraintes aussi grande que l'aide
Re: ContainerGadget event
Publié : mer. 20/mars/2013 22:17
par Backup
doudouvs a écrit :
marche sous OSX pas sous windows
Code : Tout sélectionner
Enumeration
#Container_01
#Button_Menu01
#Button_Menu02
#PB_ProcessPureBasicEvents
#WM_LBUTTONUP
#WM_LBUTTONDOWN
EndEnumeration
Normal !
#PB_ProcessPureBasicEvents ; Constante Purebasic
#WM_LBUTTONUP ; Constante API Windows
#WM_LBUTTONDOWN ; Constante API Windows
sont des constantes Reservées par le Purebasic , et par les API windows !
appelles les autrement ça marchera ..
Re: ContainerGadget event
Publié : mer. 20/mars/2013 22:42
par doudouvs
Je mis perds encore API pas API trucmuch ect...........
J'ai du prendre a la lettre
"- Code source du programme immédiatement transposable sur Windows, AmigaOS ou Linux" > transposable
C'est sur que si j'utilise des choses bizarre ca risque pas de marcher, j'ai encore du mal a comprendre le fonctionnement je tâtonne à force j'apprend
Re: ContainerGadget event
Publié : mer. 20/mars/2013 23:39
par falsam
doudouvs a écrit :J'ai du prendre a la lettre "- Code source du programme immédiatement transposable sur Windows, AmigaOS ou Linux" > transposable
Transposable à condition de ne pas utiliser les API propres aux différents systèmes d'exploitations.
Et même dans ces conditions, transposable ne veut pas dire fonctionnel à 100%. Il faut parfois par exemple modifier la disposition des gadgets quand on passe de Windows à Linux simplement à cause d'une police par défaut qui n'est pas la même sur Windows et Linux.
J'ai fini par abandonné le dev sous linux lors d'une mise à jour d'Ubuntu. Le visuel de mon application est devenu désastreux. Je n'ai pas encore eu la chance d'utiliser Pure Basic sous OSx.
Re: ContainerGadget event
Publié : jeu. 21/mars/2013 6:06
par graph100
Les callback ne sont utilisables que sur Windows (marqué dans l'aide)
Il ne faut pas confondre ce que peut faire PB et ce que peut faire l'OS sur lequel vous programmez.
Si un des objectifs de ton code est d'être multi-OS il faut impérativement que tu vérifies la compatibilité des fonctions que tu utilises dans ce code. C'est systématiquement marqué dans l'aide de PB.
Rapidement, les API de window ne fonctionneront pas sur Linux ou OS X et vice versa.
Le code ci-dessous fonctionne sur tout les OS
Code : Tout sélectionner
Macro IS_MouseOnGadget(Window, Gadget)
Bool(GadgetX(Gadget) <= WindowMouseX(Window) And GadgetX(Gadget) + GadgetWidth(Gadget) >= WindowMouseX(Window) And GadgetY(Gadget) <= WindowMouseY(Window) And GadgetY(Gadget) + GadgetHeight(Gadget) >= WindowMouseY(Window))
EndMacro
IDW_FenTest = OpenWindow(#PB_Any, 0, 0, 400, 300, "Test clic", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
IDG_container = ContainerGadget(#PB_Any, 20, 20, 360, 100, #PB_Container_Double)
Repeat
event = WaitWindowEvent()
If event = #PB_Event_LeftClick
If IS_MouseOnGadget(IDW_FenTest, IDG_container)
Debug "clic gauche sur le Container"
Else
Debug "clic ailleurs"
EndIf
EndIf
Until event = #PB_Event_CloseWindow
End
Re: ContainerGadget event
Publié : jeu. 21/mars/2013 9:05
par doudouvs
Merci @graph100 mais bon c'est du tout fait ca me gêne
Voila j'ai bien compris les API, c'est un raccourci éventuellement de ce que PB n'arrive pas a faire directement, la doc n'ai pas toujours explicite à ce sujet.
J'aurai trouvé cela plus concis d'avoir une doc, uniquement sur les fonctions de PB, d'avoir une doc sur les API que de tout mélanger, autrement on aurai pu rajouter dans la doc cocoa/gtk et la ce serait carrément plus lisible.
Pour finir ma pensé je trouve que l'utilisation des API sont de la ségrégation de système
Re: ContainerGadget event
Publié : jeu. 21/mars/2013 11:32
par Backup
l'API ( windows ,Linux ,OSX ) est un ensemble de Fonctions utilisable en C ou en Purebasic , ces fonctions Font partie du Systeme d'exploitation
ce sont des fonctions programmées par les Développeurs du système d'exploitation
elle permettent le traitement "Facilité" des Périphériques , et du systeme Graphique du systeme D'exploitation ..
exemple pour Windows :
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
l'API existe donc aussi sur Linux , qui dispose de ses propres Fonctions (APi) , et sur OSX , et d'une certaine maniere sur tout les systemes D'exploitation Moderne !!
si tu a connu l'Atari STF ,nous avions les TRAP#xx c'etait un appel au API du GEM/TOS ..
http://www.bighole.nl/pub/mirror/homepa ... _traps.htm
pour Linux
http://www.gnugeneration.com/books/linu ... ernel-api/
pour OSX lire ici :
http://fr.wikipedia.org/wiki/Cocoa_%28Apple%29
quelques fois un développeur de Driver pour un périphérique, peut proposer une API spécifique
sous forme de DLL ...
comme tu dois le comprendre , les API N'ONT RIEN A VOIR AVEC PUREBASIC !