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 confirmé

    Inscrit en
    Novembre 2002
    Messages
    748
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 748
    Points : 500
    Points
    500
    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
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  2. #2
    Membre averti 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
    Points : 403
    Points
    403
    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 confirmé

    Inscrit en
    Novembre 2002
    Messages
    748
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 748
    Points : 500
    Points
    500
    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.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 865
    Points : 11 334
    Points
    11 334
    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 confirmé

    Inscrit en
    Novembre 2002
    Messages
    748
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 748
    Points : 500
    Points
    500
    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 .
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  6. #6
    Membre confirmé

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

    bye
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

+ 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