Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
je souhaite utiliser les events pb_customxx, j'ai bien compris la principe de la chose on code le user event dans l'objet et on le déclenche avec un Send(handle, 1024 + decalage, parm, parm)
Si mon objet est un user object cela marche nickel si c'est un static text, un sle (et surement d'autres) l'event n'est pas déclenché.
Alors pourquoi je fais ça:
En gros j'ai un "menu" sur le côté de mon application
Ce menu s'agrandit horizontalement quand on descend dans les niveaux
Mais il faut qu'il retrouve sa taille d'origine quand la souris le quitte
Le "menu" et un user objet qui ouvre ses menu item (qui sont composés d'une image et d'un static text) avec des OpenUserObject(...)
Quand le souris quitte le menu ou un menu item (j'ai géré le mouseleave avec un TrackMouseEvent) je regarde le handle de l'objet sous le pointeur de la souris avec une combinaison de GetCursorPos et WindowFromPoint
N'ayant qu'un handle je balance un send sur le pb_custom01 (j'ai essayé avec d'autres) qui ne sera codé que dans mon menu et mon objet de base menu_item (et l'image et le static qu'il contient)
Si le Send me renvoie un 1 (c'est à dire qu'elle est sur un élément où le pb_custom01 est codé) c'est que la souris est toujours dans le menu donc je ne le réduis pas sinon je réduis mon menu.
La souris pouvant atterrir n'importe où après un mouseleave (et même hors de l'application) je ne vais pas coder des mousemove partout dans mon application pour dire au menu de se réduire (même si j'ai créé des objets de base pour tout et tout est censé hériter de ces objets de base)
Le technique fonctionne bien si la souris ne rentre pas trop vite dans un menu item (c'est à dire que le mouseleave est déclenché quand la souris est sur le fond du menu item) mais si j'amène la souris trop vite sur mon menu item le handle récupéré est celui de l'image ou du static text est là l'event n'est pas déclenché.
Pour être sur que le problème ne venait d'un mauvais codage j'ai fait un test simple:
une Window, un static text, un bouton
pb_custom01 codé sur le st_
le click du bouton fait le Send au st_
Ca ne fonctionne pas
Si quelqu'un a une idée je suis preneur (sachant que je n'ai pas très envie de parcourir tous les objets de mon menu pour faire une liste de handle et comparer le handle sous la souris à cette liste)
En vous remerciant pas avance.
Dernière modification par _francois_ (23-10-2012 10:17:10)
Hors ligne
Bonjour,
tu peux n'arrives pas a récupérer l'event (wm_user + decalage) du statictext dans l'event "other" ?
Hors ligne
Bonjour,
Pour une problématique similaire, j'ai utilisé deux fonctions de l'API SetCapture et ReleaseCapture, ce qui donne dans l'événement mouseleave (à adapter) :
IF NOT ib_captured THEN SetCapture( handle( THIS )) ib_captured = TRUE ELSE IF xpos < 0 OR & xpos > width OR & ypos < 0 OR & ypos > height THEN IF ReleaseCapture() THEN ib_captured = FALSE ..... END IF END IF END IF
tu captures le curseur de la souris lorsque ton objet est survolé par la souris, lorsque le curseur de la souris est à l'extérieur de ton objet tu libères le curseur et tu fermes ton menu.
Hors ligne
Merci pour les infos
@xlat
J'avais pensé hier quand je testai ma fonctionnalité à utiliser le other à la place puis je suis parti en réunion (pendant laquelle il a été décidé d'utiliser une autre présentation pour le menu) du coup je n'ai pas repensé à tester mais cela fonctionne parfaitement.
@buck
J'ai aussi testé le SetCapture le problème que j'ai c'est que si je lance un SetCapture sur mon Menu mes MenuItem ne fonctionnent plus.
Par contre je vais adopter la SetCapture pour mes menu item et mes boutons car ça me simplifie pas mal le code que j'avais avec le trackMouseEvent, au moins je n'ai qu'à gérer le pbm_mousemove et non plus le pbm_mousemove, le other plus un dernier event.
Merci à tous les deux.
Pour moi le problème est résolu même si je ne sais pas pourquoi le pbm_customXX n'est pas lancé sur certains objets
Hors ligne
_francois_ a écrit:
au moins je n'ai qu'à gérer le pbm_mousemove et non plus le pbm_mousemove
typo detected...
Hors ligne
seki a écrit:
_francois_ a écrit:
au moins je n'ai qu'à gérer le pbm_mousemove et non plus le pbm_mousemove
typo detected...
même pas ;)
je voulais juste dire que je n'avais qu'à gérer un event au lieu de trois et que l'event que j'ai toujours à gérer je le gérais déjà avant ;)
enfin bref je me comprends
Hors ligne
Au temps pour moi, j'ai buggé.
Il fallait donc comprendre
_francois_ a écrit:
au moins je n'ai qu'à gérer le pbm_mousemove [au lieu de] pbm_mousemove [+] other [+] un dernier event.
Hors ligne