Comment passer en revue un tableau de TButton ?

Résolu
jm2mars Messages postés 11 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 12 janvier 2005 - 5 janv. 2005 à 05:44
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 - 5 janv. 2005 à 11:49
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

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
5 janv. 2005 à 11:34
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.
3
jm2mars Messages postés 11 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 12 janvier 2005
5 janv. 2005 à 05:49
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é.
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
5 janv. 2005 à 10:21
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.
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
5 janv. 2005 à 10:35
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 !
0

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

Posez votre question
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
5 janv. 2005 à 10:36
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;
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
5 janv. 2005 à 10:38
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.
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
5 janv. 2005 à 10:57
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 !
0
jm2mars Messages postés 11 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 12 janvier 2005
5 janv. 2005 à 11:46
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 !
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
5 janv. 2005 à 11:46
Tiens, FreeAndNil, encore une fonction inexistante sous Delphi 4



Ken@vo

____________________

Code, Code, Codec !
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
5 janv. 2005 à 11:49
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.
0
Rejoignez-nous