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
7
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
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
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
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
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