Après windows pour les nuls, voici PB pour les bons (ou presque).

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 10-05-2011 12:54:56

dark ryus  
Membre completement Geek
Lieu: Nancy
Date d'inscription: 30-09-2008
Messages: 129
Pépites: 700
Banque: 0
Site web

[RESOLU] Survol d'un object avec la souris

Bonjour

Pour savoir si ma souris survole mon userobject, j'utilise l'événement 'pbm_mousemove', mais je ne sais pas comment capter le moment où je ne survole plus mon userobject...

Merci d'avance

Dernière modification par dark ryus (13-05-2011 15:14:06)

Hors ligne

 

#2 10-05-2011 15:01:15

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Survol d'un object avec la souris

Bonjour,

Tu peux adapter ceci à ton userobject en codant plutôt le mousemove de la fenêtre (ou autre objet qui le contient) : http://www.rgagnon.com/pbdetails/pb-0042.html

Code: pb

//[window mousemove event]

// just to display something
st_1.text = string(xpos) + ", " + string(ypos)

IF xpos >= st_1.X AND (xpos <= st_1.x + st_1.Width) AND &
     ypos >= st_1.y AND (ypos <= st_1.y + st_1.Height) THEN
   st_1.textcolor = 255
ELSE
   st_1.textcolor = 0
END IF

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 10-05-2011 15:35:33

dark ryus  
Membre completement Geek
Lieu: Nancy
Date d'inscription: 30-09-2008
Messages: 129
Pépites: 700
Banque: 0
Site web

Re: [RESOLU] Survol d'un object avec la souris

Je pensais à ça aussi, mais ça fait un peu lourd dans une fenêtre où il y a plein de boutons...

Hors ligne

 

#4 10-05-2011 15:52:20

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: [RESOLU] Survol d'un object avec la souris

Dans ce cas, code l'évenement mousemove (event id : pbm_mousemove) sur ton ancêtre de bouton.

Pourquoi tu as besoin du mousemove ? Si c'est pour les powerTip, il te suffit d'utiliser un pictureButton à la place du commandButton.

Edit : bon je viens de relire ta question.
Alors, c'est simple. Si l'evt mousemove est déclenché sur ta fenêtre, ça veut dire que la souris n'est plus sur un bouton...


never let people work on more than one thing at once.

Hors ligne

 

#5 10-05-2011 16:16:18

dark ryus  
Membre completement Geek
Lieu: Nancy
Date d'inscription: 30-09-2008
Messages: 129
Pépites: 700
Banque: 0
Site web

Re: [RESOLU] Survol d'un object avec la souris

Je voulais éviter de passer par l'événement de la fenêtre mais je ne vais pas avoir le choix... merci

Hors ligne

 

#6 11-05-2011 13:00:36

vince.janssens  
Membre Geek
Date d'inscription: 02-06-2008
Messages: 69
Pépites: 189
Banque: 0

Re: [RESOLU] Survol d'un object avec la souris

je ne me souviens plus du code, mais de mémoire, dans l'évènement other, tu peux intercepter le code correspondant à l'action de quitter la zone de survol de l'objet avec le pointeur de souris...

A+

Vincent

Hors ligne

 

#7 11-05-2011 13:08:26

vince.janssens  
Membre Geek
Date d'inscription: 02-06-2008
Messages: 69
Pépites: 189
Banque: 0

Re: [RESOLU] Survol d'un object avec la souris

Dans l'event other de ton objet, tu peux coder ceci.
Dans les user event mousehover et mouseleave,
tu code ta modification de bitmap ou ce que tu veux déclencher au survol
et éloignement de l'objet par ton pointeur de souris...


Code: pb

constant ulong WM_MOUSEHOVER                   = 673 //0x02A1
constant ulong WM_MOUSELEAVE                   = 675 //0x02A3

choose case message.Number
  case WM_MOUSEHOVER
    this.TriggerEvent("mousehover")
  case WM_MOUSELEAVE
    ib_mouseover = false
    this.TriggerEvent("mouseleave")
end choose


A+

Vincent

Vince le méchant modo t'a attrapé : balise code =pb (en minuscules)

Hors ligne

 

#8 11-05-2011 14:59:15

dark ryus  
Membre completement Geek
Lieu: Nancy
Date d'inscription: 30-09-2008
Messages: 129
Pépites: 700
Banque: 0
Site web

Re: [RESOLU] Survol d'un object avec la souris

merci pour l'info mais à quoi correspond le message.Number ?
quand je l'affiche, ce n'est presque jamais le même et je n'ai pas les valeurs ci dessus

Dernière modification par dark ryus (11-05-2011 15:07:59)

Hors ligne

 

#9 11-05-2011 15:51:52

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] Survol d'un object avec la souris

Bonjour,

J'ai développé pour notre application un certain nombre d'objets graphiques personnalisés à partir de userobject : onglets, boutons. Je pense que c'est ce que tu essayes de faire ?

Dans un userobject, je dépose 2 contrôles de type "picture" avec l'image correspondant à l'état inactif (p_inactif) non survolé par la souris et p_survole correspondant à l'image à afficher lorsque l'objet est survolé par la souris.

Pour ces 2 "picture" contrôles, j'ajoute à chacun un événement personnalisé ue_mousemove à faire correspondre avec l'événement id pbm_mousemove.

Dans le code de l'événement ue_mousemove de p_inactif :

