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

Lazarus Pascal Discussion :

Recherche d'un composant dans une feuille [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Par défaut Recherche d'un composant dans une feuille
    Bonjour,
    je cherche un composant dans une feuille ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      var
         Bouton              : TSpeedButton;
      begin
         Bouton:=TSpeedButton(FrmGraph.FindComponent('SbnClr'));
         if Bouton<>Nil then
           Bouton.caption:='Couleur'
      end;
    mais le bouton reste à 'nil', alors que le bouton existe dans la feuille.
    quand j'écris ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      begin
        with FrmGraph.SbnClr do
          caption:='Couleur'
        end;
    ça fonctionne.

    //-----------
    je dois faire une erreur quelque part.
    bonne journée

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    FrmGraph n'est pas le propriétaire de ce bouton.

    Tu peux avoir une déclaration SbnClr :TSpeedButton dans FrmGraph mais créer dynamiquement ce composant en lui passant un propriétaire différent dans son constructeur (un panel par exemple). FrmGraph.FindComponent ne le trouvera pas puisqu'il n'appartient pas à FrmGraph mais au panel.

  3. #3
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut,
    Je n'ai pas testé mais pour faire ce que tu souhaites, il faut parcourir tous les composants de ta "Form"

    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
     
    procedure TForm1.ModifierSpeedButton;
    var
      Bouton              : TSpeedButton
      I : Integer;
    begin
      for I:= 0 to Self.ComponentCount-1 do
      begin
        if Self.Components[I] is TSpeedButton then
        begin
           Bouton:=TSpeedButton(Self.Components[I]);       
           if Bouton<>Nil then 
           begin
              if Bouton.Name = 'SbnClr' then Bouton.caption:='Couleur'
           end;
        end;
      end; 
    end;
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    il faut parcourir tous les composants de ta "Form"
    Ça n'apporte rien si le bouton n'est pas possédé par la fiche
    Il faudrait que ta procédure soit récursive.

  5. #5
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Ça n'apporte rien si le bouton n'est pas possédé par la fiche
    Il faudrait que ta procédure soit récursive.
    Oui tu as raison, je n'y avais pas pensé

    Donc voila, un truc qui affiche les controles dans un memo :

    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
    procedure TForm1.Button1Click(Sender : TObject);
     
    procedure FindControl(Root : TControl);
    var
      I : Integer;
    begin
      for I:= 0 to Root.ComponentCount-1 do
      begin
        if (Root.Components[I] is TControl) then
          if (Root.Components[I] as TControl).ComponentCount > 0 then
            FindControl(TControl(Root.Components[I]))
          else
            Memo1.Append(Root.Components[I].Name);
      end;
    end;
    begin
      FindControl(self);
    end;
     
    procedure TForm1.FormCreate(Sender : TObject);
    begin
      Button2 := TButton.Create(Panel2);
      Button2.Parent := Panel2;
      Button2.Top := 4;
      Button2.Left := 4;
      Button2.Name := 'MyButton';
     
    end;
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    Ce serait typiquement quelque chose qui pourrait se faire par class helper et "partiellement" répondre aux interrogations de ChPr sur le sujet.

    Le but ici serait d'ajouter une nouvelle fonction FindComponent récursive à TComponent pour que tous les composants héritant de TComponent (fiche, panel, groupbox, etc.) puissent l'utiliser.
    Ou en d'autres termes, ajouter une méthode à une classe ancêtre sans pour autant modifier ses sources

    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
    type
      TComponentHelper = class Helper for TComponent
      public
        function FindComponentEx(const aName: string): TComponent;
      end;
     
    function TComponentHelper.FindComponentEx(const aName: string): TComponent;
    var
      i :integer;
     
    begin
      Result := FindComponent(aName);
      if Assigned(Result) then Exit;
     
      for i := 0 to ComponentCount -1 do
      begin
        Result := Components[i].FindComponentEx(aName);
        if Assigned(Result) then Exit;
      end;
    end;
     
    //puis
     
    Form1.FindComponentEx('Button1');
    Panel1.FindComponentEx('Button1');
    etc.
    J'avais initié une discussion sur le sujet à l'époque, de quoi se familiariser avec le truc pour ceux qui ne connaissent pas ou se remémorer les possibilités pour les autres

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

Discussions similaires

  1. [Toutes versions] recherche d'un élément dans une feuille grâce à un algo vba
    Par Rossinant dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/05/2019, 15h53
  2. [XL-2010] Recherche de multiples valeurs dans une feuille
    Par Yellow-Sky dans le forum Excel
    Réponses: 14
    Dernier message: 01/05/2019, 10h03
  3. Recherche d'un texte dans une feuille et recuperation des coordonnees
    Par Youpititi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/11/2008, 08h48
  4. Recherche par mot clef dans une feuille excel.
    Par takamo dans le forum Excel
    Réponses: 12
    Dernier message: 18/06/2008, 14h35
  5. [RAVE]Composant RTF dans une feuille RAVE ?
    Par hpalpha dans le forum Rave
    Réponses: 3
    Dernier message: 29/03/2004, 19h25

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