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

Delphi Discussion :

évènement inverse OnMouseMove


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 621
    Par défaut évènement inverse OnMouseMove
    Bonjour à tous,

    la question est dans l'objet du message.

    Je souhaite changer la couleur de ma police, sur un bouton, quand la souris passe dessus. Là pas de problème.
    Mais une fois la souris sortie du bouton je n'arrive pas à remettre le tout dans sa forme initiale.
    Si quelqu'un a une réponse.

    Merci bien.

  2. #2
    tintin22
    Invité(e)
    Par défaut
    tu le remets à sa forme initiale sur l'evenement OnMouseMove de ta Form.

  3. #3
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    L'évènement OnMouseLeave n'attend plus que toi

  4. #4
    DMO
    DMO est déconnecté
    Membre chevronné
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Par défaut
    Salut !,

    J'approuve les 2 réponses qui t'ont été données.

    [edit]Oula ! en v'la une 3e entre deux ! Tant pis j'arrive trop tard...[/edit]

    J'ajouterais pour le OnMouseLeave que si tu ne l'as pas (le TButton de Delphi 6 ne le propose pas par exemple), tu peux toujours le faire quand même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    type
      TMonBouton = class(TButton)
      {...}
      protected
        procedure CMMouseenter(var Message: TMessage); message CM_MOUSEENTER;
        procedure CMMouseleave(var Message: TMessage); message CM_MOUSELEAVE;
      {...}
      end;
    J'ai ajouté le MouseEnter qui peut t'interesser.

    Bon dev'

  5. #5
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    non c'est pour la form
    voila le code pour un controlle fenetre
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Buttons;
     
    type
      TForm1 = class(TForm)
        Button1: TBitBtn;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
        IniProc:TWndMethod;
        Procedure Button_MywindowProc(Var Msg:TMessage);
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
    procedure TForm1.Button_MywindowProc;
    begin
         if msg.Msg= CM_MOUSEENTER then button1.Font.Color:=$FF ;
         if msg.Msg= CM_MOUSELEAVE then button1.Font.Color:=$FF0000 ;
         IniProc(msg);
    end;                                             
    procedure TForm1.FormCreate(Sender: TObject);
    begin
         IniProc:=button1.WindowProc;
         button1.WindowProc:=Button_MywindowProc;
    end;
     
    end.
    bon dev

  6. #6
    DMO
    DMO est déconnecté
    Membre chevronné
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Par défaut
    Salut à tous,

    @Edam : si c'est bien à moi que tu dis non, je souhaite juste indiquer que TButton est bel et bien un contrôle fenêtré (TWinControl), sinon désolé, je l'avais pris pour moi.

    @thierrybatlle:

    Citation Envoyé par thierrybatlle en message privé
    je te remercie pour ta réponse, mais je souhaite savoir comment tu le mets en application.

    Car je ne vois pas trop le lien avec mon bouton.
    Il me semblait que tu voulais faire une action lorsque la souris passe au dessus d'un bouton.

    Citation Envoyé par thierrybatlle
    Je souhaite changer la couleur de ma police, sur un bouton, quand la souris passe dessus.
    Si je ne me suis pas trompé sur ton but (le cas échéant accepte mes excuses), voici un exemple d'utilisation de ces messages pour un TButton juste pour que tu comprennes le principe :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        procedure ButtonEnter(Sender: TObject);
        procedure ButtonLeave(Sender: TObject);
      end;
     
      TMonBouton = class(TButton)
      private
        FOnMouseLeave: TNotifyEvent;
        FOnMouseEnter: TNotifyEvent;
      protected
        procedure CMMouseenter(var Message: TMessage); message CM_MOUSEENTER;
        procedure CMMouseleave(var Message: TMessage); message CM_MOUSELEAVE;
      published
        property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
        property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    { TMonBouton }
     
    procedure TMonBouton.CMMouseenter(var Message: TMessage);
    begin
      if Assigned(FOnMouseEnter) then
        FOnMouseEnter(Self);
    end;
     
    procedure TMonBouton.CMMouseleave(var Message: TMessage);
    begin
      if Assigned(FOnMouseLeave) then
        FOnMouseLeave(Self);
    end;
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with TMonBouton.Create(Self) do
        begin
          Parent := Self;
          Top := 8;
          Left := 8;
          OnMouseEnter := ButtonEnter;
          OnMouseLeave := ButtonLeave;
        end;
    end;
     
    procedure TForm1.ButtonEnter(Sender: TObject);
    begin
      Color := clRed;
    end;
     
    procedure TForm1.ButtonLeave(Sender: TObject);
    begin
      Color := clBtnFace;
    end;
    Bien sûr je m'emm.. à refaire des évènements, mais tu peux très bien faire directement du boulot dans les CMMouse* du bouton si ce n'est que la police de celui-ci que tu veux changer.

    Mais bon il y a 36000 façons de faire cela, tout le monde a donc plus ou moins raison, et là je t'ai simplement proposé très humblement la mienne.

    Bon courage et bon dev'

  7. #7
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Salut!

    Si l'évènement OnExit de ton objet n'éxiste pas, tu as plusieurs solutions :

    Citation Envoyé par Eric Sigoillot
    L'évènement OnMouseLeave n'attend plus que toi
    Eric a été plus rapide que moi ! La solution est très certainement d'utiliser le message CM_MOUSELEAVE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    Fait une petite recherche pour obtenir des exemples d'utilisation...

    • Avec l'évènement OnMessage et la fonction PtInRect, je te donne le code, ça pourra peut-être t'intéresser :
    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
    Var OnObject: Boolean;
     
    {----------------------------------------------------------------}
    Procedure TForm1.FormCreate(Sender: TObject);
    Begin
      Application.OnMessage := ProcMess;
    End;
     
    {----------------------------------------------------------------}
    Procedure TForm1.ProcMess(Var msg: TMsg; Var Handled: Boolean);
    Begin
      If (PtInRect(Button1.BoundsRect, 
        ScreenToClient(Mouse.CursorPos)))Then Begin
        If (OnObject = False) Then Begin
          // Ici on simule l'évènement OnEnter de Button1 //
     
          OnObject := True;
        End;
      End Else Begin
        If (OnObject = True) Then Begin
          // Ici on simule l'évènement OnExit de Button1 //
     
          OnObject := False;
        End;
      End;
    End;
    à+

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

Discussions similaires

  1. Pas d'événement OnClose quand on arrête W2K
    Par Altau dans le forum C++Builder
    Réponses: 9
    Dernier message: 26/01/2009, 18h36
  2. exploiter un évènement d'un sous composant dans un
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 16h44
  3. [VB6]fonction inverse de Hex (nombres hexadécimaux)
    Par Guigui_ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 19h31
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

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