Code: pb

p_survole.visible = TRUE
this.visible = FALSE
SetCapture(Handle(p_survole))


Dans le code de l'événement ue_mousemove de p_survole :

Code: pb

IF xpos < 0 OR xpos > this.Width THEN 
  p_inactif.visible = TRUE
  this.visible = FALSE
  ReleaseCapture()
  RETURN 0 
END IF  

IF ypos < 0 OR ypos > this.Height THEN 
  p_inactif.visible = TRUE
  this.visible = FALSE
  ReleaseCapture()
END IF


Note : SetCpature et ReleaseCapture sont 2 fonctions de l'API windows

Hors ligne

 

#10 11-05-2011 16:05:08

dark ryus  
Membre completement Geek
Lieu: Nancy
Date d'inscription: 30-09-2008
Messages: 129
Pépites: 700
Banque: 0
Site web

Re: [RESOLU] Survol d'un object avec la souris

c'est exactement ça et ça marche, merci buck, je cherchais une solution depuis ce matin, tu viens de mettre de la joie dans mon début de soirée

Hors ligne

 

#11 13-05-2011 06:47:21

dark ryus  
Membre completement Geek
Lieu: Nancy
Date d'inscription: 30-09-2008
Messages: 129
Pépites: 700
Banque: 0
Site web

Re: [RESOLU] Survol d'un object avec la souris

J'ai utilisé ta méthode buck (je t'ai envoyé un mp) mais j'ai quelques soucis.

Quand je met beaucoup de boutons dans une page, ça fait un peu guirlande de noel, ça clignotte de partout quand je bouge la souris.

J'ai un text sur mes bouton que je doit forcer à bringtotop = true car les 'visible' sur les événements mousemove me masque mon texte ....

Hors ligne

 

#12 13-05-2011 07:47:06

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Survol d'un object avec la souris

Utilise le fameux SetRedraw(False), SetRedraw(True) en début et fin de script pour éviter cet effet


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#13 13-05-2011 08:33:06

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] Survol d'un object avec la souris

Bonjour,

Il m'est difficile de répondre sans avoir le code source. Par contre, tu utilises le contrôle standard pour afficher ton texte ou un "userobject" personnalisé genre uo_trans que l'on trouve sur le web pour afficher des textes sur fond transparent. J'ai supprimé cette objet de notre application par ce qu'il génère typiquement le comportement que tu viens de décrire.

Par contre, pour afficher les textes, j'ai créé deux événements personnalisés par image ue_paint que je fais correspondre avec l'événement id  pbm_paint et ue_postpaint. Puis dans l'événement, ue_paint et getfocus du contrôle picture j'insère le code PostEvent("ue_postpaint").

Dans l’événement ue_pospaint, j'ai codé le nécessaire pour afficher le texte. Pour des raisons de charte graphique, j'avais besoin d'afficher le texte sur fond transparent l'objet uo_trans ne m'apportant pas satisfaction, j'utilise en fait des fonctions de l'API windows que j'ai encapsulé dans un wrapper en C++.

J'ai développé cette solution sous PB 7.0 dans les années 2000, je n'ai plus les idées tout à fait fraiche sur le sujet du pourquoi et du comment j'ai procédé ainsi, mais de souvenir peut-être bien pour les raisons que tu indiques. Je n'ai quasiment plus retouché au C++ depuis.

Hors ligne

 

#14 13-05-2011 09:41:29

dark ryus  
Membre completement Geek
Lieu: Nancy
Date d'inscription: 30-09-2008
Messages: 129
Pépites: 700
Banque: 0
Site web

Re: [RESOLU] Survol d'un object avec la souris

En mettant beaucoup de bout de code en commentaire (presque tout ^^), je m'aperçoit que c'est à l'ouverture de ma page que ça clignote beaucoup jusqu'à ce que la page soit complètement chargé.

J'ai essayé de mettre des setredrow(false) dans le constructeur, ou dans un uo_postopen de la page mais rien n'y fait. Soit ma page ne se charge plus ^^, soit ya rien qui fonctionne.

Dernière modification par dark ryus (13-05-2011 09:47:54)

Hors ligne

 

#15 13-05-2011 09:45:01

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Survol d'un object avec la souris

Il ne faut pas oublier de mettre aussi un SetRedraw(True) plus tard.


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#16 13-05-2011 09:47:57

dark ryus  
Membre completement Geek
Lieu: Nancy
Date d'inscription: 30-09-2008
Messages: 129
Pépites: 700
Banque: 0
Site web

Re: [RESOLU] Survol d'un object avec la souris

Je viens de m'apercevoir que c'est au changement d'un onglet que ça clignote le plus. On dirait qu'il fait des redraw pour tous les élément des onglets à chaque changement d'onglet.

Quand je sors mes boutons de la zone de l'onglet, plus de clignotement... le repaint de se fait que sur une zone ?

Dernière modification par dark ryus (13-05-2011 10:05:09)

Hors ligne

 

#17 13-05-2011 15:14:17

dark ryus  
Membre completement Geek
Lieu: Nancy
Date d'inscription: 30-09-2008
Messages: 129
Pépites: 700
Banque: 0
Site web

Re: [RESOLU] Survol d'un object avec la souris

J'ai joué à mister magouille.

J'ai fait une datawindow pour le milieu de mon bouton, avec mon image de fond et et static text, et ça fonctionne pour la transparence

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22