Groupe de Tbutton

Résolu
nakos91 Messages postés 12 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 11 novembre 2010 - 23 janv. 2008 à 19:00
cs_Shai Messages postés 50 Date d'inscription mardi 8 octobre 2002 Statut Membre 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

7 réponses

fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
23 janv. 2008 à 19:43
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
3
nakos91 Messages postés 12 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 11 novembre 2010
23 janv. 2008 à 20:22
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
0
Utilisateur anonyme
23 janv. 2008 à 20:47
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
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
23 janv. 2008 à 21:03
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
23 janv. 2008 à 21:06
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="" />
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
23 janv. 2008 à 21:07
Argh ,
Guillemouze à été plus rapide que moi

 
@+
Cirec

<hr siz="" />
0
cs_Shai Messages postés 50 Date d'inscription mardi 8 octobre 2002 Statut Membre Dernière intervention 21 décembre 2011
24 janv. 2008 à 15:43
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
0
Rejoignez-nous