Comment passer en revue un tableau de TButton ? [Résolu]

Signaler
Messages postés
11
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
12 janvier 2005
-
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
-
Bonjours à tous !

J'ai créée un tableau de TWebBrowser de longueur 15.
A Chaque fois que je crée un TWebBrowser je rempli mon tableau avec.
Cependant ces derniers peuvent etre détruits aléatoirement (ex: je crée 10 TWebBrowser et rempli mon tableau avec de 1 à 10, puis je supprime le 2nd, le 5eme et le 8eme).
Comment est il possible de parcourir ce tableau afin de connaitre les emplacements vides et ceux contenant mes TWebBrowser restants ???

En gros comment tester les emplacements vides sans faire planter l'appli ???

Mes procédures principales :

var
ArrayWBrowser : array[1..15] of TWebBrowser;
CustomWB : TWebBrowser;
I : Integer; //Compteur

procedure TForm1.FormCreate(Sender: TObject);
begin
I:= 1;
end ;

//Crée un WebBrowser.
Procedure TForm1.CreateWB; //Appelée par un Button1.Click
begin
CustomWB : = TWebBrowser.Create(TForm1);
With CustomWB do begin
...
end;
I:= I+1;
AddInArray(CustomWB);
end ;

//Ajoute un WebBrowser dans le ArrayWBrowser.
Procedure TForm1.AddInArray(WB : TWebBrowser);
begin
ArrayWBrowser[I]: =WB;
end;

//Supprime un WebBrowser.
Procedure TForm1.DelWB(N : integer); //N reçoit inttostr(Edit1.Text) puis est appelé par Button2.Click.
begin
ArrayWBrowser[N].free;
end;

//Lecture du tableau.
procedure TForm1.ReadArray; //Appelé par Button3.Click
var
m : integer; //Compteur
begin
For m:=0 to Length(ArrayWBrowser) do Showmessage(ArrayWBrowser[m].Name); //C'est ici que ça plante si ArrayWBrowser est vide !!!
end;

Pour info : Je sais que j'aurais pu utiliser un TComponentList ou TObjectList pour stocker mes WebBrowser mais je voulais absolument travailler avec un tableau.

Merci pour vos réactions.

10 réponses

Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
Ouais c'est bizarre peut etre un leger bug delphi.

J'ai fais le test et c'est vrai qu'il faut penser a remettre nil sinon bug.



Mais en ecrivant je viens de penser a cette commande FreeAndNil dont je
me demandais l'interet et je viens de tester elle est utile ici

FreeAndNil(ArrayWBrowser[N]);
équivaut à

ArrayWBrowser[N].free;

ArrayWBrowser[N]:= nil;






Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
Messages postés
11
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
12 janvier 2005

Oups désolé pour le titre qui est trompeur !
Puisqu'il s'agit de TWebBrowser et non de <STRIKE>TButton</STRIKE> !!
Veuillez m'excuser de l'erreur, faut dire qu'il est presque 6 h00 du mat' est je suis un peu creuvé.
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
Hello,



Voici ce qu'il faut faire pour pas que ca plante :

//Lecture du tableau.

procedure TForm1.ReadArray; //Appelé par Button3.Click

var

m : integer; //Compteur

begin



For m:=1 to Length(ArrayWBrowser) do



If not(ArrayWBrowser[m] = nil) then

Showmessage(ArrayWBrowser[m].Name); //C'est ici que ça plante si ArrayWBrowser est vide !!!

end;

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
3
Salut,



Quand tu libère un TWebBrowser, remets l'élément du tableau à nil




Procedure TForm1.DelWB(N : integer);

begin

ArrayWBrowser[N].free;

ArrayWBrowser[N]:= nil;

end;




Après vérifie son existence avant de l'utiliser:



For m:=0 to Length(ArrayWBrowser) do

if
ArrayWBrowser[m]<> nil then

Showmessage(ArrayWBrowser[m].Name)





Ken@vo

____________________

Code, Code, Codec !
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
JMP77 : J'array pas dit mieux

JM2 : j'aime bien ça, c propre :

//Ajoute un WebBrowser dans le ArrayWBrowser.
Procedure TForm1.AddInArray(WB : TWebBrowser);

begin
ArrayWBrowser[I]:=WB;

end;
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
Ah oui bonne precision de kenavo ne pas oublier de remettre nil dans la tableau quand tu detruits un compos.

Merci pour cette precision kenavo.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
3
oui tu as vu JMP77,

Aussi étrange que cela puisse parraître, l'appel à free ne remet pas
l'élément d'un tableau d'objet à nil (contrairement à l'appel à free
d'un objet qui remet celui-ci à nil). Donc le test déconne :
ArrayWBrowser[m] existe encore après free, par contre il pointe sur un "squelette" d'objet totalement "décharné" ; d'où erreurs !




Ken@vo
____________________
Code, Code, Codec !
Messages postés
11
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
12 janvier 2005

Merci beaucoup à tous pour vos réactions rapides !
Si j'aurais pu, j'aurais cliqué sur "Réponse acceptée" de tous tant vos réponses furent explicites et bien évidement correctes !

Encore merci et à bientôt !
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
3
Tiens, FreeAndNil, encore une fonction inexistante sous Delphi 4



Ken@vo

____________________

Code, Code, Codec !
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
Ah oups desole Kenavo.

Au moins ca montre que pour chaque nouvelle version de delphi il y a des évolutions LOL

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.