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 :

quel item d'un menu est sélectionné (avant le clic) ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Par défaut quel item d'un menu est sélectionné (avant le clic) ?
    Bonjour

    La question est dans le titre...
    Dans un menu, (au cas particulier un popupmenu), l'élément de menu sélectionné (avant tout clic) change lorsque l'utilisateur déplace la souris au-dessus du menu
    Comment faire pour récupérer l'indice de cet item en surbrillance...
    avant le clic ?

    Merci pour votre aide

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,
    Je dirais qu'il faut tester le parametre 'State' dans le OnDrawItem de chaque Item...

    @ +

  3. #3
    Membre éclairé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Par défaut
    Salut Sunchaser
    Et merci pour ton tuyau

    J'ai fait ça pour tester...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure Tpal.menfiltreAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
      ARect: TRect; State: TOwnerDrawState);
    begin
      if odselected in state then showmessage('ok');
    end;
    Apparemment ça marche, sauf qu'il faut mettre la propriété ownerdraw du menu parent à true...
    Pas de pb, sauf que le caption de mon item ne s'affiche pas (les autres oui)
    ???

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,
    Hé oui....c'est ça qui est 'relou' avec ces évènements, c'est qu'après tu dois tout gérer donc même l'affichage du caption de l'élèment.
    Voici un bout de code que j'applique a tous les élèments d'un PopupMenu, en espérant t'éclairer. (c'est sous C++Builder mais je pense que tu réadapteras sans trop de soucis...)
    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
     
    ACanvas->Brush->Color = clSilver;
    ACanvas->FillRect(ARect);
    if (State.Contains(odSelected))
    {
    ACanvas->Font->Color = clRed;
    ACanvas->Font->Style = TFontStyles()<< fsBold;
    ACanvas->Rectangle(ARect);
    }
    else
    {
    ACanvas->Font->Color = clNavy;
    ACanvas->Font->Style = TFontStyles();
    }
    tagRECT* pRect = new tagRECT();
    pRect->left = ACanvas->ClipRect.left;
    pRect->right = ACanvas->ClipRect.right;
    if (Index > 0)
    {
            pRect->top = 20 * Index;
    }
    else
    {
            pRect->top = ACanvas->ClipRect.top;
    }
            pRect->bottom = ACanvas->ClipRect.bottom;
    DrawText(ACanvas->Handle, ((TMenuItem*)Sender)->Caption.c_str(), ((TMenuItem*)Sender)->Caption.Length(), pRect, DT_CENTER);
    pRect = NULL; delete pRect;
    En espérant t'aider,
    @ +

  5. #5
    Membre éclairé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Par défaut
    Ok Sunchaser ça marche au poil
    En Delphi, ça donne ça...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure Tpal.menfiltreAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas;
      ARect: TRect; State: TOwnerDrawState);
    begin
      case odselected in state of
      false: acanvas.Brush.Color:=clmenu;
      true:  acanvas.Brush.Color:=clactivecaption;
      end;
      acanvas.FillRect(arect);
      acanvas.TextOut(arect.Left+7,arect.Top+3,'Filtre');
    end;
    Merci encore pour ton aide précieuse

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/07/2009, 14h49
  2. Quel cellule est sélectionnée?
    Par talrashha dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/08/2008, 10h55
  3. Réponses: 1
    Dernier message: 03/04/2008, 11h08
  4. Comment savoir quel radiobutton est sélectionné ?
    Par eaglesnipe dans le forum C#
    Réponses: 4
    Dernier message: 21/02/2008, 09h44
  5. comment savoir quel menu est en surbrillance?
    Par LRobi dans le forum MFC
    Réponses: 2
    Dernier message: 27/01/2005, 09h04

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