évenement MouseOut ?

Résolu
steph12358 Messages postés 149 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 10 décembre 2009 - 6 févr. 2009 à 15:44
steph12358 Messages postés 149 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 10 décembre 2009 - 9 févr. 2009 à 14:16
Bonjour

En utilisant un TApplicationEvent:

Dans un Form1 je positionne un bool à vrai quand l'utilisateur clique sur Image1 (un TImage, évènement OnMouseDown de Image1)

le but: laisser le bool à vrai tant qu'on continue de cliquer dans l'image
mais le positionner à faux dès qu'on clique sur un autre contrôle de l'application (même formulaire ou d'un autre formulaire). Ca fonctionnerait un peu comme un événement "MouseOut"...

mon code de départ:

void __fastcall TFormReglage::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{

   static unsigned int oldwparam;
   static long oldlparam;

   switch   (Msg.message)
   {
   case   WM_LBUTTONDOWN:
           if ( OkForm1 )
           {
              //(là, mon test n'est pas le bon: je voudrais pouvoir tester que le controle n'est plus Form1->Image1)
              if ( ( oldwparam != Msg.wParam ) && ( oldlparam != Msg.lParam ) )
                  if (Form1->OnDessine)
                     Form1->OnDessine = false;
              oldwparam = Msg.wParam;
              oldlparam = Msg.lParam;
              break;
           }
   case   WM_LBUTTONUP:
      //...
   default:
      //...
   } 
}

rem: c'est sous C++ Builder mais ça doit pouvoir se généraliser et intéresser quelqu'un.

3 réponses

steph12358 Messages postés 149 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 10 décembre 2009 1
9 févr. 2009 à 14:16
"
Rappel: je cherche, "tout simplement" , à savoir quel contrôle de mon application a provoqué l'événement WM_LBUTTONDOWN...
"

EUREKA ! j'ai trouvé de quoi me tirer d'affaire

dans TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)

le paramètre Msg a une propriété hwnd.

Avec l'instruction:
AnsiString machin = FindControl(Msg.hwnd)->Name;
je retrouve le nom du "parent" du controle qui a "shooté" l'évènement. Je creuserai plus tard pour trouver le nom exact du controle
3
jeffy131 Messages postés 123 Date d'inscription samedi 14 juillet 2007 Statut Membre Dernière intervention 29 mars 2009 1
8 févr. 2009 à 12:43
C'est une FAQ Win32
demander sur le newsgroup professionnel des apis Win32 :
news://fr.comp.os.ms-windows.programmation
où cela a souvent été discuté
0
steph12358 Messages postés 149 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 10 décembre 2009 1
9 févr. 2009 à 11:19
Bonjour

je dois mal formuler ma demande car je n'ai toujours rien trouvé qui m'aide un tant soit peu sur le lien que vous m'avez indiqué, à part mes propres "contributions"...

Rappel: je cherche, "tout simplement" , à savoir quel contrôle de mon application a provoqué l'événement WM_LBUTTONDOWN...

Merci
0