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.
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.
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é');
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;