Powerbuilder pour les completement Geeks !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 23-10-2012 07:33:46

_francois_  
Bienfaiteur du site
Lieu: TOULOUSE
Date d'inscription: 25-03-2010
Messages: 151
Pépites: 178,983,268,111
Banque: 9,223,372,036,854,776,000

[RESOLU] Problème de déclenchement des pb_customxx

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

 

#2 23-10-2012 08:18:13

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: [RESOLU] Problème de déclenchement des pb_customxx

Bonjour,
tu peux n'arrives pas a récupérer l'event (wm_user + decalage) du statictext dans l'event "other" ?


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#3 23-10-2012 08:36:48

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] Problème de déclenchement des pb_customxx

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) :

Code: pb

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

 

#4 23-10-2012 10:16:49

_francois_  
Bienfaiteur du site
Lieu: TOULOUSE
Date d'inscription: 25-03-2010
Messages: 151
Pépites: 178,983,268,111
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Problème de déclenchement des pb_customxx

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

 

#5 23-10-2012 12:03:59

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Problème de déclenchement des pb_customxx

_francois_ a écrit:

au moins je n'ai qu'à gérer le pbm_mousemove et non plus le pbm_mousemove

typo detected...


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#6 23-10-2012 13:41:26

_francois_  
Bienfaiteur du site
Lieu: TOULOUSE
Date d'inscription: 25-03-2010
Messages: 151
Pépites: 178,983,268,111
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Problème de déclenchement des pb_customxx

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

 

#7 23-10-2012 13:51:24

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Problème de déclenchement des pb_customxx

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.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22