Afficher plusieurs fois le même composant

Résolu
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007 - 26 janv. 2005 à 21:16
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 - 8 févr. 2005 à 19:44
Bonjour, je suis débutant en delphi, et je voulais savoir si'il était
possible, comme en visual basic, de créer un groupe de composant, c'est
a dire un tableau de bouton par exemple, et que dans les procédures
associées aux événemments de ce composant, on ait l'index.

J'ai essayé la méthode suivante mais ça ne marche pas :'(

button1 := array[0..5] of tbutton;



Merci de m'aider !!

10 réponses

cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
26 janv. 2005 à 21:58
var MyBut : TButton ;
implementation
procedure OnClickEvent(Sender:TObject);
begin
//évènement
end;

procedure TForm1.OnCreate(Sender:TObject);
begin
MyBut:= TButton.Create;
MyBut.OnClick:=OnClickEvent;
end ;

procedure TForm1.OnClose(...);
begin
MyBut.Free;
end;
end.

On aurait pu gérer des blocs INITIALIZATION et FINALIZATION, mais restons simple si tu veux les créer dynamiquement.

=============
Validez les réponses si ok...

ViewVite : HTML
3
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
26 janv. 2005 à 22:34
var MyBut : array[0..(*Un trou*)] of TButton ;
implementation
var UnNombre : integer;
procedure OnClickEvent(Sender:TObject, indx:smallint);
//Sender est normalement uniquement autorisé. Je n'ai jamais essayé, mais indx devrait être interdit. Déclare plutôt une variable sous le mot implementation, et gère-là ensuite
begin
showmessage('index: ' + Intostr(smallint));
//Non sens
end;


procedure TForm1.OnCreate(Sender:TObject);
var i : integer;
begin
for i := 0 to length(mybut) do
//Là, tu te fous de ma gueule
begin
MyBut[i]: =TButton.Create;
//MyBut n'a aucune propriété
MyBut[i].Name:= 'but'+IntToStr(i);
MyBut[i].Parent:=Form1;
MyBut[i].Caption...
MyBut[i].OnClick:= OnClickEvent (i) //pas de paramètres. On assigne un PROCEDURE OF OBJECT.</gras>
end;
end;


procedure TForm1.OnClose(...);
//manque une déclaration
var i : integer;
begin
for i : = 0 to length(mybut)//idem</gras>
begin
MyBut[i].Free;
end;
//les alignements: 0/20
end.

Dis-moi, t'as pas Delphi là ?

=============
Validez les réponses si ok...

ViewVite : HTML
3
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
26 janv. 2005 à 21:40
Gérer un composant:
Form1.Components[index];

Nombre de composants:
Form1.ComponentCount;

Tester la classe:
if (Form1.Components[index] is TButton) then ... ;

Faire une boucle:
var i : integer;
begin
for i:= 0 to Form1.ComponentCount-1 do
if...
end;

Initialiser un tableau
procedure Form1.OnCreate(...);
var MonTbl : array[0..1] of TButton = (Form1.But01, Form1.But02);
begin
end;

//je doute de cette réponse

Le smiley à la fin de ta question est limite douteux...

===========
Validez les réponses si ok...

ViewVite : HTML
0
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
26 janv. 2005 à 21:49
désolé pour le smiley, j'avais pas vu qu'il était animé, je voulais
juste mettre le petit bonhome rouge :s, mais si je cré dynamiquement
des boutons, comment intercepter leur évenements ? Est-ce au moins
possible
0

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

Posez votre question
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
26 janv. 2005 à 22:09
Merci a toi grandvizir, une dernière chose cependant:

est ce que le code suivant est correct ?

var MyBut : array[0..] of TButton ;
implementation
procedure OnClickEvent(Sender:TObject, indx:smallint);
begin
showmessage('index: ' + Intostr(smallint));
end;

procedure TForm1.OnCreate(Sender:TObject);

var i : integer;
begin

for i := 0 to length(mybut) do

begin

MyBut[i]:=TButton.Create;
MyBut[i].OnClick:=OnClickEvent(i);

end;
end ;

procedure TForm1.OnClose(...);
begin


for i : = 0 to length(mybut) do

begin


MyBut[i].Free;
end;
end.
0
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
26 janv. 2005 à 23:01
Merci de ta réponse.
Si, j'avais delphi, mais il fallait que je reboot mon pc pour l'utiliser, et je ne pouvais pas car j'avais une tâches importante en cours, mais peu importe, j'ai corrigé "mon" code, mais par contre les boutons ne s'affichent pas: voici ce que j'ai:
unit Unit1;


interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls;


type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;


var
Form1: TForm1;
MyBut: array[0..5] of TButton;
indbut: smallint;


implementation


{$R *.nfm}


procedure OnClickEvent(Sender:TObject);
begin
showmessage('clic de ?');
end;


procedure TForm1.FormCreate(Sender: TObject);
var i : integer;
begin
for i : = 0 to length(mybut)-1 do
begin


MyBut[i]:= TButton.Create(self);
MyBut[i].Name:='but'+IntToStr(i);
MyBut[i].Parent:=Form1;
MyBut[i].Caption:='but'+inttostr(i);
MyBut[i].Tag:=i;
MyBut[i].OnClick:=OnClickEvent;
mybut[i].Visible := true;
mybut[i].left := 10;
mybut[i].top := 10;
mybut[i].height := 50;
mybut[i].width := 100;
end;
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i : integer;
begin
for i : = 0 to length(mybut)-1 do
begin
myBut[i].Free;
end;
end;
end.
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
26 janv. 2005 à 23:06
Déclare MyBut: array[0..5] of TButton; dans les PRIVATE.

===========
Validez les réponses si ok...

ViewVite : HTML
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
26 janv. 2005 à 23:12
Length(MyButs) doit devenir Hi(MyBut). Sinon fait ainsi:

const Mx = 5;
var MyBut : array[0..Mx] ...
implementation
...
begin
for i: =0 to Mx do ...
end;

Désolé, mais .

===========
Validez les réponses si ok...

ViewVite : HTML
0
retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007
26 janv. 2005 à 23:25
ça n'est pas grave, surtout que chez moi ça ne marche pas. au fait, le
problème ne venait pas de private, car ça ne marchais pas, mais j'ai
tout simplement mis la suite des propriétés dans l'évenements activate
comme ceci ça fonctionne bien:



unit Unit1;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls;



type

TForm1 = class(TForm)

Button1: TButton;

procedure FormCreate(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Button1Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

var



public

{ Déclarations publiques }

end;



var

Form1: TForm1;

MyBut: array[0..5] of TButton;

indbut: smallint;





implementation



{$R *.nfm}



procedure OnClickEvent(Sender:TObject);

begin

showmessage('clic de : '+tbutton(sender).Tag);

end;



procedure TForm1.FormCreate(Sender: TObject);

var i : integer;

begin

for i := 0 to length(mybut)-1 do

begin

MyBut[i]:=TButton.Create(self);

MyBut[i].Name:='but'+IntToStr(i);

end;

end;





procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

var i : integer;

begin

for i := 1 to length(mybut)-1 do

begin

myBut[i].Free;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var i : integer;

begin

//close;



begin



end;



end;

procedure TForm1.FormActivate(Sender: TObject);

var i:longint;

begin

for i := 0 to length(mybut)-1 do

begin



MyBut[i].Parent:=Form1;

MyBut[i].Caption:='but'+inttostr(i);

MyBut[i].Tag:=i;

MyBut[i].OnClick:=OnClickEvent;

mybut[i].Visible := true;

mybut[i].left := 10;

mybut[i].top := 10;

mybut[i].height := 50;

mybut[i].width := 100;

end;

end;



end.



Sur ce je vais me coucher, merci encore pour ton aide
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
8 févr. 2005 à 19:44
Gérer tout çà dans OnActivate est ridicule. C'est à dire que tu veux modifier les propriétés d'un composant à chaque fois que la fenêtre s'active ? Pff... Faudra alors m'expliquer le rôle de OnCreate.

Delphi est similaire à VisualBasic. Ca devrait pas être trop dur à faire les correspondances... ??
But:TButton.Create( Form1 );
Validez les réponses si ok...

ViewVite : HTML
0