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

Composants VCL Delphi Discussion :

OnMouseEnter et OnMouseLeave sur des items d'une collection


Sujet :

Composants VCL Delphi

  1. #1
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut OnMouseEnter et OnMouseLeave sur des items d'une collection
    Comment puis-je implémenter un OnMouseEnter/Leave sur les items de ma collection?
    Mon composant est une statutBar, et je voudrais que lorsque je passe sur un panel, il change de couleur....

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Bonjour,

    De mémoire il faut que tu gère ça dans OnMouseMove de la barre.
    Je pourrai confirmer ce soir, j'ai utilisé une statusbar pour gérer des boutons dedans.



    Yan.
    Images attachées Images attachées  


    devYan.

  3. #3
    Membre actif Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Points : 267
    Points
    267
    Par défaut
    Ca serait pas un code de ce style ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TPanelItem = class(TCollectionItem)
    protected
       procedure CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
       procedure CMMouseLeave(var Msg: TMessage); message CM_MouseLeave;
     
    ...
     
    TMyStatusBar = class (TCustomControl)
    protected
      procedure MouseMove(Sender: TObject; Shift: TShiftState;
        X, Y: Integer);override;
    A celà j'ajouterai 2 fonction pour savoir sur quel panel on est et quel est son index...

    Mais peut-être que Sjrd est dans le coin ?

    En tout cas merci pour ta réponse Devyan

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Re-bonjour,

    En fait le problème est que les TStatusPanels de la TStatusBar n'on pas de "vie réelle" en tant que contrôle (ou élément fenêtré comme un TPanel si tu préfères, ce sont des TCollectionItems <- TPersistent <- TObject)

    OnMouseEnter n'est généré que lorsque tu entre dans la zone de la TStatusBar et pas lorsque tu te déplace horizontalement DANS la barre d'état.
    le TStatusPanel n'a de disponible que sa largeur re-

    Donc tu vas devoir faire le calcul tout seul à chaque fois.

    Personnellement j'ai réglé le problème comme ceci pour la gestion du Hint :

    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
    procedure TForm1.StatusBar1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    var
      i, o: Integer;
      h: String;
    begin
      o := 1;
      h := StatusBar1.Hint;
      try
        StatusBar1.Hint := '';
        for i := 0 to StatusBar1.Panels.Count - 1 do
        begin
          inc(o, StatusBar1.Panels[i].Width);
          with StatusBar1.Panels[i] do
            if (Y >= 3) and (Y <= 14) and (X >= (o - Width)) and (X < o) then
            begin
              case TStatusBarPanels(i) of
                sbpBtnFirst .. sbpBtnLast :
                  begin
                    case TStatusBarPanels(i) of
                      sbpBtnFirst  : StatusBar1.Hint := ActionFirst.Hint;
    				  .
    				  .
    				  .
                      sbpBtnLast   : StatusBar1.Hint := ActionLast.Hint;
                    else ;
                    end;
                  end;
                sbpPFileName : StatusBar1.Hint := _Actual.FileName;
                else ; 
              end;
        end;
      finally
        if (h <> StatusBar1.Hint) then
          Application.CancelHint;
      end;


    Yan.


    devYan.

Discussions similaires

  1. [VB]Retouver les clés des items d'une Collection, c'est possible ?
    Par marchand_de_sable dans le forum VBA Access
    Réponses: 11
    Dernier message: 19/12/2016, 16h44
  2. Réponses: 16
    Dernier message: 15/05/2006, 14h49
  3. Se positionner sur un item d'une liste déroulante
    Par pyxosledisciple dans le forum IHM
    Réponses: 1
    Dernier message: 08/02/2006, 20h19
  4. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  5. [Portal 9iAS] : ordre des items dans une région
    Par melitta dans le forum Oracle
    Réponses: 8
    Dernier message: 21/10/2004, 14h01

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