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 :

WM_NCLBUTTONUP et WM_LBUTTONUP fonctionnent, fonctionnent pas ?


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 27
    Points
    27
    Par défaut WM_NCLBUTTONUP et WM_LBUTTONUP fonctionnent, fonctionnent pas ?
    Bonjour

    J'ai un sérieux problème avec le message windows WM_NCLBUTTONUP. En effet, je ne parviens pas à capturer le relâchement du bouton gauche de la souris sur la barre de titre. Je ne peux capturer cet évènement uniquement lorsque la fenêtre est maximisée.

    J'ai procédé comme suit :

    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
     
    // Section privée
      private
        { Déclarations privées }
        procedure WMNCLButtonDown(var Message: TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
        procedure WMNCLBUTTONUP(var Message: TWMNCLButtonUp) ; message WM_NCLBUTTONUP;
     
    // section implémentation
     
    procedure TBase.WMNCLButtonDown(var Message: TWMNCLButtonDown);
    begin
      if Message.HitTest = HTCAPTION then begin
        Caption := 'Position Down : ' +  IntToStr(Message.XCursor) + ' - ' +
          IntToStr(Message.YCursor) + ' - ' + IntToStr(Message.Result);
      end;
      inherited;
    end;
     
    procedure TBase.WMNCLBUTTONUP(var Message: TWMNCLButtonUp) ;
    begin
       if Message.HitTest = HTCAPTION then begin
        Caption := 'Position Up : ' +  IntToStr(Message.XCursor) + ' - ' +
          IntToStr(Message.YCursor) + ' - ' + IntToStr(Message.Result);
       end;
       inherited;
    end;
    Autant le message WM_NCLBUTTONDOWN est parfaitement capturé dans toutes les conditions, autant WM_NCLBUTTONUP a un comportement très capricieux. Ne parlons même pas des évènements OnMouseUp de TForm.

    Bref ... si quelqu'un a une solution ou une piste (en évitant les hook de préférences qui sont incompatibles avec certains antivirus), je le remercie par avance.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 831
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 831
    Points : 13 579
    Points
    13 579
    Par défaut
    Commence par vérifier que les messages soient bien envoyés dans toutes les circonstances avec un utilitaire style Winspector.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 27
    Points
    27
    Par défaut
    Il n'y a pas de message pour WM_NCLBUTTONUP renvoyé mais WM_LBUTTONUP lorsque la fenêtre n'est pas maximisée. Le message WM_LBUTTONUP n'est interceptable d'aucune façon sous Delphi (à mon niveau de compétence bien entendu ).

    WM_NCLBUTTONUP est renvoyé uniquement lorsqu'on maximise la fenêtre et qu'on clique sur la barre de titre.

    La question est : Comment faire pour intercepter le message WM_LBUTTONUP qui se produit lorsqu'on appuie sur le bouton gauche de la souris sur la barre de titre et qu'on le relâche ensuite (toujours sur cette même barre de titre) ?

    Merci par avance

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 27
    Points
    27
    Par défaut
    Bonjour

    Puisqu'apparemment personne n'a de solution pour ce problème (bug reconnu par Microsoft), voici une astuce pour parer à ce problème.

    il suffit de rajouter ceci dans la procédure WMNCLButtonDown :

    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
     
      private
        { Déclarations privées }
        procedure WMNCLButtonDown(var Message: TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
        procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
     
    ...
     
    { section implementation }
     
    procedure TBase.WMNCLButtonDown(var Message: TWMNCLButtonDown);
    begin
      if Message.HitTest = HTCAPTION then begin
        Caption := 'Position Down : ' +  IntToStr(Message.XCursor) + ' - ' +
          IntToStr(Message.YCursor) + ' - ' + IntToStr(Message.Result);
      end;
      inherited;
      PostMessage(Self.Handle,WM_LBUTTONUP,0,0);
    end;
     
    procedure TBase.WMLBUTTONUP(var Message: TWMLButtonUp) ;
    begin
       if Message.HitTest = HTCAPTION then begin
        Caption := 'Position Up : ' +  IntToStr(Message.XCursor) + ' - ' +
          IntToStr(Message.YCursor) + ' - ' + IntToStr(Message.Result);
       end;
       inherited;
    end;
    Ce n'est peut être pas très académique, mais cela a l'avantage d'être débloquant. On reçoit bien le message WM_LBUTTONUP, une fois que l'on relâche le bouton gauche de la souris.


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

Discussions similaires

  1. [Conception] INSERT fonctionne a moitié, UPDATE Fonctionne, comprends pas?
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 06/09/2006, 18h22
  2. Réponses: 4
    Dernier message: 29/05/2006, 06h48
  3. Mon script ne fonctionne tjrs pas !!
    Par adlich dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 29/04/2006, 01h43
  4. [ JAD ] Jadclipse fonctionne ou pas ?
    Par lr dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 08/02/2005, 13h17
  5. Menu CSS avec bordures - fonctionne firefox, pas ie
    Par Romalafrite dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 21/11/2004, 16h40

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