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 :

Répéter événements fils sur père


Sujet :

Langage Delphi

  1. #1
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut Répéter événements fils sur père
    Bonjour,

    Savez vous comment répeter un evenement (tel que OnClick) sur le parent d'un composant ?

    J'ai un evenement OnClick sur un TPanel
    Ce TPanel contient un TButton.

    J'aimerais que quand je clic sur mon TButton je passe dans le OnClick de mon TPanel

    Je peux lier manuellement le OnClick du TPanel sur le OnClick du TButton mais j'aimerais savoir si il existais un autre méthode, car ce TPanel contient plusieurs autres composants. J'ai remarqué que certains composants avais la propriété "RepeatClick" mais pas tous .. (je suis en FM)

    Merci

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 669
    Points : 5 238
    Points
    5 238
    Par défaut
    Je n'ai pas bien compris si le clic sur le bouton est sensé la même procédure que le clic sur le bouton.

    En tout cas rien ne t'empêches de déclencher l'évenement clic du panel qui contient le bouton directement par le code. Si tu ne veux pas nommer explicitemement ce panel tu peux utiliser la propriété "Parent" du bouton pour aller le chercher.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Je ne l'ai qu'en C++Builder dans mon appli à essai pour le OnMouseDown mais cela devrait te donner des idées (EDIT : mince, je vois de voir que tu étais en FMX, tout fonctionne sauf le Perform évidemment)

    En FMX, utilise le Parent, cela permet de rester générique !

    Un Panel contenant un TEdit ou un TButton
    Le Edit ou Button utilise PanelMovableChildControlMouseDown comme OnMouseMove (utilise le Parent du Sender)
    Si tu maintiens "Control", cela renvoie au Parent
    Ce Parent est un Panel qui lui a comme OnMouseMove PanelMovableMouseDown

    Ainsi, en cliquant sur le Panel puis bouge, on déplace ce Panel
    et en Cliquant sur Edit ou Button avec "Control" puis bouge, cela déplace le Panel
    Si l'on ne maintient pas contrôle, cela permet d'utiliser le Edit ou Button normalement


    Code c++ : 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
    //---------------------------------------------------------------------------
    void __fastcall TVCLManipForm::PanelMovableChildControlMouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
      if (Shift.Contains(ssCtrl))
      {
        if (Sender->InheritsFrom(__classid(TControl)))
        {
          if (((TControl*)Sender)->Parent->InheritsFrom(__classid(TPanel)))
          {
            if (((TPanel*)((TControl*)Sender)->Parent)->OnMouseDown)
            {
              ((TPanel*)((TControl*)Sender)->Parent)->Perform(WM_LBUTTONDOWN, 0, 0);
              ((TPanel*)((TControl*)Sender)->Parent)->OnMouseDown(((TControl*)Sender)->Parent, Button, Shift >> ssCtrl, X, Y);
            }
          }
        }
      }
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TVCLManipForm::PanelMovableMouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
      if (Sender->InheritsFrom(__classid(TPanel)))
      {
        OutputDebugString(/*Ansi*/String("Start Move " + ((TPanel*)Sender)->Name).c_str());
        ((TPanel*)Sender)->BringToFront();
        ((TPanel*)Sender)->Invalidate();
        ((TPanel*)Sender)->Perform(WM_LBUTTONUP, 0, 0);
        ((TPanel*)Sender)->Perform(WM_SYSCOMMAND, SC_MOVE + 2, 0); // Bloque tant que l'on maintient le bouton de la souris appuyé !
        OutputDebugString(/*Ansi*/String("End Move " + ((TPanel*)Sender)->Name).c_str());
      }
    }

    Code dfm : 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
     
          object PanelMovable: TPanel
            Left = 215
            Top = 184
            Width = 185
            Height = 41
            Caption = 'PanelMovable'
            TabOrder = 2
            OnMouseDown = PanelMovableMouseDown
          end
          object PanelMovable2: TPanel
            Left = 215
            Top = 231
            Width = 185
            Height = 42
            Alignment = taLeftJustify
            TabOrder = 9
            OnMouseDown = PanelMovableMouseDown
            object EditInMovable2: TEdit
              Left = 8
              Top = 12
              Width = 169
              Height = 21
              TabOrder = 0
              Text = 'EditInMovable2'
              OnMouseDown = PanelMovableChildControlMouseDown
            end
          end
          object PanelMovable3: TPanel
            Left = 215
            Top = 279
            Width = 185
            Height = 41
            TabOrder = 10
            OnMouseDown = PanelMovableMouseDown
            object ButtonInMovable3: TButton
              Left = 8
              Top = 8
              Width = 169
              Height = 25
              Caption = 'ButtonInMovable3'
              TabOrder = 0
              OnClick = ButtonInMovable3Click
              OnMouseDown = PanelMovableChildControlMouseDown
            end
          end
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    Par défaut
    Le Troll est quand même le seul à répondre en C++ à des questions posées sur Delphi, il faut le faire

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Et j'ai répondu bien plus souvent en Delphi sur la section C++Builder du forum

    En même temps, c'est du C++Builder, en gros on remplace -> par . et {} par begin end et cela devienne du Delphi
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Merci beaucoup Shai
    Pas grave pour le C++ cela me suffit
    Je test ce code ce soir

Discussions similaires

  1. Champs Pères/Fils sur champ multivalué ?
    Par clickandgo dans le forum IHM
    Réponses: 3
    Dernier message: 24/04/2012, 23h11
  2. [AC-2007] Relation Père/Fils sur onglets
    Par AlainL dans le forum IHM
    Réponses: 2
    Dernier message: 20/01/2010, 16h33
  3. Relation père / fils sur une même table
    Par useramina dans le forum JPA
    Réponses: 0
    Dernier message: 03/05/2009, 13h44
  4. [Mapping] Relation père fils sur une même table.
    Par Invité dans le forum Hibernate
    Réponses: 1
    Dernier message: 11/06/2008, 17h14
  5. événement Click sur Check et option button ??
    Par badsepuku dans le forum IHM
    Réponses: 3
    Dernier message: 09/02/2006, 12h51

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