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

Composants VCL Delphi Discussion :

boucle pour modifier caption de plusieur boutons


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Albanie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2013
    Messages : 75
    Points : 62
    Points
    62
    Par défaut boucle pour modifier caption de plusieur boutons
    salut
    j' ai une form centient 10 bouton et un SpeedButton
    commment programmer une boucle pour changer caption de tous les bouton (caption contient le numero du bouton)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    var i:integer;
    begin
    
    
    for i :=1 to 10 do 
    Buttoni.caption:= i;
    
    end;

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 877
    Points : 11 366
    Points
    11 366
    Billets dans le blog
    6
    Par défaut
    Dans la FAQ se trouve un code facilement adaptable à ton cas, destiné à parcourir les composants d'une fiche.

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Albanie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2013
    Messages : 75
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Dans la FAQ se trouve un code facilement adaptable à ton cas, destiné à parcourir les composants d'une fiche.
    merci voila la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    Var i:Integer;
    begin
      For i:=0 To ComponentCount-1 Do
      If Components[i] Is TButton Then
        TButton(Components[i]).Caption:= inttostr(i);
     
    end;

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 877
    Points : 11 366
    Points
    11 366
    Billets dans le blog
    6
    Par défaut
    Oui, mais tu n'auras pas la certitude que le bouton ButtonX aura X pour Caption avec ton code, si cela est important.

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 402
    Points : 3 169
    Points
    3 169
    Par défaut
    Bonjour, sinon tu peux utiliser un tableau de TButton et utiliser la propriété Tag :

    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
    unit Boutons;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        BT: TButton;
        procedure FormDestroy(Sender: TObject);
        procedure BTClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      Bouton : array[1..10] of TButton;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormDestroy(Sender: TObject);
      var
        i : Byte;
      begin
       {Important: Free your created Buttons}
       for i := 1 to 10 do
         Bouton[i].free;
    end;
     
    procedure TForm1.BTClick(Sender: TObject);
    begin
       ShowMessage('Bouton n° ' + IntToStr((Sender as TButton).Tag) + ' cliqué!');
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
      var
       i : Byte;
      begin
       for i := 1 to 10 do
       begin
          Bouton[i] := TButton.Create(Self);
         With Bouton[i] do
         begin
          Parent := Form1;
          Caption := 'Bouton n° '+ IntToStr(i);
          Left := 10 ;
          Top := i * Height;
          Tag := i;
          OnClick :=  BTClick;
          Visible := True;
         end;
        end;
    end;
     
    end.
    A+

    Charly

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 649
    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 649
    Points : 25 397
    Points
    25 397
    Par défaut
    le FormDestroy avec le Free des Bouton est inutile
    le Owner 'Self' c'est à dire l'instance courante de TForm1 à sa libération va libérer les TButton
    Mais encore ce n'est pas tout, un contrôle ne peut pas exister sans son Parent, du coup, la libération de Form1 sera la première cause de libération (avant celle du Owner)
    Dans d'autres circonstances, le Free est nécessaire (en général, ce n'est pas le cas avec des classes héritées de TComponent et TControl si l'on gère Owner et\ou Parent)


    Le Tableau Bouton serait mieux placé en membre privé de TForm1
    Eviter l'utilisation de la variable Form1 au profit de Self est aussi a privilégié

    Enfin, il y FindComponent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    var
      I: Integer;
      Cpt: TComponent;
    begin
      for I := 1 to 10 do
      begin
        Cpt := FindComponent(Format('Button%d', [I]));
        if Cpt is TButton Then
          TButton(Cpt).Caption:= IntToStr(i);   
      end; 
    end;

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 402
    Points : 3 169
    Points
    3 169
    Par défaut
    Merci ShaiLeTroll pour ces conseils avisés !
    A+
    Charly

  8. #8
    Membre à l'essai Avatar de BigBisous1013
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Une autre Soluce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm2.sButton1Click(Sender: TObject);
    var
      I : Integer;
    begin
      for I := 0 to Form2.ComponentCount - 1 do  begin
        if Form2.Components[I] is TSpeedButton then begin  // C'est bien un SpeedButton ?
            TSpeedButton(Form2.Components[I]).Caption := 'BUTTON' + IntToStr(I);
            // Et ainsi de suite tu peux TOUT Changer...
        end;
      end;
    end;
    il y a aussi le FOR .. IN.. à essayer.

    Un dinosaure

  9. #9
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 402
    Points : 3 169
    Points
    3 169
    Par défaut
    Bonjour,

    oui, mais comme dit Tourlourou :

    Oui, mais tu n'auras pas la certitude que le bouton ButtonX aura X pour Caption avec ton code, si cela est important.
    A+
    Charly

Discussions similaires

  1. [Débutant] fichier bat avec boucle pour modifier fichier
    Par overhead dans le forum Développement Windows
    Réponses: 1
    Dernier message: 30/12/2017, 14h20
  2. [XL-2010] Boucle pour modifier les cellules non vides
    Par scayhes dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/04/2013, 12h23
  3. Réponses: 1
    Dernier message: 16/10/2012, 05h16
  4. [Débutant] boucle pour modifier et enregistrer des images
    Par Grichka146 dans le forum Images
    Réponses: 2
    Dernier message: 30/08/2011, 17h02
  5. [XL-2003] boucle pour remettre à zero plusieurs Checkbox
    Par jpegue dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/10/2009, 14h52

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