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 :

Intercepter le click droit sur la barre de titre !


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 453
    Points : 1 337
    Points
    1 337
    Par défaut Intercepter le click droit sur la barre de titre !
    Bonjour à toutes et à tous,

    J'utilise une procédure qui me permet de faire avec le click droit sur la barre de titre un effet de rollup sur ma forme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     procedure WMNCRButtonDown(var Msg : TWMNCRButtonDown); message WM_NCRBUTTONDOWN;
    Cela fonctionne correctement.

    Ma question dans le cas de l'utilisation d'un skin (VclSkin), cela ne fonctionne plus, je pense que le skin se place au dessus de la barre de titre et le click droit n'a donc aucun effet.

    Si quelqu'un avait une idée pour contrer à ce problème par le click directement sur la forme ou par le menu standard de la forme ce serait chouette.

    Merci à tous,

    @+,

    Cincap

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Bonsoir,

    @ cincap,salut ,

    Ma question dans le cas de l'utilisation d'un skin (VclSkin), cela ne fonctionne plus, je pense que le skin se place au dessus de la barre de titre et le click droit n'a donc aucun effet.
    Effectivement, en utilisant VCL Skin, le skin choisi par l'utilisateur va se mettre dessus et par conséquent ta fonction de roll up n'aura donc aucun effet.
    Pour que ça marche,je pense qu'il faudrait mettre la propriété "Skin controls =>xcMainMenu" à false.

    Si quelqu'un avait une idée pour contrer à ce problème par le click directement sur la forme ou par le menu standard de la forme ce serait chouette.
    On peut contrer ce problème facilement avec l'utilisation d'un bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [...]
    private
      //  procedure WMNCRButtonDown(var Msg: TWMNCRButtonDown) ; message WM_NCRBUTTONDOWN;
       fOldClientHeight: Integer;
    [...]
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
       h : integer;
        Msg: TWMNCLButtonDown;
    begin
       //if (Msg.HitTest = HTCAPTION) then
      // begin
         if (ClientHeight = 0) then
         begin
           for h := 0 to fOldClientHeight do ClientHeight := h;
           Application.ProcessMessages;
         end
         else
         begin
           fOldClientHeight := ClientHeight;
           for h := fOldClientHeight downto 0 do ClientHeight := h;
           Application.ProcessMessages;
         end;
      // end;
    end;
    Bonne chance mon ami.

    NABIL74

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 453
    Points : 1 337
    Points
    1 337
    Par défaut
    @ Nabil74, excellent, cela fonctionne mais dans le cas du bouton, à un moment il disparait, comment alors inverser le rollup pour retrouver la forme initiale à part mettre un bouton supplémentaire dans le caption et le code associé pour un va et vient.

    VclSkin permet de rajouter ce bouton sans problème.

    Pour que ça marche,je pense qu'il faudrait mettre la propriété "Skin controls =>xcMainMenu" à false.
    Dans ce cas, le skin est visible sur les boutons ect mais pas sur la fiche.

    @+,

    Cincap

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    bonjour,

    Si quelqu'un avait une idée pour contrer à ce problème par le click directement sur la forme
    oui cincap ça peut se faire comme le clique sur le bouton mais quand ta fiche sera réduite,tu ne pourras pas faire un rollup après

    Dans ce cas, le skin est visible sur les boutons mais pas sur la fiche.
    oui il est visible sur tous les contrôles sauf la fiche.

    Voici un bout de code qui fait un Roll up sur ta fiche même avec VCL Skin:
    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
    {...}
     private
        procedure WMSysCommand(var Msg: TWMSysCommand ) ; message WM_SYSCOMMAND;
     //  function MessageHook(var Msg: TMessage): Boolean;
     
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      fOldClientHeight: Integer;
    implementation
    const    SC_MyMenuItem1 = WM_USER + 1;
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    const sMyMenuCaption1 = 'Rollup';
    var     SysMenu : HMenu;
    begin
     SysMenu := GetSystemMenu(Handle, FALSE) ;
      {Ajouter un bar seperator à la form1}
      AppendMenu(SysMenu, MF_SEPARATOR, 0, '') ;
      {Ajouter notre menu}
      AppendMenu(SysMenu, MF_STRING, SC_MyMenuItem1, sMyMenuCaption1) ;
    // Application.HookMainWindow(MessageHook);
    end;
     
     
    procedure TForm1.WMSysCommand(var Msg : TWMSysCommand) ;
    var
       h : integer;
    begin
     if Msg.CmdType = SC_MyMenuItem1 then halt  else   inherited;
     
     if (ClientHeight = 0) then
         begin
           for h := 0 to fOldClientHeight do ClientHeight := h;
           Application.ProcessMessages;
         end
         else
         begin
           fOldClientHeight := ClientHeight;
           for h := fOldClientHeight downto 0 do ClientHeight := h;
           Application.ProcessMessages;
         end;
    end;
     
    {function TForm1.MessageHook(var Msg: TMessage): Boolean;
    begin
     if (Msg.Msg = WM_SYSCOMMAND) and (Msg.wParam = SC_MyMenuItem1) then  halt;
    end; }
    l'ajout d'un nouveau item dans le menu de la fiche ne se fait pas,mais on a besoin de ça juste pour le roll up(en cliquant sur la barre de titre).

    A+

    NABIL74

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 453
    Points : 1 337
    Points
    1 337
    Par défaut
    @ Nabil74, très bien mais j'avais déjà essayé une procédure semblable mais qui fermait mon application.

    Je viens de tester ta procédure et j'ai le même phénomène.

    On ne pourrai pas avec un ajout de mon bouton dans le caption réaliser un rollup dans les deux sens en gardant ta 1ère suggestion.


    En fait, j'appliquai le click droit et puis sur rollup donc forcément cela buggait.

    J'applique donc le click gauche sur le caption et en effet cela fonctionne, un nouveau click et ma fiche reprend sa taille mais si je diminue ma fiche ou je la ferme, j'obtiens un gafouillage.

    @+,

    Cincap.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 453
    Points : 1 337
    Points
    1 337
    Par défaut
    @ Nabil74, c'est ok, j'utilise mon 1er code avec le click droit sur le caption qui fonctionnait sans le skin et je l'applique à ma procédure supplémentaire qui affiche un bouton près de celui de réduction de Windows ce code et cela fonctionne dans les deux sens plus rapide que ton 1er code ce qui m'arrange.

    Encore merci de ta patience,

    @+,

    Cincap

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par cincap Voir le message
    @ Nabil74, c'est ok, j'utilise mon 1er code avec le click droit sur le caption qui fonctionnait sans le skin et je l'applique à ma procédure supplémentaire qui affiche un bouton près de celui de réduction de Windows ce code et cela fonctionne dans les deux sens plus rapide que ton 1er code ce qui m'arrange.

    Encore merci de ta patience,

    @+,

    Cincap
    tu veux dire que tu as fait ton rollup sans le VCL Skin?
    ou tu as ajouté un bouton dans la barre de titre(en utilisant VCL Skin) sur lequel on appuie et par la suite on a un rollup?

    NABIL74

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 453
    Points : 1 337
    Points
    1 337
    Par défaut
    @ Nabil74,

    tu veux dire que tu as fait ton rollup sans le VCL Skin?
    ou tu as ajouté un bouton dans la barre de titre(en utilisant VCL Skin) sur lequel on appuie et par la suite on a un rollup?
    Non j'utilise bien la VclSkin et j'ai ajouté une procédure pour afficher un 4ième bouton sur le Skin de la VclSkin ainsi que le code qui simule le click droit sur le caption.

    Tu as mon émail

    @+,

    Cincap

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 453
    Points : 1 337
    Points
    1 337
    Par défaut Une autre façon de faire !
    @ Tous, voici une méthode facile pour intercepter le click sur la barre de titre.

    Placez un composant TApplicationEvents sur la fiche et dans le OnMessage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    begin
     
    //WM_NCLBUTTONDOWN = Click gauche.
     
      If (Msg.message = WM_NCLBUTTONDOWN)And(Msg.hwnd=Handle)  then 
     
        showmessage('Vous avez cliqué sur la barre de titre !');
      End;
    @ +,

    Cincap

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

Discussions similaires

  1. Clic droit sur la barre de titre
    Par eighty_three dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 15/05/2008, 19h33
  2. Réponses: 9
    Dernier message: 27/02/2008, 16h35
  3. Réponses: 7
    Dernier message: 27/06/2005, 22h05
  4. Event Click droit sur ComboBox
    Par AF_STjohn dans le forum C++Builder
    Réponses: 8
    Dernier message: 29/04/2005, 11h48
  5. [JSP][Javascript] click droit sur un lien
    Par Stessy dans le forum Servlets/JSP
    Réponses: 22
    Dernier message: 24/09/2004, 10h14

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