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 :

[OnMouseMove] survol souris, pas si résolu que ça en fait...


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut [OnMouseMove] survol souris, pas si résolu que ça en fait...
    Je me disais bien qu'avec cet événement j'arriverai pas à mes fins!
    L'événement OnMousemove est propre à chaque composant donc en l'implémentant ça marche impec. Seulement voilà, je ne sais pas à l'avance quel composant se trouve sur la fiche...
    J'avais dans l'idée de déterminer le composant sous la souris et ensuite d'écrire un gestionnaire du genre:
    Si c'est telle classe de composant et si ce composant est relié à telles ou telles choses du code alors affiche telle ou telle frame de stats.
    D'où ma question du jour:
    Savez vous comment déterminer quel composant se trouve sous le curseur de la souris SANS untiliser le gestionnaire OnmouseMove?
    Cordialement,
    Hauwke

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    Si vous voulez un gestionnaire pour tous les composants d'une forme, je ne vois que TApplication à utiliser. Le problème tient dans le faite qu'il vous faudrait trier les événements et les composants à traiter à chaque message.

    Une autre option serait de créer une procédure à lancer au on create de la forme.
    Cette procédure irait stoker le onmouseMove de chaque composant dans une liste et remplacerait le onMouseMove par votre onMouseMove

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private
      MouseMoveCount: Integer;
      MouseMoveControl: Array [0..500] of TControl;
      MouseMoveEvent: Array [0..500] of TMousMoveEvent;
    Dans la procedure du on create
    On cherche tous les control si le OnMouseMove du control <> nil on
    ajoute le controle dans la liste MouseMoveControl et le onmousemove dans MouseMoveEvent
    a chaque controle on met le nouveau OnMouseMove

    Dans votre nouveau on mousemove il faut rechercher le composant (sender) et lancer le onMousMove du composant (en plus de votre code)

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Voui :
    dans une fiche, j'ai mis divers controles, dont 1 label pour l'affichage
    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
    65
    66
    67
    68
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        pnl1: TPanel;
        lbl1: TLabel;
        btn1: TButton;
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
        procedure AppMessage(var Msg:TMsg;var Handled:Boolean);
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var AControl:TControl;
        APoint:TPoint;
    begin
      APoint.X:=x;
      APoint.Y:=y;
      lbl1.Caption:='x:'+IntToStr(x)+' y:'+inttostr(y);
      AControl:=Form1.ControlAtPos(APoint,false,true);
      if AControl<>nil then
      begin
        lbl1.Caption:=lbl1.Caption+'Nom : '+AControl.Name+' Classe : '+AControl.ClassName;
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Application.OnMessage:=AppMessage;
    end;
     
    procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
    var AControl:TControl;
        APoint:TPoint;
    begin
    if Msg.message =WM_MOUSEMOVE then
    begin
      lbl1.Caption:='x:'+IntToStr(Mouse.CursorPos.x)+' y:'+inttostr(mouse.CursorPos.y);
     
      AControl:=Form1.ControlAtPos(ScreenToClient(Mouse.CursorPos),false,true);
      if AControl<>nil then
      begin
        lbl1.Caption:=lbl1.Caption+' Nom : '+AControl.Name+' Classe : '+AControl.ClassName;
      end;
    end;
    end;
     
    end.
    Je pense qu'avec ça et en te creusant un peu la tête tu devrais y arriver.
    Bon courage

  4. #4
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonjour,
    Je potasse, je phosphore et je vous tiens au courant.
    Merci de vos promptes réponses
    Cordialement
    Hauwke

Discussions similaires

  1. [hibernate][test unitaire]j'arrive pas à inserer ce que je veux
    Par mehdi_swatch dans le forum Hibernate
    Réponses: 1
    Dernier message: 02/06/2006, 16h31
  2. [RANDOM] Des chiffres pas si aléatoires que ca...
    Par djsbens dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 16/03/2006, 12h22
  3. Rajout d'une ligne à l'aide contextuelle survol souris
    Par patrick24 dans le forum Langage
    Réponses: 3
    Dernier message: 28/12/2005, 11h13
  4. Réponses: 3
    Dernier message: 16/11/2004, 15h51

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