Groupe de Tbutton [Résolu]

nakos91 13 Messages postés mardi 21 janvier 2003Date d'inscription 11 novembre 2010 Dernière intervention - 23 janv. 2008 à 19:00 - Dernière réponse : cs_Shai 51 Messages postés mardi 8 octobre 2002Date d'inscription 21 décembre 2011 Dernière intervention
- 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

fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 23 janv. 2008 à 19:43
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de fbalien
nakos91 13 Messages postés mardi 21 janvier 2003Date d'inscription 11 novembre 2010 Dernière intervention - 23 janv. 2008 à 20:22
0
Utile
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
Utilisateur anonyme - 23 janv. 2008 à 20:47
0
Utile
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
Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention - 23 janv. 2008 à 21:03
0
Utile
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
Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscription 11 mai 2018 Dernière intervention - 23 janv. 2008 à 21:06
0
Utile
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
Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscription 11 mai 2018 Dernière intervention - 23 janv. 2008 à 21:07
0
Utile
Argh ,
Guillemouze à été plus rapide que moi

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
cs_Shai 51 Messages postés mardi 8 octobre 2002Date d'inscription 21 décembre 2011 Dernière intervention - 24 janv. 2008 à 15:43
0
Utile
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.