IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

[Evenement ] OnMouseLeave


Sujet :

Langage Delphi

  1. #1
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    815
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 815
    Par défaut [Evenement ] OnMouseLeave
    salut a tous ,
    j'ai deja fait un post sur ce probleme , et je fais une derniere tentative au cas ou .. ( qu'une personne est tout à coup une bonne idée avec la nouvelle année !! )

    Mon probleme etant que les evenements OnMouseLeave et OnMouseEnter ne sont pas traité par le Application.ProcessMessage .

    Ceci implique que lorsque je suis dans une boucle de traitement si je promene ma souris sur les composants qui possedent ces evements ( bouton , label ... ) ils passent tous dans le mode " OnMouseEnter " car cet evenement semble lié au OnMouseMove qui lui est bien traité par le Application.ProcessMessage .

    Pour repasser en mode normal , je doit etre sortie de ma boucle, repasser sur le composant pour declencher l'evenement " OnMouseEnter " et quitter le composant pour declencher l'evenement " OnMouseLeave" .

    mon traitement dans les OnMouseEnter et OnMouseleave est typiquement du design ( changement de couleur du composant .... )

    Alors mes questions sont :

    1] Existe t il un moyen de forcer un evenement ( par un message par exemple ) ?

    2 ] si je veux traiter le comportement de mes boutons et simulant par exemple le onMouseEnter dans OnMouseMove , je dois arriver a inihiber les evements OnMouseEnter du composant ,
    donc existe t il un moyen d'inhiber l'evenement d'un composant ( je pense pas !! ) mais peut etre qu'une solution existe !!

    Autrement il ne me reste plus qu'a recoder bcp de chose dans des thread ( chose qui ne m'est pas vraiment utile dans mon application ) !! et ceci pour eviter d'aller bricoler les composants ou j'utilise les evenements evenements en questions !

    merci a tous et si quelqu'un a une autre voie a explorer je suis aussi prenneur !!






    et ne repasse en mode normal que losrque je sort de la boucle

  2. #2
    Membre chevronné Avatar de chtiot
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 385
    Par défaut
    j'ai pas tout compris

    si c'est juste pour changer la couleur lorsque la souris entre ou sort sur un bouton, je ferai comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    type
      TButton = class(StdCtrls.TButton)
        Procedure CMMouseEnter( VAR Msg : TMessage ); MESSAGE CM_MOUSEENTER;
        Procedure CMMouseLeave( VAR Msg : TMessage ); MESSAGE CM_MOUSELEAVE;
      end;
     
    procedure TButton.CMMouseEnter(var Msg: TMessage);
    begin
      Font.Style := [fsUnderline, fsBold];
    end;
     
    procedure TButton.CMMouseLeave(var Msg: TMessage);
    begin
      Font.Style := [];
    end;
    ici je souligne et mets en gras le caption du bouton lorsque la souris entre dessus et je reviens en normal lorsque la souris quitte le composant

  3. #3
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    815
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 815
    Par défaut
    Salut chtiot ,
    donc mon post est pas tres explicite !

    par exemple prend un label qui possede les evements en question ( pour eviter de redefinir un type ) et on veut changer la couleur de label quand on passe dessus .
    Donc on traite la couleur du label dans les evenement en question ( OnMouseEnter, OnMouseLeave ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.Label1MouseEnter(Sender: TObject);
    begin
         Label1.color:=clred;
    end;
    procedure TForm1.Label1MouseLeave(Sender: TObject);
    begin
         Label1.color:=cllime;
    end;
    cela marche c'est normal !

    maintenant le code suivant ou je rajoute une boucle ( pour simuler un traitement qui peut etre long )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    procedure TForm1.Label1MouseEnter(Sender: TObject);
    begin
         Label1.color:=clred;
    end;
    //==============
    procedure TForm1.Label1MouseLeave(Sender: TObject);
    begin
         Label1.color:=cllime;
    end;
    //==============
    Procedure TForm1.Traitement;
    begin
        fin:=true;
        repeat
            application.ProcessMessages;
        until fin=false;
    end;
    //==============
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
       fin:=false;
    end;
    //==============
    Quand je suis dans la boucle çà marche plus , l'evement Onclick du BitBtn1 est bien traité par le application.ProcessMessages , mais pas les evements OnMouseEnter, OnMouseLeave du label , et c'est cela qui me gene !
    et qui me pose probleme !

    bye.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 924
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 924
    Billets dans le blog
    6
    Par défaut
    c'est trop fort !
    effectivement, comportement bizarre ! il ne passe pas dans le MouseEnter alors qu'il détecte bien l'entrée et la sortie grâce au MouseMove !
    il faut sûrement te servir du TForm1.MouseMove pour détecter l'entrée et la sortie dans le Label1...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    procedure TForm1.Label1MouseEnter(Sender: TObject);
    begin
     Sender.Color:=clRed;
     passe:=True;
    end;
     
    procedure TForm1.Label1MouseLeave(Sender: TObject);
    begin
     Sender.Color:=clLime;
    end;
     
    procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
     Label2.Caption:=IntToStr(X)+' '+IntToStr(Y);
    end;
     
    procedure TForm1.traitement;
    begin
     repeat
      application.ProcessMessages;
     until fin;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
     fin:=True;
     if passe then ShowMessage('je suis bien passé dessus...');
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     passe:=False;
     fin:=False;
     Traitement;
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
     Label1MouseEnter(Label1); // déclenche bien l'événement pendant la boucle
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    815
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 815
    Par défaut
    Effectivement Tourlourou ta methode marche en jouant sur le OnMove du composant , et ensuite sur le OnMove du parent , mais seulement sur les Tlabel de delphi.

    J'utilise un Bouton de chez TMS.. et avec eux cela marche pas !! grrr .

    merci et bye .

  6. #6
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    815
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 815
    Par défaut
    Bon ben la seule solution trouvé a été de modifier le comportement du composant en modifiant sont propre code !!

    bye

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. evenements OnMouseLeave() OnMouseEnter()
    Par raimo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/05/2008, 19h29
  2. [VB6] Evenement validate
    Par grosjej dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/09/2002, 15h46
  3. Evenement Change
    Par PierDIDI dans le forum Composants VCL
    Réponses: 3
    Dernier message: 28/08/2002, 10h08
  4. develloppement avec ORBit: service d'evenement
    Par belmontv dans le forum CORBA
    Réponses: 3
    Dernier message: 06/06/2002, 22h56
  5. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo