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 :

Changement de Sender


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 20
    Points : 22
    Points
    22
    Par défaut Changement de sender en cours d'évènement
    Bonjour,

    Je cherche à changer le Sender durant un évènement. Je m'explique : lors d'un MouseDown sur un composant, je crée un nouveau composant identique à celui sur lequel j'ai cliqué, et je voudrais que le MouseMove suivant soit executé sur le composant nouvellement créé. Or c'est l'ancien, celui sur lequel j'ai fait le MouseDown qui garde la main. Est-ce possible de passer d'un composant à l'autre ? Merci de votre aide.

    Cordialement,
    Thierry

  2. #2
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    lors du MouseDown tu crée ton composant, et tu le stoque dans une variable.
    lors tu MouseMove tu ne déplace pas le sender, mais le compo stoqué dans ta variable.
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 20
    Points : 22
    Points
    22
    Par défaut
    Super, merci !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 20
    Points : 22
    Points
    22
    Par défaut Changement de Sender
    Bonjour,

    J'avais posé la question avant hier pour modifier le composant qui gère des évènements en cours de procédures liées à ces évènements : un MouseDown sur un composant créé un second composant, et c'est ce nouveau composant que je veux gérer maintenant.
    Denokan m'avait suggérer d'utiliser une variable globale, réponse qui m'allait, jusqu'à ce que j'ai besoin d'utiliser les autres paramètres de l'évènement MouseMove. En effet, les X et Y sont ceux du composant initial, pas ceux du nouveau composant, ce qui fait que j'ai un comportement incohérent sur mon nouveau composant. Est-il donc possible de transférer les messages sur le nouveau composant ?

    Cordialement,
    Thierry

  5. #5
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    X et Y indiquent les coordonnées, exprimées en pixels, du pointeur de la souris dans la zone client de Sender.
    as-tu bien affecté une méthode à l'évènement MouseMove du composant que tu crées par code ?
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 20
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Désolé de répondre si tard, je n'ai pas pu suivre le forum de la semaine.

    J'affecte bien une méthode à l'évènement MouseMove du nouveau composant, c'est le même que celui de l'ancien :

    NouveauComp.OnMouseMove:=AncienComp.OnMouseMove

    C'est en tracant le X et Y dans cette méthode que je vois qu'ils sont relatifs à l'ancien composant.

  7. #7
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    je me permet de supposer que tu souhaite faire du drag & drop de composant en runtime...
    - si j'ai raison, regarde la pièce jointe ça devrait t'aiguiller
    - si j'ai tort, je m'en excuse , je te conseillerai alors de regarder si tu peux stoquer quelque part la position de la souris par rapport au système (et non au composant client) au moment du MouseDown, puis calculer la position relative dans chaque MouseMove
    Fichiers attachés Fichiers attachés
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 20
    Points : 22
    Points
    22
    Par défaut
    Merci de ton aide.

    Ca correspond à du D&D de composant, mais avec création d'un nouveau composant avant le D&D. En pièce jointe un prjet simple qui correspond à ce que j'attends : 1 composant rouge, en cliquant dessus, ça crée un nouveau composant vert, copie du rouge, et c'est ce composant vert que je voudrais déplacer.

    De mon côté, je vais regarder la solution de la position relative à la fenêtre pour tous les composants.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 20
    Points : 22
    Points
    22
    Par défaut
    Les essais avec une gestion globale des coordonnées se sont révélés fructueux (Denokan, merci de la piste de recherche) :

    en ajoutant une variable à ma fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private
      CompoMoved: TCompoPerso;
    Et en modifiant les procédures MouseMove et MouseDown de la façon suivante, ça marche :
    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
     
    procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    var
      Point : TPoint;
    begin
      Point.X:=X;
      Point.Y:=Y;
      with CompoMoved do
      begin
        if ssLeft in shift then
        begin
          Left:=TCompoPerso(Sender).ClientToParent(Point).X-DecX;
          Top:=TCompoPerso(Sender).ClientToParent(Point).Y-DecY;
        end;
      end;
    end;
     
     
    procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      Point: TPoint;
    begin
      Point.X:=X;
      Point.Y:=Y;
      TCompoPerso(Sender).DecX:=X;
      TCompoPerso(Sender).DecY:=Y;
      CompoMoved:=TCompoPerso.Create(Self);
      with CompoMoved do
      begin
        Parent:=Self;
        Left:=TCompoPerso(Sender).ClientToParent(Point, nil).X;
        Top:=TCompoPerso(Sender).ClientToParent(Point, nil).Y;
        Width:=50;
        Height:=30;
        Couleur:=clLime;
        OnMouseMove:=Self.MouseMove;
        OnMouseUp:=Self.MouseUp;
        OnMouseDown:=Self.MouseDown;
        DecX:=X;
        DecY:=Y;
        inc(Cpt);
        Texte:=IntToStr(Cpt);
      end;
    end;
    Mais je reste intéressé pour savoir s'il est possible de 'réaffecter' les évènements au nouveau composant...

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

Discussions similaires

  1. Changement de l'icone d'une appli sous kdevelop
    Par vedder dans le forum Linux
    Réponses: 3
    Dernier message: 06/02/2003, 14h16
  2. Changement de langue dynamique (D6 et outils de traduction)
    Par agon dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2002, 16h15
  3. Un Sender peut-il s'auto-détruire lors d'un onClick?
    Par Flo. dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/07/2002, 10h31
  4. URGENT : Zoom et changement de repère
    Par poca10 dans le forum MFC
    Réponses: 5
    Dernier message: 28/05/2002, 13h32

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