Groupe de Tbutton [Résolu]

Messages postés
13
Date d'inscription
mardi 21 janvier 2003
Dernière intervention
11 novembre 2010
- - Dernière réponse : cs_Shai
Messages postés
51
Date d'inscription
mardi 8 octobre 2002
Dernière intervention
21 décembre 2011
- 24 janv. 2008 à 15:43
var  but:array [1..27] of TButton;
begin
  for i:=1 to 30 do 
  begin
     but[i]:= TButton.Create(Self);
     but[i].Parent := Form1;
     but[i].Height:=75;
     but[i].Width:=140;
     but[i].Left := (16+140)*(i-1)+16;
     but[i].Top := 25;
    but[i].Visible := True;
    BUT[i].Caption:='';
   end;
end;

Bonsoir, j'ai créé des bouton de cette manière qui me convient très bien
par contre je n'arrive pas à gérer l'évènement onclick de chaque bouton qui doit être paramétrable avec la variable i.
Quelqu'un peut-il m'aider, j'ai bien vu des exemple dans le forum mais le boutons ne sont pas créés de la même manière.

Nakos91
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Dernière intervention
11 novembre 2016
3
Merci
Il faut créer la procédure de gestion du clic sous forme

procedure TForm1.bclick(Sender: TObject);
begin
  showmessage('coucou');
end;

et dans la boucle  de création des bouton ajouter la ligne suivante
but[i].OnClick := bclick;

bien sur dans ce cas chaque bouton aura la même procédure de gestion du clic

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de fbalien
Messages postés
13
Date d'inscription
mardi 21 janvier 2003
Dernière intervention
11 novembre 2010
0
Merci
La réponse ne me convient pas puisque le but est de lancer sur chaque bouton un procédure differente sinon il faut que je puisse récuperer l'indice du bouton pour faire varier le fonctionnalité de la procédure mais là aussi je ne sais pas comment faire ce que j'ai essayé ne fonctionne pas.

Nakos91
Commenter la réponse de nakos91
0
Merci
Salut

procedure TForm1.Button1Click(Sender: TObject);
Var
MyProcedures:array[0..8] of procedure;
Begin
end;

Compilation acceptée. A toi de gérer maintenant ce nouveau tableau
Commenter la réponse de Utilisateur anonyme
Messages postés
1015
Date d'inscription
samedi 25 octobre 2003
Dernière intervention
29 août 2013
0
Merci
utilise une TComponentList
MaListe.indexOf(Sender) te renverra l'indice du bouton.

Sinon, utilise le tag :

but[i].tag := i;
et utilise
TButton(Sender).tag dans le onclick pour connaitre l'indice du bouton
Commenter la réponse de Guillemouze
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
Salut,

premier problème :


var  but:array [1..27] of TButton;
begin
  for i:= 1 to 30 do 
  begin
     but[i]: = TButton.Create(Self);
     but[i].Parent := Form1;
     but[i].Height:=75;
     but[i].Width:=140;
     but[i].Left := (16+140)*(i-1)+16;
     but[i].Top := 25;
    but[i].Visible := True;
    BUT[i].Caption:='';
   end;
end;

Sinon une solution serait de faire comme ceci :

begin

  for i:=1 to 27 do 

  begin

     but[i]:= TButton.Create(Self);
     With But[I] do Begin

       Parent := Form1;

       Height:=75;

       Width:=140;

       Left := (16+140)*(i-1)+16;

       Top := 25;

       Visible := True;

       Caption:='';
       Tag := I;
     OnClick := BClick;
    End;

   end;

end;

procedure TForm1.bclick(Sender: TObject);
begin
  If (Sender Is TButton) Then
  Case (Sender As TButton).Tag Of
    1 : ShowMessage('Bouton 1 cliqué');
    2 : ShowMessage('Bouton 2 cliqué');

    3 : ShowMessage('Bouton 3 cliqué');

    4 : ShowMessage('Bouton 4 cliqué');
   // etc etc

  End;
end;
 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
Argh ,
Guillemouze à été plus rapide que moi

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Messages postés
51
Date d'inscription
mardi 8 octobre 2002
Dernière intervention
21 décembre 2011
0
Merci
Tu peux aussi faire une approche sans le Tag ... mais avec des méthodes publiés, avec un nom du genre DynClick1, DynClick2 ...
Labels contient la liste des libellés des boutons, cela peut venir d'un fichier ini ou bdr par exemple !

procedure CreateButtons(AOwner: TComponent; Parent: TWinControl; Labels: TStrings);
var
  Ilbl: Integer;
  ButtonCaption, ButtonMethodName: string;
  ButtonMethod: TMethod;
  Button: TButton;
begin
  if Assigned(AOwner) and Assigned(Labels) then
  begin
    For I := 0 To Labels.Count - 1 do
    begin
      ButtonCaption := Labels;
      ButtonMethodName := Format('DynClick%d', [I]); 
      ButtonMethod.Code := AOwner.MethodAddress(ButtonMethodName);
      ButtonMethod.Data := AOwner; 
      
      Button := TButton.Create(AOwner);
      Button.Parent := Parent;
      Button.Top := Button.Height * I; 
     
      if ButtonMethod.Code <> nil then
        Button.OnClick := TNotifyEvent(ButtonMethod); // ou TypInfo.SetMethodProp(Button, 'OnClick', ButtonMethod); 
     
      Labels.Objects[I] := Button;
    end;
  end;
end;



Shai Le Troll
!! Aide via F1 !! Pensez-y !! 
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer
Commenter la réponse de cs_Shai

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.